Amazon EKS 使用 IAM 为Kubernetes 集群提供身份验证(通过 AWS CLI 的 1.16.156 版或更高版本中可用的 aws eks get-token 命令或者适用于 Kubernetes 的 AWS IAM 身份验证器),但它仍依赖于 Kubernetes 基于角色的访问控制 (RBAC) 来进行授权。

一、将 aws-auth ConfigMap 应用到集群
-
检查您是否已经应用了
aws-authConfigMap。kubectl describe configmap -n kube-system aws-auth如果您收到错误指示“
Error from server (NotFound): configmaps "aws-auth" not found”,则继续以下步骤以应用库存 ConfigMap。 -
下载、编辑和应用 AWS 身份验证器配置映射。
-
下载配置映射。
curl -o aws-auth-cm.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml -
使用您常用的文本编辑器打开文件。将
<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 模板创建的节点组)
- InstanceRoleARN(针对已使用
-
应用配置。此命令可能需要几分钟才能完成。
kubectl apply -f aws-auth-cm.yaml注意
如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)。
-
-
查看节点的状态并等待它们达到
Ready状态。kubectl get nodes --watch
二、将 IAM 用户或角色添加到 Amazon EKS 集群
-
确保 AWS 要使用的
kubectl凭证已为集群授权。预设情况下,创建该集群的 IAM 用户具有这些权限。 -
打开
aws-authConfigMap。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 -
将 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> - **添加 IAM 角色(例如,对于联合身份用户):**将角色详细信息添加到
-
保存文件并退出您的文本编辑器。
-
确保将 Kubernetes 用户或组(被映射了 IAM 用户或角色)绑定到具有
RoleBinding或ClusterRoleBinding的 Kubernetes 角色。有关更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权。您可以下载以下示例清单,这些清单创建clusterrole和clusterrolebinding或role和rolebinding:-
查看所有命名空间中的 Kubernetes 资源 – 文件中的组名为
eks-console-dashboard-full-access-group,您的 IAM 用户或角色需要在aws-authconfigmap 中映射到此组。如果需要,您可以在将组应用到集群之前更改该组的名称,然后在 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-authconfigmap 中映射到此组。如果需要,您可以在将组应用到集群之前更改该组的名称,然后在 configmap 中将您的 IAM 用户或角色映射到该组。从下列位置下载文件:https://s3.us-west-2.amazonaws.com/amazon-eks/docs/eks-console-restricted-access.yaml
-
-
(可选)如果您希望已添加到 configmap 中的用户能够在 AWS Management Console 中 查看节点 或 查看工作负载,则用户或角色必须具有以下两种类型的权限:
- 在 Kubernetes 中查看资源的 Kubernetes 权限
- 在 AWS Management Console 中查看资源的 IAM 权限。有关更多信息,请参阅在 AWS Management Console 中查看所有集群的节点和工作负载。

本文介绍了如何将IAM用户或角色添加到AWS EKS集群,包括编辑aws-auth ConfigMap,将IAM角色和用户映射到Kubernetes用户和组,以及设置必要的权限和角色绑定。
3803

被折叠的 条评论
为什么被折叠?



