AWS Secrets and Configuration Provider 代码示例 - AWS Secrets Manager

AWS Secrets and Configuration Provider 代码示例

ASCP 身份验证和访问控制示例

示例:允许 Amazon EKS 容器组身份服务(pods.eks.amazonaws.com)担任角色并标记会话的 IAM 策略:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }

SecretProviderClass

您可以使用 YAML 描述要使用 ASCP 在 Amazon EKS 中挂载哪些密钥。有关示例,请参阅 SecretProviderClass 用法

SecretProviderClass YAML 结构

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: name spec: provider: aws parameters: region: failoverRegion: pathTranslation: usePodIdentity: preferredAddressType: objects:

参数字段包含挂载请求的详细信息:

区域

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

如果您还指定 failoverRegion,ASCP 会尝试从两个区域检索密钥。如果任一区域返回 4xx 错误(例如身份验证问题),ASCP 都不会挂载任何一个密钥。如果成功从 region 中检索到密钥,则 ASCP 会挂载该密钥值。如果未成功从 region 中检索到密钥,但已成功从 failoverRegion 中检索到密钥,则 ASCP 会挂载该密钥值。

failoverRegion

(可选)如果您包含此字段,ASCP 会尝试从 region 中定义的区域和此字段检索密钥。如果任一区域返回 4xx 错误(例如身份验证问题),ASCP 都不会挂载任何一个密钥。如果成功从 region 中检索到密钥,则 ASCP 会挂载该密钥值。如果未成功从 region 中检索到密钥,但已成功从 failoverRegion 中检索到密钥,则 ASCP 会挂载该密钥值。有关如何使用此字段的示例,请参阅 多区域密钥失效转移

pathTranslation

(可选)如果 Amazon EKS 中的文件名包含路径分隔符则要使用的单个替换字符,例如 Linux 上的斜杠 (/)。ASCP 无法创建包含路径分隔符的挂载文件。相反,ASCP 使用不同的字符替换路径分隔符。如果不使用此字段,替换字符为下划线 (_),因此,例如 My/Path/Secret 挂载为 My_Path_Secret

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

usePodIdentity

(可选)确定身份验证方法。如果未指定,则默认为服务账户(IRSA)的 IAM 角色。

  • 要使用 EKS 容器组身份,请使用以下任意值:"true""True""TRUE""t""T"

  • 要明确使用 IRSA,请设置为以下任意值:"false""False""FALSE""f""F"

preferredAddressType

(可选)指定容器组身份代理端点通信的首选 IP 地址类型。该字段仅在使用 EKS 容器组身份功能时适用,使用服务账户的 IAM 角色时将忽略。值不区分大小写。有效值为:

  • "ipv4""IPv4""IPV4":强制使用容器组身份代理 IPv4 端点

  • "ipv6""IPv6""IPV6":强制使用容器组身份代理 IPv6 端点

  • 未指定:使用自动端点选择,首先尝试 IPv4 端点,如果 IPv4 失败则回退到 IPv6 端点

objects

包含要挂载密钥的 YAML 声明字符串。我们建议使用 YAML 多行字符串或竖线 (|) 字符。

objectName

必需。指定要获取的密钥或参数的名称。对于 Secrets Manager,这是 SecretId 参数,可以是密钥的友好名称,也可以是完整 ARN。对于 SSM Parameter Store,这是参数的 Name,可以是参数名称,也可以是完整 ARN。

objectType

如果不将 Secrets Manager ARN 用于 objectName,需要这个操作 可以是 secretsmanagerssmparameter

objectAlias

(可选)Amazon EKS 容器组(pod)中密钥的文件名。如果不指定此字段,则 objectName 作为文件名显示。

filePermission

(可选)4 位八进制字符串,指定用于挂载密钥的文件权限。如果您没有指定此字段,它将默认为 "0644"

ObjectVersion

(可选)密钥的版本 ID。不推荐,因为每次更新密钥时都必须更新版本 ID。默认情况下,使用最新版本。如果包括 failoverRegion,则此字段表示主 objectVersion

objectVersionLabel

(可选)版本的别名。原定设置是最新版本 AWSCURRENT。有关更多信息,请参阅 密钥版本。如果包括 failoverRegion,则此字段表示主 objectVersionLabel

JMESPath

(可选)密钥中的键映射到要在 Amazon EKS 中挂载的文件。要使用此字段,密钥值必须采用 JSON 格式。如果使用此字段,必须包含子字段 pathobjectAlias

path

来自密钥值 JSON 中的键-值对的键。如果该字段包含连字符,请使用单引号对其进行转义,例如:path: '"hyphenated-path"'

objectAlias

要挂载到 Amazon EKS 容器组(pod)中的文件名。如果该字段包含连字符,请使用单引号对其进行转义,例如:objectAlias: '"hyphenated-alias"'

filePermission

(可选)4 位八进制字符串,指定用于挂载密钥的文件权限。如果未指定此字段,则其默认为父对象的文件权限。

failoverObject

(可选)如果您指定此字段,ASCP 会尝试检索主 objectName 中指定的密钥和 failoverObject objectName 子字段中指定的密钥。如果任何一个返回 4xx 错误(例如身份验证问题),ASCP 都不会挂载任何一个密钥。如果成功从主 objectName 中检索到密钥,则 ASCP 会挂载该密钥值。如果未成功从主 objectName 中检索到密钥,但已成功从失效转移 objectName 中检索到密钥,则 ASCP 会挂载该密钥值。如果包含此字段,责必须包含字段 objectAlias。有关如何使用此字段的示例,请参阅 失效转移到其他密钥

当失效转移密钥不是副本时,通常使用此字段。有关如何指定副本的示例,请参阅 多区域密钥失效转移

objectName

失效转移密钥的名称或完整 ARN。如果使用 ARN,则 ARN 中的区域必须与字段 failoverRegion 匹配。

ObjectVersion

(可选)密钥的版本 ID。必须与主 objectVersion 匹配。不推荐,因为每次更新密钥时都必须更新版本 ID。默认情况下,使用最新版本。

objectVersionLabel

(可选)版本的别名。原定设置是最新版本 AWSCURRENT。有关更多信息,请参阅 密钥版本

创建基本的 SecretProviderClass 配置,以将密钥挂载到 Amazon EKS 容器组(pod)中。

Pod Identity

SecretProviderClass 在同一 Amazon EKS 集群中使用的密钥:

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets-manager spec: provider: aws parameters: objects: | - objectName: "mySecret" objectType: "secretsmanager" usePodIdentity: "true"
IRSA
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: deployment-aws-secrets spec: provider: aws parameters: objects: | - objectName: "MySecret" objectType: "secretsmanager"

SecretProviderClass 用法

借助这些示例为不同场景创建 SecretProviderClass 配置。

示例:按名称或 ARN 挂载密钥

此示例说明了如何挂载三种不同类型的密钥:

  • 由完整 ARN 指定的密钥

  • 由名称指定的密钥

  • 密钥的特定版本

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MySecret2-d4e5f6" - objectName: "MySecret3" objectType: "secretsmanager" - objectName: "MySecret4" objectType: "secretsmanager" objectVersionLabel: "AWSCURRENT"

示例:从密钥挂载键-值对

此示例说明了如何从 JSON 格式的密钥挂载特定的键-值对:

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MySecret-a1b2c3" jmesPath: - path: username objectAlias: dbusername - path: password objectAlias: dbpassword

示例:按文件权限挂载密钥

此示例说明了如何使用特定文件权限挂载密钥

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: objects: | - objectName: "mySecret" objectType: "secretsmanager" filePermission: "0600" jmesPath: - path: username objectAlias: dbusername filePermission: "0400"

示例:失效转移配置示例

此示例说明了如何为密钥配置失效转移。

多区域密钥失效转移

此示例说明了如何为跨多个区域复制的密钥配置自动失效转移:

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "MySecret"
失效转移到其他密钥

此示例说明了如何将失效转移配置为其他密钥(并非副本):

apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: aws-secrets spec: provider: aws parameters: region: us-east-1 failoverRegion: us-east-2 objects: | - objectName: "arn:aws:secretsmanager:us-east-1:777788889999:secret:MySecret-a1b2c3" objectAlias: "MyMountedSecret" failoverObject: - objectName: "arn:aws:secretsmanager:us-east-2:777788889999:secret:MyFailoverSecret-d4e5f6"

其他资源

有关将 ASCP 与 Amazon EKS 结合使用的更多信息,请参阅以下资源: