

 **帮助改进此页面** 

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

# 配置容器组（pod）使用服务账户访问 AWS 服务
<a name="pod-id-configure-pods"></a>

如果容器组（pod）需要访问 AWS 服务，则必须配置它来使用 Kubernetes 服务账户。服务账户必须关联到有权访问 AWS 服务的 AWS Identity and Access Management（IAM）角色。
+ 现有集群。如果还没有，可以使用[开始使用 Amazon EKS](getting-started.md) 中的指南之一创建一个。
+ 现有 Kubernetes 服务账户和 EKS 容器组身份关联（将服务账户与 IAM 角色关联）。该角色必须具有关联的 IAM 策略，其中包含您希望容器组（pod）必须具有的权限，以便使用 AWS 服务。有关如何创建和配置服务账户和角色的更多信息，请参阅 [向 Kubernetes 服务账户分配 IAM 角色](pod-id-association.md)。
+ 在您的设备或 AWS CLI 上安装和配置的最新版本 AWS CloudShell。您可以使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1` 检查您的当前版本。`yum`、`apt-get` 或适用于 macOS 的 Homebrew 等软件包管理器通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本，请参阅《AWS 命令行界面用户指南》中的[安装](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)和[使用 aws configure 快速配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新，请参阅《AWS CloudShell 用户指南》中的[将 AWS CLI 安装到您的主目录](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。
+ 您的设备或 AWS CloudShell 上安装了 `kubectl` 命令行工具。该版本可以与集群的 Kubernetes 版本相同，或者最多早于或晚于该版本一个次要版本。例如，如果您的集群版本为 `1.29`，则可以将 `kubectl` 的 `1.28`、`1.29` 或 `1.30` 版本与之配合使用。要安装或升级 `kubectl`，请参阅 [设置 `kubectl` 和 `eksctl`](install-kubectl.md)。
+ 包含集群配置的现有 `kubectl` `config` 文件。要创建 `kubectl` `config` 文件，请参阅 [通过创建 kubeconfig 文件将 kubectl 连接到 EKS 集群](create-kubeconfig.md)。

  1. 使用以下命令创建部署清单，您可以使用该部署清单部署容器组（pod）来确认配置。将示例值替换为您自己的值。

     ```
     cat >my-deployment.yaml <<EOF
     apiVersion: apps/v1
     kind: Deployment
     metadata:
       name: my-app
     spec:
       selector:
         matchLabels:
           app: my-app
       template:
         metadata:
           labels:
             app: my-app
         spec:
           serviceAccountName: my-service-account
           containers:
           - name: my-app
             image: public.ecr.aws/nginx/nginx:X.XX
     EOF
     ```

  1. 将清单部署到集群。

     ```
     kubectl apply -f my-deployment.yaml
     ```

  1. 确认容器组（pod）具有所需的环境变量。

     1. 按上一步部署后，查看部署的容器组（pod）。

        ```
        kubectl get pods | grep my-app
        ```

        示例输出如下。

        ```
        my-app-6f4dfff6cb-76cv9   1/1     Running   0          3m28s
        ```

     1. 确认容器组（pod）已挂载服务账户令牌。

        ```
        kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:
        ```

        示例输出如下。

        ```
        AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:  /var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token
        ```

  1. 确认您的容器组（pod）可以使用您在附加到角色的 IAM 策略中分配的权限与 AWS 服务进行交互。
**注意**  
当容器组（pod）使用来自与服务账户关联的 IAM 角色的 AWS 凭证时，该容器组（pod）中的 AWS CLI 或其他 SDK 包仅使用该角色提供的凭证。如果您不限制对提供给 [Amazon EKS 节点 IAM 角色](create-node-role.md)的凭证的访问，容器组（pod）仍然可以访问这些凭证。有关更多信息，请参阅[限制对分配给 Worker 节点的实例配置文件的访问](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)。

     如果您的容器组（pod）无法按预期与服务进行交互，请完成以下步骤，确认所有配置都正确。

     1. 确认容器组（pod）使用的 AWS SDK 版本支持通过 EKS 容器组身份关联担任 IAM 角色。有关更多信息，请参阅 [将容器组身份与 AWS SDK 结合使用](pod-id-minimum-sdk.md)。

     1. 确认部署正在使用服务账户。

        ```
        kubectl describe deployment my-app | grep "Service Account"
        ```

        示例输出如下。

        ```
        Service Account:  my-service-account
        ```