在 Amazon Elastic Kubernetes Service 中使用密钥 Secrets Manager 密钥 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

在 Amazon Elastic Kubernetes Service 中使用密钥 Secrets Manager 密钥

若要将 Secrets Manager 中的密码和参数存储中的参数显示为挂载在Amazon EKS窗格中,您可以使用Amazon密码和配置提供程序 (ASCP)库贝内特斯秘密商店 CSI 驱动程序. ASCP 与 Amazon Elastic Kubernetes Service (Amazon EKS) 1.17+ 配合使用。

使用 ASCP,您可以在 Secrets Manager 中存储和管理您的秘密,然后通过 Amazon EKS 上运行的工作负载检索它们。您可以使用 IAM 角色和策略限制对集群中特定 Kubernetes 窗格的访问权限。ASCP 检索容器标识并交换 IAM 角色的身份。ASCP 担任容器的 IAM 角色,然后它可以从授权该角色的 Secrets Manager 中检索密码。

如果您对密码使用 Secrets Manager 自动旋转,还可以使用秘密存储 CSI 驱动程序轮换协调程序功能,以确保您正在从 Secrets Manager 中检索最新的密码。有关更多信息,请参阅 。自动旋转已安装的内容和同步的库贝内特秘密.

有关如何使用 ASCP 的教程,请参阅教程:在 Kubernetes 窗格中创建并装载秘密.

安装 ASCP

ASCP 在 GitHub 上提供。秘密存储-CSI-提供商-AWS存储库。回购还包含用于创建和装载密钥的示例 YAML 文件。首先安装 Kubernetes 秘密存储 CSI 驱动程序,然后安装 ASCP。

安装 ASCP 的步骤

  1. 若要安装密钥存储库 CSI 驱动程序,请运行以下命令。有关完整安装说明,请参阅安装在秘密商店 CSI 驱动程序手册中。

    helm repo add secrets-store-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/master/charts helm install -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  2. 要安装 ASCP,请使用 GitHub 回购部署目录中的 YAML 文件。

    kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml

第 1 步:设置访问控制

要授予 Kubernes 窗格访问密钥管理器中的密文,首先创建一个策略,以限制对容器需要访问的密文的访问。若要访问密码管理器中的密码,策略必须包含secretsmanager:GetSecretValuesecretsmanager:DescribeSecret权限。要访问参数存储中的参数,策略必须包含ssm:GetParameters. 然后您创建一个服务账户的 IAM 角色并将策略附加到该策略。

ASCP 检索容器标识并将其交换为 IAM 角色。ASCP 担任容器的 IAM 角色,这使其能够访问您授权的密钥。除非您还将其与 IAM 角色关联,否则其他容器无法访问密钥。

有关创建策略的信息,请参阅基于身份的策略.

有关如何使用 ASCP 的教程,请参阅教程:在 Kubernetes 窗格中创建并装载秘密.

第 2 步:在亚马逊 EKS 中挂载秘密

要在 Amazon EKS 中显示机密,就像它们是文件系统上的文件一样,您可以创建SecretProviderClassYAML 文件,其中包含有关您的秘密以及如何在 Kubernetes 窗格中显示它们的信息。

这些区域有:SecretProviderClass必须与它引用的 Kubernetes 窗格位于相同的名称空间中。

有关如何使用 ASCP 的教程,请参阅教程:在 Kubernetes 窗格中创建并装载秘密.

SecretProviderClass

这些区域有:SecretProviderClassYAML 具有以下格式:

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: <NAME> spec: provider: aws parameters:
参数

包含挂载请求的详细信息。

objects

一个字符串,其中包含要挂载的密钥的 YAML 声明。我们建议使用 YAML 多行字符串或管道 (|) 字符,如Example.

objectName

要检索的密钥或参数的名称。这将成为 Kubernetes 窗格中密钥的文件名,除非您指定objectAlias.

  • 对于密钥管理器,密钥的友好名称或完整 ARN。如果使用 ARN,可以省略objectType.

  • 对于参数存储,Name,而不是完整的 ARN。

objectType

如果不将 Secrets Manager ARN 用于objectName. 可以是 secretsmanagerssmparameter

目标

(可选)“库贝内特” 窗格中密钥的文件名。如果不指定此字段,则会使用objectName作为文件名显示。

对象版本

(可选)密钥的版本 ID 或参数的版本号。我们建议您不要使用此字段,因为每次更新密码时都必须更新该字段。默认情况下,使用最新版本。对于参数存储参数,可以使用objectVersion或者objectVersionLabel但不能同时兼顾两者.

对象版本标签

(可选)版本的别名。默认值为最新版本的 AWSCREVER。有关更多信息,请参阅暂存标签。对于参数存储参数,可以使用objectVersion或者objectVersionLabel但不能同时兼顾两者.

区域

(可选) Amazon Web Services 区域 的密钥或参数。如果不使用此字段,ASCP 将从节点上的注释中查找 “区域”。此查找会增加装载请求的开销,因此我们建议您为使用大量容器的群集提供区域。

路径翻译

(可选)如果文件名(objectName或者objectAlias)包含路径分隔符,例如 Linux 上的斜杠 (/)。如果密钥名称或参数名称包含路径分隔符,则 ASCP 将无法使用该名称创建挂载的文件。相反,您可以通过在此字段中输入路径分隔符来替换路径分隔符字符。如果您不使用此字段,则默认值为下划线 (_),因此,例如My/Path/Secret挂载为挂载My_Path_Secret.

要防止字符替换,请输入字符串False.

Example

以下示例配置显示了一个SecretProviderClass提供四种资源:

  1. 由完整 ARN 指定的密码。

  2. 由友好名称指定的密码。

  3. 密钥的特定版本的。

  4. Parameter Store 参数。

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-1:[111122223333]:secret:MySecret-00AABB" - objectName: "MySecret2" objectType: "secretsmanager" - objectName: "MySecret3" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT" - objectName: "MyConfigValue" objectType: "ssmparameter"