教程:在 Amazon EKS 容器中创建和挂载 Amazon Secrets Manager 密钥 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:在 Amazon EKS 容器中创建和挂载 Amazon Secrets Manager 密钥

在本教程中,您将在 Secrets Manager 中创建一个示例密钥,然后在 Amazon EKS 容器中挂载密钥并进行部署。

在开始之前,请安装 ASCP:安装 ASCP

创建和挂载密钥
  1. 将集群的 Amazon Web Services 区域 和名称设置为 shell 变量,以便您可以在 bash 命令中使用它们。对于<REGION>,请输入您的 Amazon EKS 集群的运行 Amazon Web Services 区域 位置。适用于 <CLUSTERNAME> 中,输入您的集群名称。

    REGION=<REGION> CLUSTERNAME=<CLUSTERNAME>
  2. 创建测试密钥。有关更多信息,请参阅用 Amazon Secrets Manager 创建和管理密钥

    aws --region "$REGION" secretsmanager create-secret --name MySecret --secret-string '{"username":"lijuan", "password":"hunter2"}'
  3. 创建容器资源策略,限制上一步中创建的密钥访问权限。适用于 <SECRETARN>,请使用密钥的 ARN。将策略 ARN 保存在 shell 变量中。

    POLICY_ARN=$(aws --region "$REGION" --query Policy.Arn --output text iam create-policy --policy-name nginx-deployment-policy --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret"], "Resource": ["<SECRETARN>"] } ] }')
  4. 如果还没有,请创建集群的 IAM OIDC 提供程序。有关更多信息,请参阅为您的集群创建 IAM OIDC 提供程序

    eksctl utils associate-iam-oidc-provider --region="$REGION" --cluster="$CLUSTERNAME" --approve # Only run this once
  5. 创建容器使用的服务帐户,并将在步骤 3 中创建的资源策略与该服务帐户相关联。在本教程中,对于服务帐号名称,请使用nginx-deployment-sa。有关更多信息,请参阅为服务账户创建 IAM 角色

    eksctl create iamserviceaccount --name nginx-deployment-sa --region="$REGION" --cluster "$CLUSTERNAME" --attach-policy-arn "$POLICY_ARN" --approve --override-existing-serviceaccounts
  6. 创建 SecretProviderClass 指定要在容器中挂载哪个密钥。以下命令使用ExampleSecretProviderClass.yamlASCP GitHub 存储库示例目录中挂载您在步骤 2 中创建的密钥。有关创建您自己的 SecretProviderClass 信息,请参阅 SecretProviderClass

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass.yaml
  7. 部署您的容器 以下命令使用ExampleDeployment.yamlASCP GitHub 存储库示例目录中将密钥挂载到 pod /mnt/secrets-store 中。

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment.yaml
  8. 要验证是否已正确挂载密钥,请使用以下命令并确认是否显示密钥值。

    kubectl exec -it $(kubectl get pods | awk '/nginx-deployment/{print $1}' | head -1) cat /mnt/secrets-store/MySecret; echo

    显示密钥值。

    {"username":"lijuan", "password":"hunter2"}