帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
使用 ConfigMap 向 IAM 用户授予对 Kubernetes 的访问权限。
重要
aws-auth
ConfigMap 已弃用。要管理对 Kubernetes API 的访问权限,建议的方法是使用访问条目。
Amazon EKS 控制面板上运行的 AWS IAM Authenticator for Kubernetesaws-auth
ConfigMap
获取配置信息。对于所有 aws-auth
ConfigMap
设置,请参阅 GitHub 上的完整配置格式
将 IAM 主体添加到 Amazon EKS 集群
创建 Amazon EKS 集群时,将为创建集群的 IAM 主体自动授予 Amazon EKS 控制面板中基于集群角色的访问控制(RBAC)配置中的 system:masters
权限。该主体不会显示在任何可见配置中,因此请确保跟踪最初创建集群的主体。要授予其他 IAM 主体与集群进行交互的能力,请编辑 Kubernetes 中的 aws-auth ConfigMap
,创建 Kubernetes rolebinding
或 clusterrolebinding
,名为 aws-auth ConfigMap
中指定的 group
。
注意
有关 Kubernetes 基于角色的访问控制(RBAC)配置的更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权
要将 IAM 主体添加到 Amazon EKS 集群
-
确定
kubectl
用来访问集群的凭据。可以在计算机上使用下面的命令查看kubectl
使用的凭据。如果不使用原定设置路径,请将
替换为~/.kube/config
kubeconfig
文件的路径。cat
~/.kube/config
示例输出如下。
[...] contexts: - context: cluster:
my-cluster.
user:region-code
.eksctl.ioadmin@my-cluster.
name:region-code
.eksctl.ioadmin@my-cluster.
current-context:region-code
.eksctl.ioadmin@my-cluster.
[...]region-code
.eksctl.io在上一个示例输出中,为
集群配置名为my-cluster
的用户凭证。如果这是创建了集群的用户,那么该用户有权访问您的集群。如果不是创建集群的用户,则需要完成剩余步骤才能让其他 IAM 主体有权访问集群。IAM 最佳实践建议您向角色而不是用户授予权限。您可以使用以下命令查看哪些其他主体当前有权访问您的集群:admin
kubectl describe -n kube-system configmap/aws-auth
示例输出如下。
Name: aws-auth Namespace: kube-system Labels: <none> Annotations: <none> Data ==== mapRoles: ---- - groups: - system:bootstrappers - system:nodes rolearn: arn:aws:iam::
111122223333
:role/my-node-role
username: system:node:{{EC2PrivateDNSName}} BinaryData ==== Events: <none>上一个示例是默认的
aws-auth
ConfigMap
。只有节点实例角色才有权访问集群。 -
请确保您拥有现有的 Kubernetes
roles
和rolebindings
或者clusterroles
和clusterrolebindings
,您可以将 IAM 主体映射到其中。有关这些资源的更多信息,请参阅 Kubernetes 文档中的使用 RBAC 授权。 -
查看您现有的 Kubernetes
roles
或clusterroles
。Roles
范围限定为namespace
,但clusterroles
范围则限定为集群。kubectl get roles -A
kubectl get clusterroles
-
查看之前的输出中返回的任何
role
或clusterrole
的详细信息,并确认它具有您希望 IAM 主体在集群中拥有的权限(rules
)。将
替换为在上一个命令的输出中返回的role-name
role
名称。将
替换为kube-system
role
的命名空间。kubectl describe role
role-name
-nkube-system
将
替换为在上一个命令的输出中返回的cluster-role-name
clusterrole
名称。kubectl describe clusterrole
cluster-role-name
-
查看您现有的 Kubernetes
rolebindings
或clusterrolebindings
。Rolebindings
范围限定为namespace
,但clusterrolebindings
范围则限定为集群。kubectl get rolebindings -A
kubectl get clusterrolebindings
-
查看任何
rolebinding
或clusterrolebinding
的详细信息,并确认它具有在上一步中列为roleRef
的role
或clusterrole
,以及为subjects
列出的组名称。将
替换为在上一个命令的输出中返回的role-binding-name
rolebinding
名称。将
替换为kube-system
rolebinding
的namespace
。kubectl describe rolebinding
role-binding-name
-nkube-system
示例输出如下。
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name:
eks-console-dashboard-restricted-access-role-binding
namespace:default
subjects: - kind: Group name:eks-console-dashboard-restricted-access-group
apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name:eks-console-dashboard-restricted-access-role
apiGroup: rbac.authorization.k8s.io将
替换为在上一个命令的输出中返回的cluster-role-binding-name
clusterrolebinding
名称。kubectl describe clusterrolebinding
cluster-role-binding-name
示例输出如下。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name:
eks-console-dashboard-full-access-binding
subjects: - kind: Group name:eks-console-dashboard-full-access-group
apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name:eks-console-dashboard-full-access-clusterrole
apiGroup: rbac.authorization.k8s.io
-
-
编辑
aws-auth
ConfigMap
。您可以使用eksctl
之类的工具更新ConfigMap
,或者可以通过编辑它来进行手动更新。重要
我们建议使用
eksctl
或者其他工具来编辑ConfigMap
。有关您可以使用的其他工具的信息,请参阅《Amazon EKS 最佳实践指南》中的使用工具对aws-auth
ConfigMap
进行更改。格式不正确的 aws-auth
ConfigMap
可能会导致您失去对集群的访问权限。
将 aws-auth
ConfigMap
应用到集群
使用 eksctl
创建托管节点组时或创建节点组时自动创建 aws-auth
ConfigMap
并应用于集群。最初创建它的目的是允许节点加入您的集群,也可以使用 ConfigMap
为 IAM 主体添加基于角色的访问控制(RBAC)。如果您尚未启动自行管理的节点并且未将 aws-auth
ConfigMap
应用到集群,则可以按照下面的过程执行此操作。
将 aws-auth
ConfigMap
应用到集群
-
检查您是否已经应用了
aws-auth
ConfigMap
。kubectl describe configmap -n kube-system aws-auth
如果您收到错误指示“
Error from server (NotFound): configmaps "aws-auth" not found
”,则继续以下步骤应用库存ConfigMap
。 -
下载、编辑和应用 AWS 身份验证器配置映射。
-
下载配置映射。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
-
在
文件中,将aws-auth-cm.yaml
rolearn
设置为与您的节点关联的 IAM 角色的 Amazon 资源名称(ARN)。您可以使用文本编辑器或者通过替换
和运行以下命令来执行此操作:my-node-instance-role
sed -i.bak -e 's|<ARN of instance role (not instance profile)>|
my-node-instance-role
|' aws-auth-cm.yaml请勿修改此文件中的任何其他行。
重要
角色 ARN 不能包含
role/my-team/developers/my-role
等路径。ARN 的格式必须为arn:aws:iam::
。在此示例中,111122223333
:role/my-role
my-team/developers/
需要删除。您可以检查节点组的 AWS CloudFormation 堆栈输出,并查找以下值:
-
InstanceRoleARN – 对于使用
eksctl
创建的节点组 -
NodeInstanceRole – 对于在 AWS Management Console 中使用 Amazon EKS 提供的 AWS CloudFormation 模板创建的节点组
-
-
应用配置。此命令可能需要几分钟才能完成。
kubectl apply -f aws-auth-cm.yaml
注意
如果您收到任何授权或资源类型错误,请参阅故障排除主题中的 未经授权或访问被拒绝 (kubectl)。
-
-
查看节点的状态并等待它们达到
Ready
状态。kubectl get nodes --watch
输入
Ctrl
+C
以返回到 Shell 提示符。