{"templateId":"markdown","versions":[{"version":"v1.39","label":"v1.39 STS","link":"/products/custody/deployment/integrate-kms/advanced-secret-management","default":true,"active":true,"folderId":"c15a2701"},{"version":"v1.38","label":"v1.38 STS","link":"/products/custody/v1.38/deployment/integrate-kms/advanced-secret-management","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.34","label":"v1.34 LTS","link":"/products/custody/v1.34/deployment/integrate-kms/advanced-secret-management","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.26","label":"v1.26 LTS","link":"/products/custody/v1.26/deployment/integrate-kms/advanced-secret-management","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.19","label":"v1.19 LTS","link":"/products/custody/v1.19/deployment/integrate-kms/advanced-secret-management","default":false,"active":false,"folderId":"c15a2701"},{"version":"v1.15","label":"v1.15 LTS","link":"/products/custody/v1.15/deployment/integrate-kms/advanced-secret-management","default":false,"active":false,"folderId":"c15a2701"}],"sharedDataIds":{"sidebar":"sidebar-products/custody/@v1.15/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Advanced secret management","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"advanced-secret-management","__idx":0},"children":["Advanced secret management"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide covers advanced secret management patterns for ","Ripple Custody",", including ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["External Secrets Operator (ESO)"]},", ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["HashiCorp Vault Agent Injector"]},", and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["AWS Secrets Manager"]}," integration."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Target audience"]},": This guide is intended for platform engineers and DevOps teams managing production ","Ripple Custody"," deployments with enterprise secret management requirements."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"table-of-contents","__idx":1},"children":["Table of contents"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#overview"},"children":["Overview"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#what-is-advanced-secret-management"},"children":["Why advanced secret management"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#external-secrets-operator-eso"},"children":["External Secrets Operator (ESO)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#hashicorp-vault-agent-injector"},"children":["HashiCorp Vault Agent Injector"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#aws-secrets-manager"},"children":["AWS Secrets Manager"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#comparison-eso-vs-vault-injector-vs-aws-secrets-manager"},"children":["Comparison: ESO vs Vault Injector vs AWS Secrets Manager"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#security-best-practices"},"children":["Security best practices"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#troubleshooting"},"children":["Troubleshooting"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#platform-specific-examples"},"children":["Platform-specific examples"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":2},"children":["Overview"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"what-is-advanced-secret-management","__idx":3},"children":["What is advanced secret management?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Advanced secret management involves using external secret stores (like HashiCorp Vault or AWS Secrets Manager) to centrally manage sensitive credentials, with automatic synchronization to Kubernetes Secrets or direct injection into application pods."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"benefits","__idx":4},"children":["Benefits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Centralized secret management"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Single source of truth for all secrets"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Centralized access control and audit logging"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Consistent secret rotation policies"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Automatic rotation"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Secrets are automatically updated in Kubernetes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No manual intervention required"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reduced risk of stale credentials"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Enhanced security"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Secrets never stored in Git or Helm values"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Fine-grained access control via IAM/RBAC"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Encryption at rest and in transit"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Compliance"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Audit trail for all secret access"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Meets regulatory requirements (SOC 2, PCI-DSS, etc.)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Separation of duties (platform team vs application team)"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"external-secrets-operator-eso","__idx":5},"children":["External Secrets Operator (ESO)"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"overview-1","__idx":6},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["External Secrets Operator (ESO)"]}," synchronizes secrets from external secret stores (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault) to Kubernetes Secrets."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["How it works"]},":"]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"flowchart LR\n    vault[\"HashiCorp Vault<br/>secret/app/luna-creds\"]\n    es[\"ExternalSecret\"]\n    ks[\"Kubernetes Secret\"]\n    pod[\"Application Pod\"]\n\n    vault -->|ESO polls| es\n    es -->|creates| ks\n    ks -->|volumeMount| pod\n","diagramHtml":"<svg id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1158.15625px;\" viewBox=\"0 0 1158.15625 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .error-icon{fill:#552222;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .error-text{fill:#552222;stroke:#552222;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-thickness-normal{stroke-width:1px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-thickness-thick{stroke-width:3.5px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-pattern-solid{stroke-dasharray:0;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .marker{fill:#333333;stroke:#333333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .marker.cross{stroke:#333333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 p{margin:0;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .label{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;color:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .cluster-label text{fill:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .cluster-label span{color:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .cluster-label span p{background-color:transparent;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .label text,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 span{fill:#333;color:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node rect,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node circle,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node ellipse,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node polygon,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .rough-node .label text,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node .label text,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .image-shape .label,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .icon-shape .label{text-anchor:middle;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .rough-node .label,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node .label,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .image-shape .label,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .icon-shape .label{text-align:center;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node.clickable{cursor:pointer;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .arrowheadPath{fill:#333333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edgePath .path{stroke:#333333;stroke-width:1px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .flowchart-link{stroke:#333333;fill:none;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .cluster text{fill:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .cluster span{color:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 rect.text{fill:none;stroke-width:0;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .icon-shape,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .icon-shape p,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .icon-shape .label rect,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 .node .neo-node{stroke:#9370DB;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node rect,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].cluster rect,#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M231.297,47L241.255,47C251.214,47,271.13,47,290.38,47C309.63,47,328.214,47,337.505,47L346.797,47\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-L_vault_es_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_vault_es_0\" data-points=\"W3sieCI6MjMxLjI5Njg3NSwieSI6NDd9LHsieCI6MjkxLjA0Njg3NSwieSI6NDd9LHsieCI6MzUwLjc5Njg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointEnd)\"></path><path d=\"M518.219,47L526.883,47C535.547,47,552.875,47,569.536,47C586.198,47,602.193,47,610.19,47L618.188,47\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-L_es_ks_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_es_ks_0\" data-points=\"W3sieCI6NTE4LjIxODc1LCJ5Ijo0N30seyJ4Ijo1NzAuMjAzMTI1LCJ5Ijo0N30seyJ4Ijo2MjIuMTg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointEnd)\"></path><path d=\"M818.563,47L831.464,47C844.365,47,870.167,47,895.302,47C920.438,47,944.906,47,957.141,47L969.375,47\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-L_ks_pod_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ks_pod_0\" data-points=\"W3sieCI6ODE4LjU2MjUsInkiOjQ3fSx7IngiOjg5NS45Njg3NSwieSI6NDd9LHsieCI6OTczLjM3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(291.046875, 47)\"><g class=\"label\" data-id=\"L_vault_es_0\" transform=\"translate(-34.75, -12)\"><foreignObject width=\"69.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>ESO polls</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(570.203125, 47)\"><g class=\"label\" data-id=\"L_es_ks_0\" transform=\"translate(-26.984375, -12)\"><foreignObject width=\"53.96875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>creates</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(895.96875, 47)\"><g class=\"label\" data-id=\"L_ks_pod_0\" transform=\"translate(-52.40625, -12)\"><foreignObject width=\"104.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>volumeMount</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-flowchart-vault-0\" data-look=\"classic\" transform=\"translate(119.6484375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-111.6484375\" y=\"-39\" width=\"223.296875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-81.6484375, -24)\"><rect></rect><foreignObject width=\"163.296875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>HashiCorp Vault<br>secret/app/luna-creds</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-flowchart-es-1\" data-look=\"classic\" transform=\"translate(434.5078125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.7109375\" y=\"-27\" width=\"167.421875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.7109375, -12)\"><rect></rect><foreignObject width=\"107.421875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ExternalSecret</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-flowchart-ks-2\" data-look=\"classic\" transform=\"translate(720.375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.1875\" y=\"-27\" width=\"196.375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.1875, -12)\"><rect></rect><foreignObject width=\"136.375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Kubernetes Secret</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-flowchart-pod-3\" data-look=\"classic\" transform=\"translate(1061.765625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-88.390625\" y=\"-27\" width=\"176.78125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-58.390625, -12)\"><rect></rect><foreignObject width=\"116.78125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application Pod</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"diagram-c12cde967fa9eb7f966d8c58b27efd7c9db47b8b774b68dad54070510d94d994-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg>","diagramHtmlDark":"<svg id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 1158.15625px;\" viewBox=\"0 0 1158.15625 94\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .error-icon{fill:#a44141;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .error-text{fill:#ddd;stroke:#ddd;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-thickness-normal{stroke-width:1px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-thickness-thick{stroke-width:3.5px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-pattern-solid{stroke-dasharray:0;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-pattern-dashed{stroke-dasharray:3;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edge-pattern-dotted{stroke-dasharray:2;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .marker{fill:lightgrey;stroke:lightgrey;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .marker.cross{stroke:lightgrey;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e p{margin:0;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .label{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;color:#ccc;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .cluster-label text{fill:#F9FFFE;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .cluster-label span{color:#F9FFFE;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .cluster-label span p{background-color:transparent;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .label text,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e span{fill:#ccc;color:#ccc;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node rect,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node circle,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node ellipse,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node polygon,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .rough-node .label text,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node .label text,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .image-shape .label,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .icon-shape .label{text-anchor:middle;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .rough-node .label,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node .label,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .image-shape .label,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .icon-shape .label{text-align:center;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node.clickable{cursor:pointer;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .arrowheadPath{fill:lightgrey;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edgePath .path{stroke:lightgrey;stroke-width:1px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .flowchart-link{stroke:lightgrey;fill:none;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .cluster text{fill:#F9FFFE;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .cluster span{color:#F9FFFE;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e rect.text{fill:none;stroke-width:0;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .icon-shape,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .icon-shape p,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .icon-shape .label rect,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e .node .neo-node{stroke:#ccc;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node rect,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].cluster rect,#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node polygon{stroke:url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node path{stroke:url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-gradient);stroke-width:1px;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node circle{stroke:url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M231.297,47L241.255,47C251.214,47,271.13,47,290.38,47C309.63,47,328.214,47,337.505,47L346.797,47\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-L_vault_es_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_vault_es_0\" data-points=\"W3sieCI6MjMxLjI5Njg3NSwieSI6NDd9LHsieCI6MjkxLjA0Njg3NSwieSI6NDd9LHsieCI6MzUwLjc5Njg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointEnd)\"></path><path d=\"M518.219,47L526.883,47C535.547,47,552.875,47,569.536,47C586.198,47,602.193,47,610.19,47L618.188,47\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-L_es_ks_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_es_ks_0\" data-points=\"W3sieCI6NTE4LjIxODc1LCJ5Ijo0N30seyJ4Ijo1NzAuMjAzMTI1LCJ5Ijo0N30seyJ4Ijo2MjIuMTg3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointEnd)\"></path><path d=\"M818.563,47L831.464,47C844.365,47,870.167,47,895.302,47C920.438,47,944.906,47,957.141,47L969.375,47\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-L_ks_pod_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_ks_pod_0\" data-points=\"W3sieCI6ODE4LjU2MjUsInkiOjQ3fSx7IngiOjg5NS45Njg3NSwieSI6NDd9LHsieCI6OTczLjM3NSwieSI6NDd9XQ==\" data-look=\"classic\" marker-end=\"url(#diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(291.046875, 47)\"><g class=\"label\" data-id=\"L_vault_es_0\" transform=\"translate(-34.75, -12)\"><foreignObject width=\"69.5\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>ESO polls</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(570.203125, 47)\"><g class=\"label\" data-id=\"L_es_ks_0\" transform=\"translate(-26.984375, -12)\"><foreignObject width=\"53.96875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>creates</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(895.96875, 47)\"><g class=\"label\" data-id=\"L_ks_pod_0\" transform=\"translate(-52.40625, -12)\"><foreignObject width=\"104.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>volumeMount</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-flowchart-vault-0\" data-look=\"classic\" transform=\"translate(119.6484375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-111.6484375\" y=\"-39\" width=\"223.296875\" height=\"78\"></rect><g class=\"label\" style=\"\" transform=\"translate(-81.6484375, -24)\"><rect></rect><foreignObject width=\"163.296875\" height=\"48\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>HashiCorp Vault<br>secret/app/luna-creds</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-flowchart-es-1\" data-look=\"classic\" transform=\"translate(434.5078125, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.7109375\" y=\"-27\" width=\"167.421875\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.7109375, -12)\"><rect></rect><foreignObject width=\"107.421875\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>ExternalSecret</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-flowchart-ks-2\" data-look=\"classic\" transform=\"translate(720.375, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-98.1875\" y=\"-27\" width=\"196.375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-68.1875, -12)\"><rect></rect><foreignObject width=\"136.375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Kubernetes Secret</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-flowchart-pod-3\" data-look=\"classic\" transform=\"translate(1061.765625, 47)\"><rect class=\"basic label-container\" style=\"\" x=\"-88.390625\" y=\"-27\" width=\"176.78125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-58.390625, -12)\"><rect></rect><foreignObject width=\"116.78125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>Application Pod</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><defs><filter id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><linearGradient id=\"diagram-3196d21a1c5558fb076358d643ff6d0f5f637c6bf022daba96aa98cef916716e-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#cccccc\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(180, 0%, 18.3529411765%)\" stop-opacity=\"1\"></stop></linearGradient></svg>"},"children":["flowchart LR\n    vault[\"HashiCorp Vault<br/>secret/app/luna-creds\"]\n    es[\"ExternalSecret\"]\n    ks[\"Kubernetes Secret\"]\n    pod[\"Application Pod\"]\n\n    vault -->|ESO polls| es\n    es -->|creates| ks\n    ks -->|volumeMount| pod\n"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"prerequisites","__idx":7},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Install External Secrets Operator"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Add Helm repository\nhelm repo add external-secrets https://charts.external-secrets.io\nhelm repo update\n\n# Install ESO\nhelm install external-secrets \\\n  external-secrets/external-secrets \\\n  --namespace external-secrets-system \\\n  --create-namespace \\\n  --set installCRDs=true\n\n# Verify installation\nkubectl get pods -n external-secrets-system\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Configure HashiCorp Vault"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Enable Kubernetes auth method\nvault auth enable kubernetes\n\n# Configure Kubernetes auth\nvault write auth/kubernetes/config \\\n  kubernetes_host=\"https://kubernetes.default.svc:443\"\n\n# Create policy for ESO\nvault policy write eso-reader - <<EOF\npath \"secret/data/app/*\" {\n  capabilities = [\"read\"]\n}\nEOF\n\n# Create role for ESO\nvault write auth/kubernetes/role/eso-reader \\\n  bound_service_account_names=external-secrets \\\n  bound_service_account_namespaces=custody-core \\\n  policies=eso-reader \\\n  ttl=1h\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["3. Store Secrets in Vault"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Example: Store Luna HSM credentials\nvault kv put secret/app/luna-creds \\\n  ca.pem=@ca.pem \\\n  client.pem=@client.pem \\\n  client.key=@client.key \\\n  pin=\"your-hsm-pin\"\n\n# Verify\nvault kv get secret/app/luna-creds\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-create-secretstore","__idx":8},"children":["Step 1: Create SecretStore"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["SecretStore"]}," defines the connection to HashiCorp Vault."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["secretstore.yaml"]}]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# secretstore.yaml\napiVersion: external-secrets.io/v1beta1\nkind: SecretStore\nmetadata:\n  name: vault-backend\n  namespace: custody-core\nspec:\n  provider:\n    vault:\n      # Vault server address\n      server: \"https://vault.example.com\"\n\n      # KV-v2 secrets engine mount path\n      path: \"secret\"\n      version: \"v2\"\n\n      # Authentication method\n      auth:\n        kubernetes:\n          # Kubernetes auth mount path in Vault\n          mountPath: \"kubernetes\"\n\n          # Vault role to use\n          role: \"eso-reader\"\n\n          # Service account for authentication\n          serviceAccountRef:\n            name: external-secrets\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Apply"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"kubectl apply -f secretstore.yaml\n\n# Verify\nkubectl get secretstore -n custody-core\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-create-externalsecret","__idx":9},"children":["Step 2: Create ExternalSecret"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ExternalSecret"]}," defines which secrets to sync and how to map them."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["externalsecret-luna.yaml"]}]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# externalsecret-luna.yaml\napiVersion: external-secrets.io/v1beta1\nkind: ExternalSecret\nmetadata:\n  name: external-kms-luna-secret\n  namespace: custody-core\nspec:\n  # Refresh interval (how often to check Vault for updates)\n  refreshInterval: 1h\n\n  # Reference to SecretStore\n  secretStoreRef:\n    name: vault-backend\n    kind: SecretStore\n\n  # Target Kubernetes Secret\n  target:\n    name: kms-luna-credentials\n    creationPolicy: Owner\n\n  # Data mapping: Vault key -> Kubernetes Secret key\n  data:\n    # ca.pem\n    - secretKey: ca.pem\n      remoteRef:\n        key: app/luna-creds\n        property: ca.pem\n\n    # client.pem\n    - secretKey: client.pem\n      remoteRef:\n        key: app/luna-creds\n        property: client.pem\n\n    # client.key\n    - secretKey: client.key\n      remoteRef:\n        key: app/luna-creds\n        property: client.key\n\n    # PIN\n    - secretKey: KMS_LUNA_PIN\n      remoteRef:\n        key: app/luna-creds\n        property: pin\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Apply"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"kubectl apply -f externalsecret-luna.yaml\n\n# Verify ExternalSecret\nkubectl get externalsecret -n custody-core\n\n# Verify Kubernetes Secret was created\nkubectl get secret kms-luna-credentials -n custody-core\n\n# View secret keys (not values)\nkubectl describe secret kms-luna-credentials -n custody-core\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-reference-secret-in-helm-values","__idx":10},"children":["Step 3: Reference secret in Helm values"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Update your Helm values to reference the ESO-managed secret."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["values.yaml"]}]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# values.yaml\nkms:\n  kind: \"luna\"\n\n  # Reference existing secret created by ESO\n  existingSecret: \"kms-luna-credentials\"\n\n  # Optional: Specify custom key names if different from defaults\n  existingSecretKeys:\n    pin: \"KMS_LUNA_PIN\"\n    caPem: \"ca.pem\"\n    clientPem: \"client.pem\"\n    clientKey: \"client.key\"\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Deploy"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"helm upgrade --install harmonize ./harmonize-custody \\\n  --namespace custody-core \\\n  -f values.yaml\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-4-verify-secret-rotation","__idx":11},"children":["Step 4: Verify secret rotation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["ESO automatically updates the Kubernetes Secret when the Vault secret changes."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Test rotation"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Update secret in Vault\nvault kv put secret/app/luna-creds \\\n  ca.pem=@ca-new.pem \\\n  client.pem=@client-new.pem \\\n  client.key=@client-new.key \\\n  pin=\"new-hsm-pin\"\n\n# Wait for refreshInterval (default: 1h) or force sync\nkubectl annotate externalsecret external-kms-luna-secret \\\n  force-sync=$(date +%s) \\\n  -n custody-core\n\n# Verify secret was updated\nkubectl get secret kms-luna-credentials -n custody-core -o yaml\n\n# Restart pods to pick up new secret\nkubectl rollout restart deployment/harmonize-notary -n custody-core\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"hashicorp-vault-agent-injector","__idx":12},"children":["HashiCorp Vault Agent Injector"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"overview-2","__idx":13},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Vault Agent Injector"]}," uses a sidecar pattern to inject secrets directly into application pods without creating Kubernetes Secrets."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["How it works"]},":"]},{"$$mdtype":"Tag","name":"Diagram","attributes":{"data-language":"mermaid","diagramType":"mermaid","diagramSource":"flowchart LR\n    agent[\"vault-agent sidecar\"]\n    vol[\"/vault/secrets/\"]\n    kms[\"kms-luna container\"]\n\n    agent -->|writes secrets| vol\n    vol -->|volumeMount| kms\n","diagramHtml":"<svg id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 894.890625px;\" viewBox=\"0 0 894.890625 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .error-icon{fill:#552222;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .error-text{fill:#552222;stroke:#552222;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-thickness-normal{stroke-width:1px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-thickness-thick{stroke-width:3.5px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-pattern-solid{stroke-dasharray:0;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .marker{fill:#333333;stroke:#333333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .marker.cross{stroke:#333333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 p{margin:0;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .label{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;color:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .cluster-label text{fill:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .cluster-label span{color:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .cluster-label span p{background-color:transparent;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .label text,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 span{fill:#333;color:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node rect,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node circle,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node ellipse,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node polygon,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .rough-node .label text,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node .label text,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .image-shape .label,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .icon-shape .label{text-anchor:middle;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .rough-node .label,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node .label,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .image-shape .label,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .icon-shape .label{text-align:center;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node.clickable{cursor:pointer;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .arrowheadPath{fill:#333333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edgePath .path{stroke:#333333;stroke-width:1px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .flowchart-link{stroke:#333333;fill:none;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .cluster text{fill:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .cluster span{color:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 rect.text{fill:none;stroke-width:0;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .icon-shape,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .icon-shape p,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .icon-shape .label rect,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 .node .neo-node{stroke:#9370DB;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node rect,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].cluster rect,#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node path{stroke:#9370DB;stroke-width:1px;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node .neo-line path{stroke:#9370DB;filter:none;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M209.359,35L222.038,35C234.716,35,260.073,35,284.763,35C309.453,35,333.477,35,345.488,35L357.5,35\" id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-L_agent_vol_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_agent_vol_0\" data-points=\"W3sieCI6MjA5LjM1OTM3NSwieSI6MzV9LHsieCI6Mjg1LjQyOTY4NzUsInkiOjM1fSx7IngiOjM2MS41LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-pointEnd)\"></path><path d=\"M528.25,35L541.151,35C554.052,35,579.854,35,604.99,35C630.125,35,654.594,35,666.828,35L679.063,35\" id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-L_vol_kms_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_vol_kms_0\" data-points=\"W3sieCI6NTI4LjI1LCJ5IjozNX0seyJ4Ijo2MDUuNjU2MjUsInkiOjM1fSx7IngiOjY4My4wNjI1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(285.4296875, 35)\"><g class=\"label\" data-id=\"L_agent_vol_0\" transform=\"translate(-51.0703125, -12)\"><foreignObject width=\"102.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>writes secrets</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(605.65625, 35)\"><g class=\"label\" data-id=\"L_vol_kms_0\" transform=\"translate(-52.40625, -12)\"><foreignObject width=\"104.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>volumeMount</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-flowchart-agent-0\" data-look=\"classic\" transform=\"translate(108.6796875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.6796875\" y=\"-27\" width=\"201.359375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.6796875, -12)\"><rect></rect><foreignObject width=\"141.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>vault-agent sidecar</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-flowchart-vol-1\" data-look=\"classic\" transform=\"translate(444.875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.375\" y=\"-27\" width=\"166.75\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.375, -12)\"><rect></rect><foreignObject width=\"106.75\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>/vault/secrets/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-flowchart-kms-2\" data-look=\"classic\" transform=\"translate(784.9765625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.9140625\" y=\"-27\" width=\"203.828125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.9140625, -12)\"><rect></rect><foreignObject width=\"143.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>kms-luna container</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs><defs><filter id=\"diagram-de9bf6fc4dd4d649346aaa4d89122197416d741957582244b329ff0fd92c6b70-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#000000\"></feDropShadow></filter></defs></svg>","diagramHtmlDark":"<svg id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" class=\"flowchart\" style=\"max-width: 894.890625px;\" viewBox=\"0 0 894.890625 70\" role=\"graphics-document document\" aria-roledescription=\"flowchart-v2\"><style>#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;fill:#ccc;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .error-icon{fill:#a44141;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .error-text{fill:#ddd;stroke:#ddd;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-thickness-normal{stroke-width:1px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-thickness-thick{stroke-width:3.5px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-pattern-solid{stroke-dasharray:0;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-thickness-invisible{stroke-width:0;fill:none;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-pattern-dashed{stroke-dasharray:3;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edge-pattern-dotted{stroke-dasharray:2;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .marker{fill:lightgrey;stroke:lightgrey;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .marker.cross{stroke:lightgrey;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 svg{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:16px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 p{margin:0;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .label{font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;color:#ccc;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .cluster-label text{fill:#F9FFFE;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .cluster-label span{color:#F9FFFE;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .cluster-label span p{background-color:transparent;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .label text,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 span{fill:#ccc;color:#ccc;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node rect,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node circle,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node ellipse,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node polygon,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node path{fill:#1f2020;stroke:#ccc;stroke-width:1px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .rough-node .label text,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node .label text,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .image-shape .label,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .icon-shape .label{text-anchor:middle;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .rough-node .label,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node .label,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .image-shape .label,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .icon-shape .label{text-align:center;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node.clickable{cursor:pointer;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .root .anchor path{fill:lightgrey!important;stroke-width:0;stroke:lightgrey;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .arrowheadPath{fill:lightgrey;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edgePath .path{stroke:lightgrey;stroke-width:1px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .flowchart-link{stroke:lightgrey;fill:none;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edgeLabel{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edgeLabel p{background-color:hsl(0, 0%, 34.4117647059%);}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .edgeLabel rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .labelBkg{background-color:rgba(87.75, 87.75, 87.75, 0.5);}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .cluster rect{fill:hsl(180, 1.5873015873%, 28.3529411765%);stroke:rgba(255, 255, 255, 0.25);stroke-width:1px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .cluster text{fill:#F9FFFE;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .cluster span{color:#F9FFFE;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;font-size:12px;background:hsl(20, 1.5873015873%, 12.3529411765%);border:1px solid rgba(255, 255, 255, 0.25);border-radius:2px;pointer-events:none;z-index:100;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#ccc;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 rect.text{fill:none;stroke-width:0;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .icon-shape,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .image-shape{background-color:hsl(0, 0%, 34.4117647059%);text-align:center;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .icon-shape p,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .image-shape p{background-color:hsl(0, 0%, 34.4117647059%);padding:2px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .icon-shape .label rect,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .image-shape .label rect{opacity:0.5;background-color:hsl(0, 0%, 34.4117647059%);fill:hsl(0, 0%, 34.4117647059%);}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 .node .neo-node{stroke:#ccc;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node rect,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].cluster rect,#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node polygon{stroke:url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].swimlane.cluster rect{filter:none;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node path{stroke:url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-gradient);stroke-width:1px;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node .neo-line path{stroke:#ccc;filter:none;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node circle{stroke:url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].node circle .state-start{fill:#000000;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].icon-shape .icon{fill:url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 [data-look=\"neo\"].icon-shape .icon-neo path{stroke:url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16 :root{--mermaid-font-family:\"Redocly Mermaid Sans\",\"Redocly Mermaid CJK\",sans-serif;}</style><g><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-pointEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-pointStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"4.5\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"8\" markerHeight=\"8\" orient=\"auto\"><path d=\"M 0 5 L 10 10 L 10 0 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-pointEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"11.5\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"10.5\" markerHeight=\"14\" orient=\"auto\"><path d=\"M 0 0 L 11.5 7 L 0 14 z\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-pointStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 11.5 14\" refX=\"1\" refY=\"7\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11.5\" markerHeight=\"14\" orient=\"auto\"><polygon points=\"0,7 11.5,14 11.5,0\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></polygon></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-circleEnd\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"11\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-circleStart\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-1\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-circleEnd-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refY=\"5\" refX=\"12.25\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-circleStart-margin\" class=\"marker flowchart-v2\" viewBox=\"0 0 10 10\" refX=\"-2\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"14\" markerHeight=\"14\" orient=\"auto\"><circle cx=\"5\" cy=\"5\" r=\"5\" class=\"arrowMarkerPath\" style=\"stroke-width: 0; stroke-dasharray: 1, 0;\"></circle></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-crossEnd\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"12\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-crossStart\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 11 11\" refX=\"-1\" refY=\"5.2\" markerUnits=\"userSpaceOnUse\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\"><path d=\"M 1,1 l 9,9 M 10,1 l -9,9\" class=\"arrowMarkerPath\" style=\"stroke-width: 2; stroke-dasharray: 1, 0;\"></path></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-crossEnd-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"17.7\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5;\"></path></marker><marker id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-crossStart-margin\" class=\"marker cross flowchart-v2\" viewBox=\"0 0 15 15\" refX=\"-3.5\" refY=\"7.5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\"><path d=\"M 1,1 L 14,14 M 1,14 L 14,1\" class=\"arrowMarkerPath\" style=\"stroke-width: 2.5; stroke-dasharray: 1, 0;\"></path></marker><g class=\"root\"><g class=\"clusters\"></g><g class=\"edgePaths\"><path d=\"M209.359,35L222.038,35C234.716,35,260.073,35,284.763,35C309.453,35,333.477,35,345.488,35L357.5,35\" id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-L_agent_vol_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_agent_vol_0\" data-points=\"W3sieCI6MjA5LjM1OTM3NSwieSI6MzV9LHsieCI6Mjg1LjQyOTY4NzUsInkiOjM1fSx7IngiOjM2MS41LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-pointEnd)\"></path><path d=\"M528.25,35L541.151,35C554.052,35,579.854,35,604.99,35C630.125,35,654.594,35,666.828,35L679.063,35\" id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-L_vol_kms_0\" class=\"edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link\" style=\";\" data-edge=\"true\" data-et=\"edge\" data-id=\"L_vol_kms_0\" data-points=\"W3sieCI6NTI4LjI1LCJ5IjozNX0seyJ4Ijo2MDUuNjU2MjUsInkiOjM1fSx7IngiOjY4My4wNjI1LCJ5IjozNX1d\" data-look=\"classic\" marker-end=\"url(#diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16_flowchart-v2-pointEnd)\"></path></g><g class=\"edgeLabels\"><g class=\"edgeLabel\" transform=\"translate(285.4296875, 35)\"><g class=\"label\" data-id=\"L_agent_vol_0\" transform=\"translate(-51.0703125, -12)\"><foreignObject width=\"102.140625\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>writes secrets</p></span></div></foreignObject></g></g><g class=\"edgeLabel\" transform=\"translate(605.65625, 35)\"><g class=\"label\" data-id=\"L_vol_kms_0\" transform=\"translate(-52.40625, -12)\"><foreignObject width=\"104.8125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" class=\"labelBkg\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"edgeLabel\"><p>volumeMount</p></span></div></foreignObject></g></g></g><g class=\"nodes\"><g class=\"node default\" id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-flowchart-agent-0\" data-look=\"classic\" transform=\"translate(108.6796875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-100.6796875\" y=\"-27\" width=\"201.359375\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-70.6796875, -12)\"><rect></rect><foreignObject width=\"141.359375\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>vault-agent sidecar</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-flowchart-vol-1\" data-look=\"classic\" transform=\"translate(444.875, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-83.375\" y=\"-27\" width=\"166.75\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-53.375, -12)\"><rect></rect><foreignObject width=\"106.75\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>/vault/secrets/</p></span></div></foreignObject></g></g><g class=\"node default\" id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-flowchart-kms-2\" data-look=\"classic\" transform=\"translate(784.9765625, 35)\"><rect class=\"basic label-container\" style=\"\" x=\"-101.9140625\" y=\"-27\" width=\"203.828125\" height=\"54\"></rect><g class=\"label\" style=\"\" transform=\"translate(-71.9140625, -12)\"><rect></rect><foreignObject width=\"143.828125\" height=\"24\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;\"><span class=\"nodeLabel\"><p>kms-luna container</p></span></div></foreignObject></g></g></g></g></g><defs><filter id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-drop-shadow\" height=\"130%\" width=\"130%\"><feDropShadow dx=\"4\" dy=\"4\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><defs><filter id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-drop-shadow-small\" height=\"150%\" width=\"150%\"><feDropShadow dx=\"2\" dy=\"2\" stdDeviation=\"0\" flood-opacity=\"0.06\" flood-color=\"#FFFFFF\"></feDropShadow></filter></defs><linearGradient id=\"diagram-59829ea43f32af9be4512993ffa134849a8613a19e7dfda5a5c4975648cf8b16-gradient\" gradientUnits=\"objectBoundingBox\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#cccccc\" stop-opacity=\"1\"></stop><stop offset=\"100%\" stop-color=\"hsl(180, 0%, 18.3529411765%)\" stop-opacity=\"1\"></stop></linearGradient></svg>"},"children":["flowchart LR\n    agent[\"vault-agent sidecar\"]\n    vol[\"/vault/secrets/\"]\n    kms[\"kms-luna container\"]\n\n    agent -->|writes secrets| vol\n    vol -->|volumeMount| kms\n"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"prerequisites-1","__idx":14},"children":["Prerequisites"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Install Vault Agent Injector"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Add Helm repository\nhelm repo add hashicorp https://helm.releases.hashicorp.com\nhelm repo update\n\n# Install Vault with injector\nhelm install vault hashicorp/vault \\\n  --namespace vault-system \\\n  --create-namespace \\\n  --set \"injector.enabled=true\" \\\n  --set \"server.dev.enabled=true\"\n\n# Verify installation\nkubectl get pods -n vault-system\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Configure Vault"]}," (same as ESO prerequisites)"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-annotate-pod-for-injection","__idx":15},"children":["Step 1: Annotate pod for injection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add Vault annotations to your Helm values to enable injection."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["values.yaml"]}]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# values.yaml\nkms:\n  kind: \"luna\"\n\n  # Vault Agent Injector annotations\n  podAnnotations:\n    vault.hashicorp.com/agent-inject: \"true\"\n    vault.hashicorp.com/role: \"eso-reader\"\n    vault.hashicorp.com/agent-inject-secret-ca.pem: \"secret/data/app/luna-creds\"\n    vault.hashicorp.com/agent-inject-template-ca.pem: |\n      {{- with secret \"secret/data/app/luna-creds\" -}}\n      {{ .Data.data.ca.pem }}\n      {{- end -}}\n\n    vault.hashicorp.com/agent-inject-secret-client.pem: \"secret/data/app/luna-creds\"\n    vault.hashicorp.com/agent-inject-template-client.pem: |\n      {{- with secret \"secret/data/app/luna-creds\" -}}\n      {{ .Data.data.client.pem }}\n      {{- end -}}\n\n    vault.hashicorp.com/agent-inject-secret-client.key: \"secret/data/app/luna-creds\"\n    vault.hashicorp.com/agent-inject-template-client.key: |\n      {{- with secret \"secret/data/app/luna-creds\" -}}\n      {{ .Data.data.client.key }}\n      {{- end -}}\n\n    vault.hashicorp.com/agent-inject-secret-pin: \"secret/data/app/luna-creds\"\n    vault.hashicorp.com/agent-inject-template-pin: |\n      {{- with secret \"secret/data/app/luna-creds\" -}}\n      {{ .Data.data.pin }}\n      {{- end -}}\n\n  # Environment variables pointing to injected files\n  extraEnvVars:\n    - name: KMS_LUNA_CA_PEM_PATH\n      value: \"/vault/secrets/ca.pem\"\n    - name: KMS_LUNA_CLIENT_PEM_PATH\n      value: \"/vault/secrets/client.pem\"\n    - name: KMS_LUNA_CLIENT_KEY_PATH\n      value: \"/vault/secrets/client.key\"\n    - name: KMS_LUNA_PIN\n      valueFrom:\n        secretKeyRef:\n          name: vault-injected-pin\n          key: pin\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-deploy-and-verify","__idx":16},"children":["Step 2: Deploy and verify"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Deploy with Vault Agent Injector\nhelm upgrade --install harmonize ./harmonize-custody \\\n  --namespace custody-core \\\n  -f values.yaml\n\n# Verify vault-agent sidecar was injected\nkubectl get pods -n custody-core\n\n# Expected output:\n# NAME                                READY   STATUS    RESTARTS   AGE\n# harmonize-notary-<hash>             2/2     Running   0          1m\n#                                     ^^^\n#                                     2 containers: kms-luna + vault-agent\n\n# Verify secrets were injected\nkubectl exec -it -n custody-core deployment/harmonize-notary -c kms-luna -- \\\n  ls -la /vault/secrets/\n\n# Expected output:\n# -rw-r--r-- 1 vault vault 1234 Jun 26 10:00 ca.pem\n# -rw-r--r-- 1 vault vault 1234 Jun 26 10:00 client.pem\n# -rw-r--r-- 1 vault vault 1234 Jun 26 10:00 client.key\n# -rw-r--r-- 1 vault vault   12 Jun 26 10:00 pin\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"aws-secrets-manager","__idx":17},"children":["AWS Secrets Manager"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"overview-3","__idx":18},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["AWS Secrets Manager"]}," is used by the Vault Deployer UI to store deployment configuration and HSM credentials for AWS Nitro enclave deployments."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Storage path structure"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"/ripple/custody/<tenant-id>/<instance-id>/<construct-name>/<construct-id>/\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Where:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<tenant-id>"]},": Your ","Ripple Custody"," tenant identifier"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<instance-id>"]},": Your ","Ripple Custody"," instance identifier"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<construct-name>"]},": Always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["vault"]}," for vault deployments"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["<construct-id>"]},": The vault ID (UUID)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"secrets-stored","__idx":19},"children":["Secrets stored"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["config"]}," key"]},": Deployment configuration"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"deployment\": {\n    \"vault\": {\n      \"release-name\": \"vault-01\",\n      \"construct-id\": \"00000000-0000-0000-0000-000000000001\"\n    }\n  },\n  \"custody\": {\n    \"environment\": \"https://api.your-instance.custody.example.com/\"\n  },\n  \"infrastructure\": {\n    \"aws\": {\n      \"region\": \"us-east-1\",\n      \"ec2-iam-role\": \"vault-role\",\n      \"vpc\": {\n        \"create-new\": false,\n        \"id\": \"vpc-abc123\",\n        \"subnet-id\": \"subnet-def456\"\n      }\n    }\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hsm"]}," key"]},": HSM credentials"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"kms-awscloudhsm\": \"cluster-a1b2c3d4e5f\",\n  \"kms-awscloudhsm-cacert\": \"-----BEGIN CERTIFICATE-----\\nMI...==\\n-----END CERTIFICATE-----\\n\",\n  \"kms-password\": \"CryptoUserPassword\",\n  \"kms-soft-wrapping-key\": \"0123456789abcdef...\",\n  \"kms-username\": \"vault-crypto-user\",\n  \"kms-wrap-key\": \"0000000000000001\",\n  \"kms-awscloudhsm-clientcert\": \"-----BEGIN CERTIFICATE-----\\n...\",\n  \"kms-awscloudhsm-clientkey\": \"-----BEGIN PRIVATE KEY-----\\n...\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"security-best-practices","__idx":20},"children":["Security best practices"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Limit Access"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Create IAM policy for limited access\ncat > secrets-manager-policy.json <<EOF\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"secretsmanager:GetSecretValue\",\n        \"secretsmanager:DescribeSecret\"\n      ],\n      \"Resource\": \"arn:aws:secretsmanager:us-east-1:123456789012:secret:/ripple/custody/*\"\n    }\n  ]\n}\nEOF\n\n# Attach policy to role\naws iam put-role-policy \\\n  --role-name vault-deployer-role \\\n  --policy-name SecretsManagerAccess \\\n  --policy-document file://secrets-manager-policy.json\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Enable Audit Logging"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Enable CloudTrail for Secrets Manager\naws cloudtrail create-trail \\\n  --name secrets-manager-audit \\\n  --s3-bucket-name my-audit-bucket\n\n# Start logging\naws cloudtrail start-logging \\\n  --name secrets-manager-audit\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["3. Recovery Window"]},":"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["AWS Secrets Manager provides a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["7-day recovery window"]}," for deleted secrets."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Delete secret (with recovery window)\naws secretsmanager delete-secret \\\n  --secret-id /ripple/custody/tenant/instance/vault/vault-id/config \\\n  --recovery-window-in-days 7\n\n# Restore secret within 7 days\naws secretsmanager restore-secret \\\n  --secret-id /ripple/custody/tenant/instance/vault/vault-id/config\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"accessing-secrets","__idx":21},"children":["Accessing secrets"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Get config secret\naws secretsmanager get-secret-value \\\n  --secret-id /ripple/custody/<tenant-id>/<instance-id>/vault/<vault-id>/config \\\n  --query SecretString \\\n  --output text | jq .\n\n# Get HSM credentials\naws secretsmanager get-secret-value \\\n  --secret-id /ripple/custody/<tenant-id>/<instance-id>/vault/<vault-id>/hsm \\\n  --query SecretString \\\n  --output text | jq .\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important"]},": While AWS Secrets Manager is used during vault ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["deployment"]}," automation, ","Ripple Custody"," vault itself ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["does not"]}," use AWS Secrets Manager to store wallet private keys. Wallet keys are encrypted with AWS CloudHSM and stored in the ","Ripple Custody"," database."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"comparison-eso-vs-vault-injector-vs-aws-secrets-manager","__idx":22},"children":["Comparison: ESO vs Vault Injector vs AWS Secrets Manager"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Feature"},"children":["Feature"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"External Secrets Operator"},"children":["External Secrets Operator"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Vault Agent Injector"},"children":["Vault Agent Injector"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"AWS Secrets Manager"},"children":["AWS Secrets Manager"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Secret Storage"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Kubernetes Secret"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Files in shared volume"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["AWS Secrets Manager"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rotation"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Automatic (refreshInterval)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Automatic (lease renewal)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Manual or Lambda-based"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Kubernetes Native"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (CRDs)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (annotations)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No (AWS-specific)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Multi-Cloud"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (Vault, AWS, Azure)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Yes (Vault only)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No (AWS only)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Complexity"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Low"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Medium"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Low"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Performance"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Good (cached in K8s Secret)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Excellent (direct injection)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Good (cached in AWS)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Security"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Good (K8s RBAC)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Excellent (no K8s Secret)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Good (IAM policies)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use Case"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["General-purpose"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["High-security environments"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["AWS Nitro enclaves"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ripple Custody"," Support"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Recommended"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Supported"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Vault Deployer UI only"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"recommendations","__idx":23},"children":["Recommendations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use External Secrets Operator (ESO) when"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You need multi-cloud support"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You want Kubernetes-native secret management"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You need automatic rotation with minimal complexity"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Recommended for most ","Ripple Custody"," deployments"]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use Vault Agent Injector when"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You have strict security requirements (no K8s Secrets)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You need fine-grained secret access control"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You want secrets to be ephemeral (not persisted in K8s)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You're already using HashiCorp Vault extensively"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Use AWS Secrets Manager when"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You're deploying vaults in AWS Nitro enclaves"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You're using the Vault Deployer UI"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You need AWS-native secret management"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Only for Vault Deployer UI deployments"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"security-best-practices-1","__idx":24},"children":["Security best practices"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"principle-of-least-privilege","__idx":25},"children":["Principle of least privilege"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Vault Policies"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"hcl","header":{"controls":{"copy":{}}},"source":"# eso-reader-policy.hcl\n# Read-only access to specific paths\npath \"secret/data/app/luna-creds\" {\n  capabilities = [\"read\"]\n}\n\n# Deny all other paths\npath \"secret/*\" {\n  capabilities = [\"deny\"]\n}\n","lang":"hcl"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Kubernetes RBAC"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# rbac.yaml\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  name: secret-reader\n  namespace: custody-core\nrules:\n- apiGroups: [\"\"]\n  resources: [\"secrets\"]\n  resourceNames: [\"kms-luna-credentials\"]\n  verbs: [\"get\"]\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n  name: secret-reader-binding\n  namespace: custody-core\nsubjects:\n- kind: ServiceAccount\n  name: harmonize-notary\n  namespace: custody-core\nroleRef:\n  kind: Role\n  name: secret-reader\n  apiGroup: rbac.authorization.k8s.io\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"secret-rotation","__idx":26},"children":["Secret rotation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Automated Rotation with ESO"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# externalsecret.yaml\nspec:\n  refreshInterval: 1h  # Check Vault every hour\n\n  # Optional: Force immediate sync on annotation change\n  metadata:\n    annotations:\n      force-sync: \"2025-06-26T10:00:00Z\"\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Rotation Procedure"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# 1. Update secret in Vault\nvault kv put secret/app/luna-creds \\\n  ca.pem=@ca-new.pem \\\n  client.pem=@client-new.pem \\\n  client.key=@client-new.key \\\n  pin=\"new-pin\"\n\n# 2. Force ESO sync (optional, or wait for refreshInterval)\nkubectl annotate externalsecret external-kms-luna-secret \\\n  force-sync=$(date +%s) \\\n  -n custody-core\n\n# 3. Restart pods to pick up new secret\nkubectl rollout restart deployment/harmonize-notary -n custody-core\n\n# 4. Verify new secret is in use\nkubectl logs -n custody-core deployment/harmonize-notary | grep \"Connected to HSM\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"audit-logging","__idx":27},"children":["Audit logging"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Vault Audit Logging"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Enable audit logging\nvault audit enable file file_path=/vault/logs/audit.log\n\n# Query audit logs\ncat /vault/logs/audit.log | jq 'select(.request.path == \"secret/data/app/luna-creds\")'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Kubernetes Audit Logging"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# audit-policy.yaml\napiVersion: audit.k8s.io/v1\nkind: Policy\nrules:\n- level: RequestResponse\n  resources:\n  - group: \"\"\n    resources: [\"secrets\"]\n  namespaces: [\"custody-core\"]\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"encryption-at-rest","__idx":28},"children":["Encryption at rest"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Vault Transit Engine"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Enable transit engine\nvault secrets enable transit\n\n# Create encryption key\nvault write -f transit/keys/custody-secrets\n\n# Encrypt secret before storing\nvault write transit/encrypt/custody-secrets \\\n  plaintext=$(base64 <<< \"my-secret-value\")\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Kubernetes Encryption at Rest"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# encryption-config.yaml\napiVersion: apiserver.config.k8s.io/v1\nkind: EncryptionConfiguration\nresources:\n  - resources:\n      - secrets\n    providers:\n      - aescbc:\n          keys:\n            - name: key1\n              secret: <base64-encoded-32-byte-key>\n      - identity: {}\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"network-security","__idx":29},"children":["Network security"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["1. Vault TLS"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Configure Vault with TLS\nvault write pki/config/urls \\\n  issuing_certificates=\"https://vault.example.com:8200/v1/pki/ca\" \\\n  crl_distribution_points=\"https://vault.example.com:8200/v1/pki/crl\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2. Network Policies"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"# network-policy.yaml\napiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  name: allow-vault-access\n  namespace: custody-core\nspec:\n  podSelector:\n    matchLabels:\n      app: harmonize-notary\n  policyTypes:\n  - Egress\n  egress:\n  - to:\n    - podSelector:\n        matchLabels:\n          app: vault\n    ports:\n    - protocol: TCP\n      port: 8200\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"troubleshooting","__idx":30},"children":["Troubleshooting"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"issue-eso-not-syncing-secrets","__idx":31},"children":["Issue: ESO not syncing secrets"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Symptoms"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["ExternalSecret shows ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SecretSyncedError"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Kubernetes Secret not created or not updated"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Possible causes"]},":"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Vault authentication failed"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Vault path incorrect"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Vault policy doesn't allow read access"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Check ExternalSecret status\nkubectl describe externalsecret external-kms-luna-secret -n custody-core\n\n# Check ESO logs\nkubectl logs -n external-secrets-system deployment/external-secrets\n\n# Test Vault authentication manually\nkubectl exec -it -n custody-core deployment/harmonize-notary -- \\\n  vault login -method=kubernetes role=eso-reader\n\n# Verify Vault path\nvault kv get secret/app/luna-creds\n\n# Verify Vault policy\nvault policy read eso-reader\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"issue-vault-injector-secrets-not-injected","__idx":32},"children":["Issue: Vault Injector secrets not injected"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Symptoms"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["vault-agent sidecar not present"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/vault/secrets/"]}," directory empty"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Possible causes"]},":"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Annotations not set correctly."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Vault role not configured."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Service account not authorized."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Check pod annotations\nkubectl get pod <pod-name> -n custody-core -o yaml | grep vault.hashicorp.com\n\n# Check vault-agent logs\nkubectl logs <pod-name> -n custody-core -c vault-agent\n\n# Verify Vault role\nvault read auth/kubernetes/role/eso-reader\n\n# Test authentication\nkubectl exec -it <pod-name> -n custody-core -c vault-agent -- \\\n  cat /vault/secrets/ca.pem\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"issue-aws-secrets-manager-access-denied","__idx":33},"children":["Issue: AWS Secrets Manager access denied"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Symptoms"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Vault Deployer UI shows \"Access Denied\""]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cannot retrieve secrets"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Possible causes"]},":"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["IAM role doesn't have permissions."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Secret doesn't exist."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Secret is in different region."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Solution"]},":"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Verify IAM role permissions\naws iam get-role-policy \\\n  --role-name vault-deployer-role \\\n  --policy-name SecretsManagerAccess\n\n# Verify secret exists\naws secretsmanager describe-secret \\\n  --secret-id /ripple/custody/<tenant-id>/<instance-id>/vault/<vault-id>/config\n\n# Check region\naws secretsmanager list-secrets --region us-east-1 | grep ripple\n\n# Update IAM policy if needed\naws iam put-role-policy \\\n  --role-name vault-deployer-role \\\n  --policy-name SecretsManagerAccess \\\n  --policy-document file://secrets-manager-policy.json\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"platform-specific-examples","__idx":34},"children":["Platform-specific examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"aws-cloudhsm-with-eso","__idx":35},"children":["AWS CloudHSM with ESO"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/integrate-kms/cloud-hsm/aws-cloudhsm"},"children":["AWS CloudHSM integration guide"]}," for complete example."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"thales-luna-hsm-with-eso","__idx":36},"children":["Thales Luna HSM with ESO"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/integrate-kms/on-premise-hsm/thales-luna#advanced-secret-management"},"children":["Thales Luna HSM integration guide - advanced secret management"]}," for complete example."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"blocksafe-hsm-with-eso","__idx":37},"children":["BlockSafe HSM with ESO"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/integrate-kms/on-premise-hsm/blocksafe#advanced-secret-management"},"children":["BlockSafe HSM integration guide - advanced secret management"]}," for complete example."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"mpc-with-eso","__idx":38},"children":["MPC with ESO"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/integrate-kms/mpc/overview"},"children":["MPC integration guide"]}," for complete example."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-resources","__idx":39},"children":["Related resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://external-secrets.io/"},"children":["External Secrets Operator documentation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://www.vaultproject.io/docs"},"children":["HashiCorp Vault documentation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.aws.amazon.com/secretsmanager/"},"children":["AWS Secrets Manager documentation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://kubernetes.io/docs/concepts/configuration/secret/"},"children":["Kubernetes Secrets documentation"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/custody/deployment/integrate-kms/overview"},"children":["Ripple Custody"," KMS integration guides"]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"support","__idx":40},"children":["Support"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For assistance with advanced secret management:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ESO issues"]},": ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://github.com/external-secrets/external-secrets"},"children":["External Secrets Operator GitHub"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Vault issues"]},": ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://support.hashicorp.com/"},"children":["HashiCorp Vault support"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["AWS issues"]},": ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://aws.amazon.com/support/"},"children":["AWS support"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ripple Custody"," Issues"]},": Contact your Ripple liaison"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Required information for support requests"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Secret management tool (ESO, Vault Injector, AWS Secrets Manager)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Error messages from logs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["ExternalSecret or pod annotations (sanitized)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Vault policy and role configuration (sanitized)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Kubernetes version and ESO version"]}]}]},"headings":[{"value":"Advanced secret management","id":"advanced-secret-management","depth":1},{"value":"Table of contents","id":"table-of-contents","depth":2},{"value":"Overview","id":"overview","depth":2},{"value":"What is advanced secret management?","id":"what-is-advanced-secret-management","depth":3},{"value":"Benefits","id":"benefits","depth":3},{"value":"External Secrets Operator (ESO)","id":"external-secrets-operator-eso","depth":2},{"value":"Overview","id":"overview-1","depth":3},{"value":"Prerequisites","id":"prerequisites","depth":3},{"value":"Step 1: Create SecretStore","id":"step-1-create-secretstore","depth":3},{"value":"Step 2: Create ExternalSecret","id":"step-2-create-externalsecret","depth":3},{"value":"Step 3: Reference secret in Helm values","id":"step-3-reference-secret-in-helm-values","depth":3},{"value":"Step 4: Verify secret rotation","id":"step-4-verify-secret-rotation","depth":3},{"value":"HashiCorp Vault Agent Injector","id":"hashicorp-vault-agent-injector","depth":2},{"value":"Overview","id":"overview-2","depth":3},{"value":"Prerequisites","id":"prerequisites-1","depth":3},{"value":"Step 1: Annotate pod for injection","id":"step-1-annotate-pod-for-injection","depth":3},{"value":"Step 2: Deploy and verify","id":"step-2-deploy-and-verify","depth":3},{"value":"AWS Secrets Manager","id":"aws-secrets-manager","depth":2},{"value":"Overview","id":"overview-3","depth":3},{"value":"Secrets stored","id":"secrets-stored","depth":3},{"value":"Security best practices","id":"security-best-practices","depth":3},{"value":"Accessing secrets","id":"accessing-secrets","depth":3},{"value":"Comparison: ESO vs Vault Injector vs AWS Secrets Manager","id":"comparison-eso-vs-vault-injector-vs-aws-secrets-manager","depth":2},{"value":"Recommendations","id":"recommendations","depth":3},{"value":"Security best practices","id":"security-best-practices-1","depth":2},{"value":"Principle of least privilege","id":"principle-of-least-privilege","depth":3},{"value":"Secret rotation","id":"secret-rotation","depth":3},{"value":"Audit logging","id":"audit-logging","depth":3},{"value":"Encryption at rest","id":"encryption-at-rest","depth":3},{"value":"Network security","id":"network-security","depth":3},{"value":"Troubleshooting","id":"troubleshooting","depth":2},{"value":"Issue: ESO not syncing secrets","id":"issue-eso-not-syncing-secrets","depth":3},{"value":"Issue: Vault Injector secrets not injected","id":"issue-vault-injector-secrets-not-injected","depth":3},{"value":"Issue: AWS Secrets Manager access denied","id":"issue-aws-secrets-manager-access-denied","depth":3},{"value":"Platform-specific examples","id":"platform-specific-examples","depth":2},{"value":"AWS CloudHSM with ESO","id":"aws-cloudhsm-with-eso","depth":3},{"value":"Thales Luna HSM with ESO","id":"thales-luna-hsm-with-eso","depth":3},{"value":"BlockSafe HSM with ESO","id":"blocksafe-hsm-with-eso","depth":3},{"value":"MPC with ESO","id":"mpc-with-eso","depth":3},{"value":"Related resources","id":"related-resources","depth":2},{"value":"Support","id":"support","depth":2}],"frontmatter":{"seo":{"title":"Advanced secret management"}},"lastModified":"2026-08-04T20:25:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/custody/deployment/integrate-kms/advanced-secret-management","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}