基于标签向 pods 授予对 AWS 资源的访问权限 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

基于标签向 pods 授予对 AWS 资源的访问权限

EKS 容器组身份将标签附加到每个容器组的临时凭证上,其中包含集群名称、命名空间、服务账户名称等属性。这些角色会话标签允许管理员根据匹配的标签访问 AWS 资源,从而使管理员能够创建可跨服务账户使用的单一角色。通过添加对角色会话标签的支持,客户可以在集群之间和集群内的工作负载之间实施更严格的安全边界,同时重复使用相同的 IAM 角色和 IAM 策略。

例如,如果对象标记具有 EKS 集群的名称,则以下策略允许执行 s3:GetObject 操作。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectTagging" ], "Resource": "*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/eks-cluster-name": "${aws:PrincipalTag/eks-cluster-name}" } } } ] }

EKS 容器组身份添加的会话标签列表

以下列表包含添加到 AssumeRole 请求(由 Amazon EKS 发出)的所有标签键。要在策略中使用这些标签,请使用 ${aws:PrincipalTag/ 后跟键,例如 ${aws:PrincipalTag/kubernetes-namespace}

  • eks-cluster-arn

  • eks-cluster-name

  • kubernetes-namespace

  • kubernetes-service-account

  • kubernetes-pod-name

  • kubernetes-pod-uid

跨账户标签

EKS 容器组身份添加的所有会话标签都是可传递的;将标签键和值传递到任何 AssumeRole 操作,以便您的工作负载用于将角色切换到其他账户。您可以在其他账户的策略中使用这些标签,来限制跨账户场景中的访问。有关更多信息,请参阅《IAM 用户指南》中的使用会话标签链接角色

自定义标签

EKS 容器组身份无法在其执行的 AssumeRole 操作中添加其他自定义标签。但是,您应用于 IAM 角色的标签始终可用,且格式相同:${aws:PrincipalTag/ 后跟键,例如 ${aws:PrincipalTag/MyCustomTag}

注意

如果发生冲突,通过 sts:AssumeRole 请求添加到会话中的标签优先。例如,假设:

  • EKS 代入客户角色时,Amazon EKS 向会话添加键 eks-cluster-name 和值 my-cluster

  • 您向 IAM 角色添加了一个值为 my-own-clustereks-cluster-name 标签。

在这种情况下,前者优先,eks-cluster-name 标签的值为 my-cluster