本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon EKS 中使用带有 Pod 身份的 Amazon 密钥和配置提供商 CSI
Amazon 机密和配置提供程序与适用于 Amazon Elastic Kubernetes Service 的 Pod 身份代理集成,为在 Amazon EKS 上运行的应用程序提供了增强的安全性、简化的配置和更高的性能。Pod Identity 在从 Secrets Manager 检索密钥或从 Parameter Stor Amazon Systems Manager e 检索参数时简化了 Amazon EKS 的
Amazon EKS 容器组身份通过直接在 Amazon EKS 接口设置权限,减少了操作步骤,且无需在 Amazon EKS 和 IAM 服务之间切换,从而简化了为 Kubernetes 应用程序配置 IAM 权限的过程。容器组身份允许在多个集群中共用一个 IAM 角色而无需更新信任策略,并支持角色会话标签以实现更精细的访问控制。这种方法不仅允许跨角色重复使用权限策略,简化了策略管理,而且还允许根据匹配的标签访问 Amazon 资源,增强了安全性。
工作方式
-
容器组身份会为容器组(pod)分配 IAM 角色。
-
ASCP 使用此角色进行身份验证。 Amazon Web Services 服务
-
如果获得授权,ASCP 会检索所请求的密钥并将其提供给 Pod。
有关更多信息,请参阅《Amazon EKS 用户指南》中的了解 Amazon EKS 容器组身份的工作原理。
先决条件
重要
仅云中的 Amazon EKS 支持容器组身份。Amazon EK S Anywhere 或亚马逊
-
Amazon EKS 集群(版本 1.24 或更高版本)
-
通过以下方式访问 Amazon CLI 和 Amazon EKS 集群
kubectl
-
访问两个 Amazon Web Services 账户 (用于跨账户存取)
安装 Amazon EKS 容器组身份代理
要将容器组身份与集群结合使用,必须安装 Amazon EKS 容器组身份代理附加组件。
安装容器组身份代理
-
在集群上安装 Pod Identy Agent 附加组件:
eksctl create addon \ --name eks-pod-identity-agent \ --cluster
clusterName
\ --regionregion
通过容器组身份设置 ASCP
-
创建一个权限策略,授予对容器组(pod)需要访问的密钥的 Pod(pod)需要访问的密钥
secretsmanager:GetSecretValue
和secretsmanager:DescribeSecret
权限。有关策略示例,请参阅 示例:读取和描述个人密钥的权限。 -
创建可由容器组身份的 Amazon EKS 服务主体担任的 IAM 角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
向角色附加 IAM policy:
aws iam attach-role-policy \ --role-name
MY_ROLE
\ --policy-arnPOLICY_ARN
-
创建容器组身份关联。有关示例,请参阅《Amazon EKS 用户指南》中的创建容器组身份关联
-
创建指定
SecretProviderClass
要在 Pod 中挂载哪些密钥的:kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleSecretProviderClass-PodIdentity.yaml
IRSA 和 Pod Identity SecretProviderClass 之间的主要区别在于可选参数
usePodIdentity
。这是一个可选字段,用于确定身份验证方法。如果未指定,则默认对服务账户(IRSA)使用 IAM 角色。-
要使用 EKS 容器组身份,请使用以下任意值:
"true", "True", "TRUE", "t", "T"
。 -
要明确使用 IRSA,请将其设置为以下任意值:
"false", "False", "FALSE", "f", or "F"
。
-
-
将装载机密的 Pod 部署到以下
/mnt/secrets-store
位置:kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/examples/ExampleDeployment-PodIdentity.yaml
-
如果您使用私有 Amazon EKS 集群,请确保该集群所在的 VPC 具有 Amazon STS 端点。有关创建端点的信息,请参阅《Amazon Identity and Access Management 用户指南》中的接口 VPC 端点。
验证密钥的挂载情况
要验证密钥是否已正确安装,请运行以下命令:
kubectl exec -it $(kubectl get pods | awk '/
pod-identity-deployment
/{print $1}' | head -1) -- cat /mnt/secrets-store/MySecret
设置 Amazon EKS 容器组身份以访问 Secrets Manager 中的密钥
-
创建一个权限策略,授予对容器组(pod)需要访问的密钥的 Pod(pod)需要访问的密钥
secretsmanager:GetSecretValue
和secretsmanager:DescribeSecret
权限。有关策略示例,请参阅 示例:读取和描述个人密钥的权限。 -
如果您还没有密钥,请在 Secrets Manager 中创建一个密钥。
故障排除
您可以通过描述容器组(pod)部署来查看大多数错误。
查看容器的错误消息
-
使用以下命令获取容器组(pod)名称列表。如果您没有使用默认命名空间,请使用
-n
。NAMESPACE
kubectl get pods
-
要描述 Pod,请在以下命令中为
PODID
使用在上一步中找到的 Pod 的 Pod 的 Pod ID。如果没有使用默认命名空间,请使用-n
。NAMESPACE
kubectl describe pod/
PODID
查看 ASCP 的错误
-
要在提供程序日志中查找更多信息,请在以下命令中为
PODID
使用 csi-secrets-store-provider- aws 容器组 ID。kubectl -n kube-system get pods kubectl -n kube-system logs pod/
PODID