管理集群的用户或 IAM 角色 - Amazon EKS

管理集群的用户或 IAM 角色

当您创建 Amazon EKS 集群时,将在控制层面的集群 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。此 IAM 实体不会显示在 ConfigMap 或任何其他可见配置中,因此请确保跟踪最初创建了集群的 IAM 实体。要授予其他 AWS 用户或角色与您的集群进行交互的能力,您必须编辑 Kubernetes 内的 aws-auth ConfigMap。

注意

有关不同 IAM 实体的更多信息,请参阅 IAM 用户指南中的身份(用户、组和角色)。有关 Kubernetes RBAC 配置的更多信息,请参阅使用 RBAC 授权。对于所有 ConfigMap 设置,请参阅 GitHub 上的完整配置格式

aws-auth ConfigMap 的应用在 开始使用 Amazon EKS 指南中有介绍,该指南提供了从创建 Amazon EKS 集群到部署示例 Kubernetes 应用程序的完整端到端演练。最初创建此 ConfigMap 的目的是允许节点加入您的集群中,不过您还可以使用它来添加 RBAC 对 IAM 用户和角色的访问。如果您尚未启动节点和应用 aws-auth ConfigMap,则可以通过以下过程执行此操作。

aws-auth ConfigMap 应用到集群

  1. 检查您是否已经应用了 aws-auth ConfigMap。

    kubectl describe configmap -n kube-system aws-auth

    如果您收到错误指示“Error from server (NotFound): configmaps "aws-auth" not found”,则继续以下步骤以应用库存 ConfigMap。

  2. 下载、编辑和应用 AWS 身份验证器配置映射。

    1. 下载配置映射。

      curl -o aws-auth-cm.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. 使用您常用的文本编辑器打开文件。将 <ARN of instance role (not instance profile)> 替换为与节点关联的 IAM 角色的 Amazon Resource Name (ARN),然后保存相应文件。请勿修改此文件中的任何其他行。

      重要

      角色 ARN 不能包含路径。角色 ARN 的格式必须为 arn:aws:iam::<123456789012>:role/<role-name>。有关更多信息,请参阅aws-auth ConfigMap 不授予对集群的访问权限

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes

      您可以检查工作线程节点组的 AWS CloudFormation 堆栈输出,并查找以下值:

      • InstanceRoleARN(针对已使用 eksctl 创建的节点组)

      • NodeInstanceRole(针对已在 AWS Management Console 中使用 Amazon EKS 提供的 AWS CloudFormation 模板创建的节点组)

    3. 应用配置。此命令可能需要几分钟才能完成。

      kubectl apply -f aws-auth-cm.yaml
      注意

      如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)

  3. 查看节点的状态并等待它们达到 Ready 状态。

    kubectl get nodes --watch

将 IAM 用户或角色添加到 Amazon EKS 集群

  1. 确保 AWS 要使用的 kubectl 凭证已为集群授权。预设情况下,创建该集群的 IAM 用户具有这些权限。

  2. 打开 aws-auth ConfigMap。

    kubectl edit -n kube-system configmap/aws-auth
    注意

    如果您收到错误指示“Error from server (NotFound): configmaps "aws-auth" not found”,则使用上述过程应用库存 ConfigMap。

    示例 ConfigMap:

    apiVersion: v1 data: mapRoles: | - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF username: system:node:{{EC2PrivateDNSName}} kind: ConfigMap metadata: creationTimestamp: "2020-09-30T21:09:18Z" name: aws-auth namespace: kube-system resourceVersion: "1021" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c
  3. 将 IAM 用户、角色或AWS账户添加到 configMap。您无法将 IAM 组添加到 configMap 中。

    • 添加 IAM 角色(例如,对于联合身份用户):将角色详细信息添加到 data 下 ConfigMap 的 mapRoles 部分。如果此部分在文件中尚不存在,请添加它。每个条目支持以下参数:

      • rolearn:要添加的 IAM 角色的 ARN。

      • username:Kubernetes 内要映射到 IAM 角色的用户名。

      • groups:Kubernetes 内角色要映射到的组的列表。有关更多信息,请参阅 Kubernetes 文档中的默认角色和角色绑定

    • 添加 IAM 用户:将用户详细信息添加到 data 下 ConfigMap 的 mapUsers 部分。如果此部分在文件中尚不存在,请添加它。每个条目支持以下参数:

      • userarn:要添加的 IAM 用户的 ARN。

      • username:Kubernetes 内要映射到 IAM 用户的用户名。

      • groups:Kubernetes 内用户要映射到的组的列表。有关更多信息,请参阅 Kubernetes 文档中的默认角色和角色绑定

    例如,下面的块包含:

    • mapRoles 部分,此部分添加节点实例角色,以便节点可以自行注册到集群。

    • mapUsers 部分,其中包含来自默认AWS账户的AWS用户 admin 和来自其他AWS账户的 ops-user。两个用户均添加到 system:masters 组。

    将所有 <example-values>(包含 <>)替换为您自己的值。

    # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: v1 data: mapRoles: | - rolearn: <arn:aws:iam::111122223333:role/eksctl-my-cluster-nodegroup-standard-wo-NodeInstanceRole-1WP3NUE3O6UCF> username: <system:node:{{EC2PrivateDNSName}}> groups: - <system:bootstrappers> - <system:nodes> mapUsers: | - userarn: <arn:aws:iam::111122223333:user/admin> username: <admin> groups: - <system:masters> - userarn: <arn:aws:iam::111122223333:user/ops-user> username: <ops-user> groups: - <system:masters>
  4. 保存文件并退出您的文本编辑器。

  5. 确保将 Kubernetes 用户或组(被映射了 IAM 用户或角色)绑定到具有 RoleBindingClusterRoleBinding 的 Kubernetes 角色。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权。您可以下载以下示例清单,这些清单创建 clusterroleclusterrolebindingrolerolebinding

    • 查看所有命名空间中的 Kubernetes 资源 – 文件中的组名为 eks-console-dashboard-full-access-group,您的 IAM 用户或角色需要在 aws-auth configmap 中映射到此组。如果需要,您可以在将组应用到集群之前更改该组的名称,然后在 configmap 中将您的 IAM 用户或角色映射到该组。从下列位置下载文件:

      https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-full-access.yaml
    • 查看特定命名空间中的 Kubernetes 资源 – 此文件中的命名空间是 default,因此,如果要指定不同的命名空间,请编辑该文件,然后将其应用到集群。文件中的组名称为 eks-console-dashboard-restricted-access-group,您的 IAM 用户或角色需要在 aws-auth configmap 中映射到此组。如果需要,您可以在将组应用到集群之前更改该组的名称,然后在 configmap 中将您的 IAM 用户或角色映射到该组。从下列位置下载文件:

      https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml
  6. (可选)如果您希望已添加到 configmap 中的用户能够在 AWS Management Console 中 查看节点查看工作负载,则用户或角色必须具有以下两种类型的权限: