Managing Secrets Securely in Kubernetes
Learn how to securely manage Secrets and ConfigMaps in Kubernetes with External Secrets Operator
SmileX
Founder & CEO
1 min read
The Problem with Default Kubernetes Secrets
By default, Kubernetes Secrets store data as base64-encoded values, which is not true encryption.
# Default secrets can be decoded easilykubectl get secret my-secret -o jsonpath='{.data.password}' | base64 -dUsing External Secrets Operator
Installation
helm repo add external-secrets https://charts.external-secrets.iohelm install external-secrets external-secrets/external-secretsConnecting to AWS Secrets Manager
apiVersion: external-secrets.io/v1beta1kind: SecretStoremetadata: name: aws-secretsmanagerspec: provider: aws: service: SecretsManager region: ap-southeast-1Creating an ExternalSecret
apiVersion: external-secrets.io/v1beta1kind: ExternalSecretmetadata: name: database-credentialsspec: refreshInterval: 1h secretStoreRef: name: aws-secretsmanager kind: SecretStore target: name: db-credentials creationPolicy: Owner data: - secretKey: username remoteRef: key: prod/database property: username - secretKey: password remoteRef: key: prod/database property: passwordBest Practices
1. Apply Strict RBAC
apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: name: secret-readerrules:- apiGroups: [""] resources: ["secrets"] resourceNames: ["specific-secret"] verbs: ["get"]2. Enable Encryption at Rest
apiVersion: apiserver.config.k8s.io/v1kind: EncryptionConfigurationresources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: <BASE64_ENCODED_SECRET> - identity: {}Conclusion
Managing secrets securely is essential to maintaining a Kubernetes cluster. Using External Secrets Operator together with a cloud provider’s secrets manager greatly enhances security.