

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 基于标签授予容器组（pod）对 AWS 资源的访问权限
<a name="pod-id-abac"></a>

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

## 带标签的示例策略
<a name="_sample_policy_with_tags"></a>

以下是一个 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}"
                }
            }
        }
    ]
}
```

## 启用或禁用会话标签
<a name="pod-id-abac-tags"></a>

EKS 容器组身份会在代入角色时添加一组预定义的会话标签。这些会话标签允许管理员根据匹配的标签访问 AWS 资源，从而使管理员能够创建可跨资源使用的单一角色。

### 启用会话标签
<a name="_enable_session_tags"></a>

会话标签将通过 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` 

### 禁用会话标签
<a name="_disable_session_tags"></a>

 AWS 会将内联会话策略、托管策略 ARN 和会话标签压缩为具有单独限制的打包二进制格式。如果您收到 `PackedPolicyTooLarge` 错误消息，表明打包二进制格式超出了大小限制，则可通过禁用由 EKS 容器组身份添加的会话标签来减小大小。要禁用这些会话标签，请执行以下步骤：

1. 打开 [Amazon EKS 控制台](https://console.aws.amazon.com/eks/home#/clusters)。

1. 在左侧导航窗格中，选择**集群**，然后选择要修改的集群名称。

1. 选择**访问**选项卡。

1. 在**容器组身份关联**中，在**关联 ID** 中选择要修改的关联 ID，然后选择**编辑**。

1. 在**会话标签**下，选择**禁用会话标签**。

1. 选择**保存更改**。

## 跨账户标签
<a name="pod-id-abac-chaining"></a>

EKS 容器组身份添加的所有会话标签都是*可传递*的；将标签键和值传递到任何 `AssumeRole` 操作，以便您的工作负载用于将角色切换到其他账户。您可以在其他账户的策略中使用这些标签，来限制跨账户场景中的访问。有关更多信息，请参阅《IAM 用户指南》**中的[使用会话标签链接角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_role-chaining)。

## 自定义标签
<a name="pod-id-abac-custom-tags"></a>

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`。