作为最佳实践,我想避免在 Git 中保密,并将其存储在 AWS SSM 中。
有什么方法可以从 AWS System Manager 获取价值并用于创建 Kubernetes Secret?
作为最佳实践,我想避免在 Git 中保密,并将其存储在 AWS SSM 中。
有什么方法可以从 AWS System Manager 获取价值并用于创建 Kubernetes Secret?
当然,12factors 需要将配置外部化到代码库之外。
对于您的问题,尝试集成 AWS SSM(AWS Secret Manager)以用作 Secrets 的单一事实来源。
您只需要部署控制器:
helm repo add secret-inject https://aws-samples.github.io/aws-secret-sidecar-injector/
helm repo update
helm install secret-inject secret-inject/secret-inject
然后使用 2 个注释来注释您的部署模板:
template:
metadata:
annotations:
secrets.k8s.aws/sidecarInjectorWebhook: enabled
secrets.k8s.aws/secret-arn: arn:aws:secretsmanager:us-east-1:123456789012:secret:database-password-hlRvvF
其他步骤在此处说明。
但我认为我强调了阐明方法的最重要步骤。
您可以使用GoDaddy 外部机密。安装它,创建一个控制器,控制器将在特定时间间隔内同步 AWS 机密。在 AWS SSM 中创建密钥并安装 GoDaddy 外部密钥后,您必须创建ExternalSecret
如下类型:
apiVersion: 'kubernetes-client.io/v1'
kind: ExtrenalSecret
metadata:
name: cats-and-dogs
secretDescriptor:
backendType: secretsManager
data:
- key: cats-and-dogs/mysql-password
name: password`
这将为您创建一个 Kubernetes 机密。该秘密可以作为环境变量或通过卷安装公开给您的服务。
我设法通过使用以下脚本从 AWS 参数存储中获取值来创建密钥。
cat <<EOF | ./kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kiali
namespace: istio-system
type: Opaque
data:
passphrase: $(echo -n "`aws ssm get-parameter --name /dev/${env_name}/kubernetes/kiali_password --with-decrypt --region=eu-west-2 --output text --query Parameter.Value`" | base64 -w0)
username: $(echo -n "admin" | base64 -w0)
EOF