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

管理集群的用户或 IAM 角色

当您创建 Amazon EKS 集群时,将在集群的 RBAC 配置中自动为创建集群的 IAM 实体用户或角色(例如,联合身份用户)授予 system:masters 权限。要授予其他 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://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-06-10/aws-auth-cm.yaml
    2. 使用您常用的文本编辑器打开文件。将 <ARN of instance role (not instance profile)> 替换为与工作线程节点关联的 IAM 角色的 Amazon 资源名称 (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 管理控制台中使用 Amazon EKS 提供的 AWS CloudFormation 模板创建的工作线程节点组)

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

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

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

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

    kubectl get nodes --watch

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

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

  2. 打开 aws-auth ConfigMap。

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

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

    示例 ConfigMap:

    # 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/doc-test-worker-nodes-NodeInstanceRole-WDO5P42N3ETB username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes kind: ConfigMap metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","data":{"mapRoles":"- rolearn: arn:aws:iam::111122223333:role/doc-test-worker-nodes-NodeInstanceRole-WDO5P42N3ETB\n username: system:node:{{EC2PrivateDNSName}}\n groups:\n - system:bootstrappers\n - system:nodes\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"aws-auth","namespace":"kube-system"}} creationTimestamp: 2018-04-04T18:49:10Z name: aws-auth namespace: kube-system resourceVersion: "780" selfLink: /api/v1/namespaces/kube-system/configmaps/aws-auth uid: dcc31de5-3838-11e8-af26-02e00430057c
  3. 将 IAM 用户、角色或 AWS 账户添加到 configMap。

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

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

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

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

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

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

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

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

    例如,下面的块包含:

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

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

    # 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::555555555555:role/devel-worker-nodes-NodeInstanceRole-74RF4UBDUKL6 username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes mapUsers: | - userarn: arn:aws:iam::555555555555:user/admin username: admin groups: - system:masters - userarn: arn:aws:iam::111122223333:user/ops-user username: ops-user groups: - system:masters
  4. 保存文件并退出您的文本编辑器。