将 IAM 角色与服务账户关联 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 IAM 角色与服务账户关联

在 Kubernetes 中,您通过添加以下注释到服务账户,定义 IAM 角色与集群中的服务账户关联。

注意

如果您创建了 IAM 角色以与服务账户一起使用eksctl,则在您创建角色时就使用该服务账户完成了该操作。

apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws-cn:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME>

Prerequisites

使用 IAM 角色为服务账户添加注释

  1. 使用以下命令可通过要用于服务账户的 IAM 角色的 ARN 注释您的服务账户。请务必将<example values>(包括<>) 与您自己的值。

    kubectl annotate serviceaccount -n <SERVICE_ACCOUNT_NAMESPACE> <SERVICE_ACCOUNT_NAME> \ eks.amazonaws.com/role-arn=arn:aws-cn:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME>
    注意

    如果您没有现有服务账户,则需要创建一个账户。有关更多信息,请参阅 。配置窗格的服务帐户在 Kubernetes 文档中。要使服务帐户能够使用 Kubernetes 权限,您必须创建Role,或者ClusterRole,然后将角色绑定到服务帐户。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权。当AmazonVPC CNI 插件,例如,部署清单将创建一个服务账户、集群角色和集群角色绑定。您可以查看清单作 GitHub 示例使用。

  2. 删除并重新创建任何与服务账户关联的现有 Pod,以应用凭据环境变量。变异 Webhook 不将其应用到已经在运行的 Pod。以下命令删除现有的 aws-node DaemonSet Pod 并使用服务账户注释部署这些 Pod。您可以修改命名空间、部署类型和标签,以更新您的特定 Pod。

    kubectl delete pods -n <kube-system> -l <k8s-app=aws-node>
  3. 确认 Pod 已全部重新启动。

    kubectl get pods -n <kube-system> -l <k8s-app=aws-node>
  4. 描述 Pod 之一并确保 AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN 环境变量存在。

    kubectl exec -n kube-system <aws-node-9rgzw> env | grep AWS

    输出:

    AWS_VPC_K8S_CNI_LOGLEVEL=DEBUG AWS_ROLE_ARN=arn:aws-cn:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME> AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token