帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
基于标签授予容器组(pod)对 AWS 资源的访问权限
基于属性的访问权限控制(ABAC)通过将各种属性组合在一起的策略向用户授予权限。EKS 容器组身份将标签附加到每个容器组(pod)的临时凭证上,其中包含集群名称、命名空间、服务账户名称等属性。这些角色会话标签允许管理员根据匹配的标签访问 AWS 资源,从而使管理员能够创建可跨服务账户使用的单一角色。通过添加对角色会话标签的支持,您可以在集群之间和集群内的工作负载之间实施更严格的安全边界,同时重复使用相同的 IAM 角色和 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 容器组身份会在代入角色时添加一组预定义的会话标签。这些会话标签允许管理员根据匹配的标签访问 AWS 资源,从而使管理员能够创建可跨资源使用的单一角色。
启用会话标签
会话标签将通过 EKS 容器组身份自动启用,您无需执行任何操作。默认情况下,EKS 容器组身份会将一组预定义标签附加到会话。要在策略中引用这些标签,请使用语法 ${aws:PrincipalTag/
,后跟标签键。例如 ${aws:PrincipalTag/kubernetes-namespace}
。
-
eks-cluster-arn
-
eks-cluster-name
-
kubernetes-namespace
-
kubernetes-service-account
-
kubernetes-pod-name
-
kubernetes-pod-uid
禁用会话标签
AWS 会将内联会话策略、托管策略 ARN 和会话标签压缩为具有单独限制的打包二进制格式。如果您收到 PackedPolicyTooLarge
错误消息,表明打包二进制格式超出了大小限制,则可通过禁用由 EKS 容器组身份添加的会话标签来减小大小。要禁用这些会话标签,请执行以下步骤:
-
打开 Amazon EKS 控制台
。 -
在左侧导航窗格中,选择集群,然后选择要修改的集群名称。
-
选择访问选项卡。
-
在容器组身份关联中,在关联 ID 中选择要修改的关联 ID,然后选择编辑。
-
在会话标签下,选择禁用会话标签。
-
选择保存更改。
跨账户标签
EKS 容器组身份添加的所有会话标签都是可传递的;将标签键和值传递到任何 AssumeRole
操作,以便您的工作负载用于将角色切换到其他账户。您可以在其他账户的策略中使用这些标签,来限制跨账户场景中的访问。有关更多信息,请参阅《IAM 用户指南》中的使用会话标签链接角色。
自定义标签
EKS 容器组身份无法在其执行的 AssumeRole
操作中添加其它自定义标签。但是,应用于 IAM 角色的标签始终可通过相同格式引用:${aws:PrincipalTag/
后跟键,例如 ${aws:PrincipalTag/MyCustomTag}
。
注意
如果发生冲突,通过 sts:AssumeRole
请求添加到会话中的标签优先。例如,假设:
-
EKS 代入客户角色时,Amazon EKS 向会话添加键
eks-cluster-name
和值my-cluster
-
您向 IAM 角色添加了一个值为
my-own-cluster
的eks-cluster-name
标签。
在这种情况下,前者优先,eks-cluster-name
标签的值为 my-cluster
。