Amazon EKS Pod 执行 IAM 角色 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon EKS Pod 执行 IAM 角色

要在 Amazon Fargate 基础设施上运行 Pods,需要有 Amazon EKS Pod 执行角色。

当您的集群在 Pods 基础设施上创建 Amazon Fargate 时,在 Fargate 基础设施上运行的组件必须代表您调用 Amazon API。这是为了他们可以执行诸如从 Amazon ECR 中拉取容器镜像或将日志路由到其他 Amazon 服务的操作。Amazon EKS Pod 执行角色提供执行此操作的 IAM 权限。

创建 Fargate 配置文件时,必须使用配置文件为在 Fargate 基础设施上运行的 Amazon EKS 组件指定 Pod 执行角色。此角色将被添加到集群的 Kubernetes 基于角色的访问控制 (RBAC, Role based access control) 以进行授权。这允许在 Fargate 基础设施上运行的 kubelet 注册到您的 Amazon EKS 集群,以便它可以作为节点显示在您的集群中。

注意

Fargate 配置文件的 IAM 角色必须与 Amazon EC2 节点组的 IAM 角色不同。

重要

在 Fargate Pod 中运行的容器不能承担与 Pod 执行角色相关联的 IAM 权限。要授予 Fargate Pod 中的容器访问其他 Amazon 服务的权限,您必须使用 服务账户的 IAM 角色

在创建 Fargate 配置文件之前,必须使用 AmazonEKSFargatePodExecutionRolePolicy 创建 IAM 角色。

检查正确配置的现有 Pod 执行角色

您可以使用以下程序检查并查看您的账户是否已有正确配置的 Amazon EKS Pod 执行角色。为了避免混淆代理安全问题,该角色必须根据 SourceArn 限制访问权限。您可以根据需要修改执行角色,以包括对其他集群上的 Fargate 配置文件的支持。

在 IAM 控制台中检查 Amazon EKS Pod 执行角色
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Roles(角色)

  3. Roles(角色)页面上,搜索 AmazonEKSFargatePodExecutionRole 的角色列表。如果该角色不存在,请参阅 创建 Amazon EKS Pod 执行角色 以创建该角色。如果该角色存在,请选择该角色。

  4. AmazonEKSFargatePodExecutionRole 页面上,请执行以下操作:

    1. 选择权限

    2. 确保将 AmazonEKSFargatePodExecutionRolePolicy Amazon 托管策略附加到该角色。

    3. 选择 Trust Relationships(信任关系)。

    4. 选择 Edit trust policy(编辑信任策略)。

  5. Edit trust policy(编辑信任策略)页面中,验证信任关系是否包含以下策略,并且在集群上是否有 Fargate 配置文件的行。如果是这样,请选择 Cancel(取消)。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*" } }, "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

    如果策略匹配但没有指定集群上 Fargate 配置文件的行,则可以在 ArnLike 对象顶部添加以下行。请将 region-code 替换为您的集群所在的 Amazon Web Services 区域,将 111122223333 替换为账户 ID,并将 my-cluster 替换为集群的名称。

    "aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*",

    如果策略不匹配,请将之前的完整策略复制到表单中,然后选择 Update policy(更新策略)。请将 region-code 替换为集群所在的 Amazon Web Services 区域。如果您希望在您的账户中在所有 Amazon Web Services 区域使用相同角色,则将 region-code 替换为 *。请将 111122223333 替换为账户 ID,并将 my-cluster 替换为您的集群名称。如果您希望在账户中对所有集群使用相同角色,请将 my-cluster 替换为 *

创建 Amazon EKS Pod 执行角色

如果尚无针对集群的 Amazon EKS Pod 执行角色,您可以使用 Amazon Web Services Management Console 或 Amazon CLI 来创建它。

Amazon Web Services Management Console
要使用 Amazon Web Services Management Console 创建 Amazon FargatePod 执行角色
  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在左侧导航窗格中,选择 Roles(角色)。

  3. Roles(角色)页面上,选择 Create role(创建角色)。

  4. Select trusted entity(选择受信任的实体)页面上,请执行以下操作:

    1. Trusted entity type(受信任的实体类型)部分中,选择 Amazon service(服务)。

    2. 其他 Amazon Web Services 使用案例下拉列表中,选择 EKS

    3. 选择 EKS - Fargate Pod(EKS - Fargate 容器组)。

    4. 选择 Next(下一步)。

  5. Add permissions(添加权限)页面上,选择 Next(下一步)。

  6. Name, review, and create(命名、查看和创建)页面中,请执行以下操作:

    1. 对于 Role name(角色名称),请为角色输入唯一名称,例如 AmazonEKSFargatePodExecutionRole

    2. 添加标签(可选)下,将标签作为键值对附加,以将元数据添加到角色。有关在 IAM 中使用标签的更多信息,请参阅《IAM 用户指南》中的标记 IAM 资源

    3. 选择 Create role(创建角色)。

  7. Roles(角色)页面上,搜索 AmazonEKSFargatePodExecutionRole 的角色列表。选择角色。

  8. AmazonEKSFargatePodExecutionRole 页面上,请执行以下操作:

    1. 选择 Trust Relationships(信任关系)。

    2. 选择 Edit trust policy(编辑信任策略)。

  9. Edit trust policy(编辑信任策略)页面上,执行以下操作:

    1. 将以下内容复制并粘贴到 Edit trust policy(编辑信任策略)表单中。将 region-code 替换为您的集群所在的 Amazon Web Services 区域。如果您希望在您的账户中在所有 Amazon Web Services 区域使用相同角色,则将 region-code 替换为 *。请将 111122223333 替换为账户 ID,并将 my-cluster 替换为您的集群名称。如果您希望在账户中对所有集群使用相同角色,请将 my-cluster 替换为 *

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*" } }, "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 选择 Update policy(更新策略)。

Amazon CLI
要使用 Amazon CLI 创建 Amazon FargatePod 执行角色
  1. 复制并将以下内容粘贴到名为 pod-execution-role-trust-policy.json 的文件中。将 region-code 替换为您的集群所在的 Amazon Web Services 区域。如果您希望在您的账户中在所有 Amazon Web Services 区域使用相同角色,则将 region-code 替换为 *。请将 111122223333 替换为账户 ID,并将 my-cluster 替换为您的集群名称。如果您希望在账户中对所有集群使用相同角色,请将 my-cluster 替换为 *

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*" } }, "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 创建 Pod 执行 IAM 角色。

    aws iam create-role \ --role-name AmazonEKSFargatePodExecutionRole \ --assume-role-policy-document file://"pod-execution-role-trust-policy.json"
  3. 将所需的 Amazon EKS 托管 IAM policy 附加到角色。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy \ --role-name AmazonEKSFargatePodExecutionRole