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

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

管理集群的用户或 IAM 角色

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

注意

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

这些区域有:aws-authConfigMap 作为Amazon EKS 入门指南,该指南提供了从创建 Amazon EKS 集群到部署示例 Kubernetes 应用程序的完整端到端演练。最初创建它是为了允许节点加入您的集群中,不过您还可以使用此 ConfigMap 添加 RBAC 对 IAM 用户和角色的访问。如果您尚未启动节点并应用aws-authConfigMap,可执行以下步骤来做到这一点。

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. 使用您常用的文本编辑器打开文件。Replace<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 管理控制台中使用 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 角色(例如,对于联合身份用户):将角色详细信息添加到mapRoles部 ConfigMap,在data。如果此部分在文件中尚不存在,请添加它。每个条目支持以下参数:

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

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

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

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

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

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

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

    例如,下面的块包含:

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

    • AmapUsers部分与 AWS 用户admin从默认 AWS 账户,并ops-user从其他 AWS 账户。两个用户均添加到 system:masters 组。

    Replace Nall (全<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. 确保您将 IAM 用户或角色映射到的 Kubernetes 用户或组绑定到具有RoleBinding或者ClusterRoleBinding。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权。您可以下载以下示例清单,这些清单创建clusterroleclusterrolebindingrolerolebinding

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

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

      https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml
  6. (可选)如果您希望已添加到配置映射中的用户能够View 节点或者查看工作负载,则用户或角色必须具有相应的权限才能在 Kubernetes 中查看资源,但也需要具有相应的 IAM 权限才能在 AWS 管理控制台中查看这些资源。有关更多信息,请参阅 在 AWS 管理控制台中查看所有集群的节点和工作负载