Integrate External Secrets
The External Secrets Operator (ESO) is a powerful tool for managing secrets in a Kubernetes environment. It bridges the gap between Kubernetes and external secret management systems like AWS Secrets Manager or Azure KeyVault. Here's a detailed overview of the process.
This  guide provides an overview of installing and configuring ESO, particularly with AWS Secrets Manager. Ensure that you replace placeholders like YOUR_ACCESS_KEY, YOUR_SECRET_KEY, and your-region with actual values. Additionally, the installation and configuration may vary based on the specifics of your Kubernetes environment and the external secret management system you are using【8†source】【9†source】【10†source】.
Functionality
ESO syncs secrets from external APIs into Kubernetes, ensuring secure and automated management of secrets.
Key Components
- SecretStore: A namespaced Kubernetes resource that connects to an external secret manager.
- ExternalSecret: Defines the specific data to be fetched from the external source.
- ClusterSecretStore: A global variant of SecretStore for use across multiple namespaces.
- Roles and Access Control:
- Cluster Operators: Manage the ESO and access policies.
- Application Developers: Define ExternalSecrets for their needs.
 
Prerequisites
Before you begin, make sure that you have the following items installed.
- Kubernetes cluster with ArgoCD.
- Helm for installing ESO.
- Kubectl configured for your Kubernetes cluster.
- Secrets Manager Access credentials for your secret management system of choice.
Install ESO with Helm
- 
Create an ArgoCD Application for ESO: Define an ArgoCD Application to deploy the ESO using its Helm chart. In Harness CD, go to GitOps, and create an application. Here's a sample YAML: apiVersion: argoproj.io/v1alpha1
 kind: Application
 metadata:
 name: external-secrets
 namespace: argocd
 spec:
 project: default
 source:
 repoURL: 'https://external-secrets.github.io/external-secrets/'
 chart: external-secrets
 targetRevision: <chart-version>
 destination:
 server: 'https://kubernetes.default.svc'
 namespace: external-secrets
 syncPolicy:
 automated:
 selfHeal: true
 prune: true
- 
Install ESO in the external-secretsnamespace. The installation can be done using Helm upgrade or install command:helm upgrade --namespace external-secrets --create-namespace --install --wait external-secrets external-secrets/external-secrets
- 
Verify ESO installation using the following command: kubectl -n external-secrets get all
Configure AWS Secret Manager Integration
- 
Create an IAM user in AWS and attach a policy for SecretsManagerReadWriteaccess:aws iam create-user --user-name external-secrets
 aws iam attach-user-policy --user-name external-secrets --policy-arn arn:aws:iam::aws:policy/SecretsManagerReadWrite
- 
Generate access keys for the IAM user: aws iam create-access-key --user-name external-secrets
- 
Store the access keys in a Kubernetes secret to be used by ESO: echo -n "YOUR_ACCESS_KEY" > access-key
 echo -n "YOUR_SECRET_KEY" > secret-access-key
 kubectl create secret generic awssm-secret --from-file=./access-key --from-file=./secret-access-key
- 
Define a ClusterSecretStore resource that references the Kubernetes secret: apiVersion: external-secrets.io/v1beta1
 kind: ClusterSecretStore
 metadata:
 name: global-secret-store
 spec:
 provider:
 aws:
 service: SecretsManager
 region: your-region
 auth:
 secretRef:
 accessKeyIDSecretRef:
 name: awssm-secret
 key: access-key
 namespace: default
 secretAccessKeySecretRef:
 name: awssm-secret
 key: secret-access-key
 namespace: default
- 
Apply the ClusterSecretStore resource: kubectl apply -f cluster-secret-store.yaml
- 
Define an ExternalSecret resource to fetch secrets from AWS Secrets Manager: apiVersion: external-secrets.io/v1beta1
 kind: ExternalSecret
 metadata:
 name: app-secret
 spec:
 refreshInterval: 1m
 secretStoreRef:
 name: global-secret-store
 kind: ClusterSecretStore
 target:
 name: app-secret
 creationPolicy: Owner
 dataFrom:
 - extract:
 key: app-secret
- 
Apply the ExternalSecret resource to your Kubernetes cluster: kubectl -n app apply -f app-secret.yaml
You can now use these secrets in your pods by referencing the Kubernetes Secret object that ESO creates and maintains.