AWS Secrets and Configuration Provider 代码示例
ASCP 身份验证和访问控制示例
示例:允许 Amazon EKS 容器组身份服务(pods.eks.amazonaws.com)担任角色并标记会话的 IAM 策略:
SecretProviderClass
您可以使用 YAML 描述要使用 ASCP 在 Amazon EKS 中挂载哪些密钥。有关示例,请参阅 SecretProviderClass 用法。
SecretProviderClass YAML 结构
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:namespec: 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,需要这个操作 可以是secretsmanager或ssmparameter。 - objectAlias
-
(可选)Amazon EKS 容器组(pod)中密钥的文件名。如果不指定此字段,则
objectName作为文件名显示。 - filePermission
-
(可选)4 位八进制字符串,指定用于挂载密钥的文件权限。如果您没有指定此字段,它将默认为
"0644"。 - ObjectVersion
-
(可选)密钥的版本 ID。不推荐,因为每次更新密钥时都必须更新版本 ID。默认情况下,使用最新版本。如果包括
failoverRegion,则此字段表示主objectVersion。 - objectVersionLabel
-
(可选)版本的别名。原定设置是最新版本 AWSCURRENT。有关更多信息,请参阅 密钥版本。如果包括
failoverRegion,则此字段表示主objectVersionLabel。 - JMESPath
-
(可选)密钥中的键映射到要在 Amazon EKS 中挂载的文件。要使用此字段,密钥值必须采用 JSON 格式。如果使用此字段,必须包含子字段
path和objectAlias。- path
-
来自密钥值 JSON 中的键-值对的键。如果该字段包含连字符,请使用单引号对其进行转义,例如:
path: '"hyphenated-path"' - objectAlias
-
要挂载到 Amazon EKS 容器组(pod)中的文件名。如果该字段包含连字符,请使用单引号对其进行转义,例如:
objectAlias: '"hyphenated-alias"' - filePermission
-
(可选)4 位八进制字符串,指定用于挂载密钥的文件权限。如果未指定此字段,则其默认为父对象的文件权限。
- failoverObject
-
(可选)如果您指定此字段,ASCP 会尝试检索主
objectName中指定的密钥和failoverObjectobjectName子字段中指定的密钥。如果任何一个返回 4xx 错误(例如身份验证问题),ASCP 都不会挂载任何一个密钥。如果成功从主objectName中检索到密钥,则 ASCP 会挂载该密钥值。如果未成功从主objectName中检索到密钥,但已成功从失效转移objectName中检索到密钥,则 ASCP 会挂载该密钥值。如果包含此字段,责必须包含字段objectAlias。有关如何使用此字段的示例,请参阅 失效转移到其他密钥。当失效转移密钥不是副本时,通常使用此字段。有关如何指定副本的示例,请参阅 多区域密钥失效转移。
- objectName
-
失效转移密钥的名称或完整 ARN。如果使用 ARN,则 ARN 中的区域必须与字段
failoverRegion匹配。 - ObjectVersion
-
(可选)密钥的版本 ID。必须与主
objectVersion匹配。不推荐,因为每次更新密钥时都必须更新版本 ID。默认情况下,使用最新版本。 - objectVersionLabel
-
(可选)版本的别名。原定设置是最新版本 AWSCURRENT。有关更多信息,请参阅 密钥版本。
创建基本的 SecretProviderClass 配置,以将密钥挂载到 Amazon EKS 容器组(pod)中。
SecretProviderClass 用法
借助这些示例为不同场景创建 SecretProviderClass 配置。
示例:按名称或 ARN 挂载密钥
此示例说明了如何挂载三种不同类型的密钥:
-
由完整 ARN 指定的密钥
-
由名称指定的密钥
-
密钥的特定版本
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name:aws-secretsspec: 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-secretsspec: 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-secretsspec: 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-secretsspec: 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 结合使用的更多信息,请参阅以下资源: