

 **帮助改进此页面** 

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

# 防止在 Amazon EKS 中出现跨服务混淆代理
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理问题是一个安全问题，即没有执行操作权限的实体可能会迫使更具权限的实体执行该操作。在 AWS 中，跨服务模拟可能会导致混淆代理问题。一个服务（*呼叫服务*）调用另一项服务（*所谓的服务*）时，可能会发生跨服务模拟。可以操纵调用服务以使用其权限对另一个客户的资源进行操作，否则该服务不应有访问权限。为防止这种情况，AWS 提供可帮助您保护所有服务的数据的工具，而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全局条件上下文键，以限制 Amazon Elastic Kubernetes Service（Amazon EKS）为其他服务提供的资源访问权限。

 `aws:SourceArn`   
使用 `aws:SourceArn` 来仅将一个资源与跨服务访问相关联。

 `aws:SourceAccount`   
使用 `aws:SourceAccount` 来让该账户中的任何资源与跨服务使用相关联。

防范混淆代理问题最有效的方法是使用 `aws:SourceArn` 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN，或者正在指定多个资源，请针对 ARN 未知部分使用带有通配符字符（\$1）的 `aws:SourceArn` 全局上下文条件键。例如 ` arn:aws:<servicename>:*:<123456789012>:*`。

如果 `aws:SourceArn` 值不包含账户 ID，例如 Amazon S3 桶 ARN，您必须使用 `aws:SourceAccount` 和 `aws:SourceArn` 来限制权限。

## 防止 Amazon EKS 集群角色出现跨服务混淆代理
<a name="cross-service-confused-deputy-cluster-role"></a>

每个集群都需要一个 Amazon EKS 集群 IAM 角色。由 Amazon EKS 管理的 Kubernetes 集群会使用此角色来管理节点，而[传统云提供商](https://kubernetes-sigs.github.io/aws-load-balancer-controller/latest/guide/service/annotations/#legacy-cloud-provider)会使用此角色为服务创建带有 Elastic Load Balancing 的负载均衡器。这些集群操作只能影响同一账户，因此建议您将每个集群角色限制为该集群和账户。这是 AWS 建议的具体应用，即在您的账户中遵循*最低权限原则*。

 **资源 ARN 格式** 

`aws:SourceArn` 的值必须是 EKS 集群的 ARN，格式为 ` arn:aws:eks:region:account:cluster/cluster-name `。例如，` arn:aws:eks:us-west-2:123456789012:cluster/my-cluster`。

 **EKS 集群角色的信任策略格式** 

以下示例演示如何使用 Amazon EKS 中的 `aws:SourceArn` 和 `aws:SourceAccount` 全局条件上下文键来防止混淆代理问题。

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-cluster"
          },
        "StringEquals": {
            "aws:SourceAccount": "123456789012"
        }
      }
    }
  ]
}
```