

 **帮助改进此页面** 

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

# 了解 EKS 容器组身份的工作原理
<a name="pod-id-how-it-works"></a>

Amazon EKS 容器组身份关联提供管理应用程序凭证的功能，类似于 Amazon EC2 实例配置文件为 Amazon EC2 实例提供凭证的方式。

Amazon EKS 容器组身份通过额外的 *EKS Auth* API，以及在每个节点上运行的代理容器组为您的工作负载提供凭证。

在您的插件中，例如，*Amazon EKS 插件*和自我管理控制器、运算符和其他插件，创建者需要更新软件才能使用最新的 AWS SDK。有关 EKS 容器组身份与 Amazon EKS 插件之间的兼容性列表，请参阅上一节 [EKS 容器组身份限制](pod-identities.md#pod-id-restrictions)。

## 在代码中使用 EKS 容器组身份
<a name="pod-id-credentials"></a>

在您的代码中，您可以使用 AWS SDK 访问 AWS 服务。您可以编写代码，为使用 SDK 的 AWS 服务创建客户端，默认情况下，SDK 会在一系列位置中搜索要使用的 AWS Identity and Access Management 凭证。找到有效凭证后，搜索停止。有关使用的默认位置的更多信息，请参阅《AWS SDK 和工具参考指南》中的[凭证提供程序链](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)。

EKS 容器组身份已添加到*容器凭证提供程序*，可在默认凭证链的一个步骤中搜索。如果您的工作负载当前使用凭证链中较早的证书，则即使您为同一工作负载配置了 EKS 容器组身份关联，这些凭证也将继续使用。这样，在删除旧凭证之前，您可以先创建关联，从而安全地从其他类型的凭证迁移。

容器凭证提供程序从每个节点上运行的代理处提供临时凭证。在 Amazon EKS 中，代理是 Amazon EKS 容器组身份，而在 Amazon Elastic Container Service 中，代理则是 `amazon-ecs-agent`。SDK 使用环境变量来定位要连接的代理。

相比之下，*服务账户的 IAM 角色*提供了一个 *Web 身份*令牌，AWS SDK 必须使用 `AssumeRoleWithWebIdentity` 与 AWS Security Token Service 进行交换。

## EKS 容器组身份代理如何使用容器组（pod）
<a name="pod-id-agent-pod"></a>

1. 当 Amazon EKS 启动一个新的容器组（pod），而该容器组使用与 EKS 容器组身份关联的服务账户时，集群将添加以下内容到容器组清单中：

   ```
       env:
       - name: AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE
         value: "/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token"
       - name: AWS_CONTAINER_CREDENTIALS_FULL_URI
         value: "http://169.254.170.23/v1/credentials"
       volumeMounts:
       - mountPath: "/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/"
         name: eks-pod-identity-token
     volumes:
     - name: eks-pod-identity-token
       projected:
         defaultMode: 420
         sources:
         - serviceAccountToken:
             audience: pods.eks.amazonaws.com
             expirationSeconds: 86400 # 24 hours
             path: eks-pod-identity-token
   ```

1. Kubernetes 选择要在哪个节点上运行容器组（pod）。然后，节点上的 Amazon EKS 容器组身份代理使用 [AssumeRoleForPodIdentity](https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html) 操作从 EKS Auth API 检索临时凭证。

1. EKS 容器组身份代理可为在容器中运行的 AWS SDK 提供这些凭证。

1. 在应用程序中使用 SDK 时，无需指定凭证提供程序使用默认凭证链。或者，您可以指定容器凭证提供程序。有关使用的默认位置的更多信息，请参阅《AWS SDK 和工具参考指南》中的[凭证提供程序链](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)。

1. SDK 使用环境变量连接到 EKS 容器组身份代理并检索凭证。
**注意**  
如果您的工作负载当前使用凭证链中较早的证书，则即使您为同一工作负载配置了 EKS 容器组身份关联，这些凭证也将继续使用。