3

作为最佳实践,我想避免在 Git 中保密,并将其存储在 AWS SSM 中。

有什么方法可以从 AWS System Manager 获取价值并用于创建 Kubernetes Secret?

4

3 回答 3

3

当然,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

其他步骤在此处说明。

但我认为我强调了阐明方法的最重要步骤。

于 2020-07-11T17:21:56.743 回答
2

您可以使用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 机密。该秘密可以作为环境变量或通过卷安装公开给您的服务。

于 2020-07-13T14:05:16.407 回答
2

我设法通过使用以下脚本从 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
于 2020-07-15T13:30:20.707 回答