跳至内容

如何解决我的 Amazon EKS 集群中的访问权限问题?

2 分钟阅读
0

我在尝试授予对我的 Amazon Elastic Kubernetes Service (Amazon EKS) 集群的访问权限时遇到了问题。

解决方案

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

使用 Amazon EKS 访问条目向 AWS Identity and Access Management (IAM) 用户和角色授予对 Kubernetes API 的访问权限

配置 IAM 主体权限

IAM 主体必须对您的集群具有以下权限:

  • CreateAccessEntry
  • ListAccessEntries
  • DescribeAccessEntry
  • DeleteAccessEntry
  • UpdateAccessEntry
  • ListAccessPolicies
  • AssociateAccessPolicy
  • DisassociateAccessPolicy

有关 Amazon EKS 权限的详细信息,请参阅 Amazon Elastic Kubernetes Service 定义的操作

配置访问策略权限

访问策略设置了允许用户访问 Kubernetes API 的访问级别。使用以下策略创建访问条目:

当您使用上述策略创建访问条目时,将为 Kubernetes 集群级别权限授予对某个命名空间的访问权限。

**注意:**您无法修改访问策略的内容,也无法创建自己的访问策略。

授予 IAM 用户对您的 Amazon EKS 集群的访问权限

更改身份验证模式

**重要事项:**激活访问条目方法后,无法再次将其关闭。

要使用访问条目,请将 Amazon EKS 集群的身份验证模式更新为 APIAPI_AND_CONFIG_MAP。运行以下 AWS CLI 命令 update-cluster-config

aws eks update-cluster-config \
   --name my-cluster \
   --access-config authenticationMode=API_AND_CONFIG_MAP

**注意:**请将 my-cluster 替换为您的集群名称。要永久停用 ConfigMap 方法,请将 API_AND_CONFIG_MAP 替换为 API

为 IAM 实体创建访问条目并附加访问策略

向集群管理员提供对您的 Amazon EKS 集群的访问权限。首先,运行以下 create-access-entry 命令,为您的 IAM 用户或角色创建访问条目:

aws eks create-access-entry --cluster-name my-cluster \
  --principal-arn arn:aws:iam::111122223333:user/example-user

**注意:**请将 my-cluster 替换为您的集群名称,将 arn:aws:iam::111122223333:user/example-user 替换为您的 IAM 角色或用户的 ARN。

然后,运行以下 associate-access-policy 命令,以将 AmazonEKSClusterAdminPolicy 关联到 IAM 用户或角色:

aws eks associate-access-policy --cluster-name my-cluster\
  --principal-arn arn:aws:iam::111122223333:user/example-user \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster

**注意:**请将 my-cluster 替换为您的集群名称,将 arn:aws:iam::111122223333:user/example-user 替换为您的 IAM 角色或用户的 ARN。

要向 IAM 用户或角色提供对特定命名空间的管理员访问权限,请运行以下 associate-access-policy 命令:

aws eks associate-access-policy --cluster-name my-cluster\
  --principal-arn arn:aws:iam::111122223333:role/example-role \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy \
  --access-scope type=namespace,namespaces=test*

**注意:**请将 my-cluster 替换为您的集群名称,将 arn:aws:iam::111122223333:role/example-role 替换为您的 IAM 角色或用户的 ARN。此外,请将 test 替换为您的命名空间名称。

要在 Kubernetes 基于角色的访问控制 (RBAC) 中使用访问条目,请运行以下 create-access-entry 命令:

aws eks create-access-entry --cluster-name my-cluster \
  --principal-arn arn:aws:iam::111122223333:role/example-role-2 \
  --kubernetes-groups viewers

**注意:**请将 my-cluster 替换为您的集群名称,将 arn:aws:iam::111122223333:user/example-role-2 替换为您的 IAM 角色或用户的 ARN。请将 viewers 替换为您的集群上 Kubernetes 的 RoleBindingClusterRoleBinding 对象中指定的组的名称。

确认您的 IAM 实体凭证

要检查 AWS CLI 上正在使用的 IAM 用户或角色凭证,请运行以下 get-caller-identity 命令:

aws sts get-caller-identity

命令输出必须返回您为其创建了访问条目的 IAM 用户或角色。如果您收到不同的 IAM 角色或用户,请确保您正确配置了角色或用户的凭证。

为您的 IAM 实体创建 Kubeconfig

要为您的 IAM 角色或用户创建 Kubeconfig,请运行以下 update-kubeconfig 命令:

aws eks update-kubeconfig --name my-cluster --region aws-region

**注意:**请将 my-cluster 替换为您的集群名称,将 aws-region 替换为您的 AWS 区域。

检查您的 Kubernetes 访问权限

确认您的 IAM 实体已通过身份验证,并且您可以访问您的 Amazon EKS 集群资源。

要检查您是否可以在任意命名空间中创建容器组 (pod),请运行以下命令:

kubectl auth can-i create pods --all-namespaces

要检查您是否可以在特定命名空间中列出部署,请运行以下命令:

kubectl auth can-i list deployments.apps -n test

**注意:**请将 test 替换为您的命名空间的名称。

AWS 官方已更新 1 年前