如何使用 Amazon EKS 访问条目 API 来恢复对 EKS 集群的访问权限?
由于单点登录用户变更或 aws-auth ConfigMap 删除或损坏,我无法访问我的 Amazon Elastic Kubernetes Service (Amazon EKS)。
简短描述
如果您无法访问 EKS 集群,则在运行 kubectl 命令时会看到类似以下内容的错误:
“error: You must be logged in to the server (Unauthorized).(错误:您必须登录到服务器(未授权)。)”
要重新获得对集群的访问权限,请使用访问条目来管理 AWS Identity and Access Management (IAM) 主体的权限。您可以从 Amazon EKS 集群外部执行此操作。
**注意:**如果 EKS 集群创建者存在,则假定 EKS 集群创建者的 IAM 主体登录并访问该集群。默认情况下,EKS 集群创建者是集群的管理员。以下过程创建了一个管理员角色,该角色与集群创建者的原始 IAM 角色共存。
解决方法
先决条件:
- 安装 kubectl。
- 安装并配置最新版本的 AWS 命令行界面 (AWS CLI)。
- 您拥有具有以下权限的 IAM 角色: CreateAccessEntry、ListAccessEntries、DescribeAccessEntry、DeleteAccessEntry 和 UpdateAccessEntry。
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
使用 aws eks 访问条目 API 来管理 Amazon EKS 集群访问权限
**注意:**在以下命令中,替换以下内容:
将 <ACCOUNT_ID> 替换为 EKS 集群所在源账户的账户 ID。
将 <REGION> 替换为您的 AWS 区域的名称。
将 <CLUSTER_NAME> 替换为您的 EKS 集群的名称。
将 <IAM_PRINCIPAL_ARN> 替换为想要拥有管理员权限的角色的 ARN。
要使用 aws eks 访问条目 API 来管理 Amazon EKS 集群访问权限,请完成以下步骤:
-
在安装 kubectl 的主机中,代入具有以下权限的 IAM 角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:ListAccessEntries", "eks:CreateAccessEntry", "eks:DescribeCluster", "eks:UpdateClusterConfig" ], "Resource": [ "arn:aws:eks:<REGION>:<ACCOUNT_ID>:cluster/<CLUSTER_NAME>" ] }, { "Effect": "Allow", "Action": [ "eks:DeleteAccessEntry", "eks:ListAssociatedAccessPolicies", "eks:DisassociateAccessPolicy", "eks:AssociateAccessPolicy", "eks:UpdateAccessEntry", "eks:DescribeAccessEntry" ], "Resource": [ "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/*" ] } ] }
-
要确认您的身份,请运行以下命令:
aws sts get-caller-identity
在命令的输出中,记下 ARN。它看起来类似于以下示例:arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin
-
运行以下命令以验证 Amazon EKS 集群的当前身份验证模式:
aws eks describe-cluster --name <CLUSTER_NAME> --query 'cluster.accessConfig.authenticationMode' --region <REGION>
如果 Amazon EKS 集群的当前身份验证模式为 API_AND_CONFIG_MAP,则该集群已经具有所需的访问模式。跳到步骤 5。
-
运行以下命令以更新 Amazon EKS 集群的身份验证模式:
aws eks update-cluster-config --name <CLUSTER_NAME> --access-config authenticationMode=API_AND_CONFIG_MAP --region <REGION>
**注意:**您可以从 CONFIG_MAP 身份验证模式切换到 API 模式,但无法从 API 模式切换回 CONFIG_MAP 模式。
-
运行以下命令为您的集群和 IAM 角色创建访问条目:
aws eks create-access-entry --cluster-name <CLUSTER_NAME> --principal-arn <IAM_PRINCIPAL_ARN> --region <REGION>
输出类似于以下内容:
{ "accessEntry": { "clusterName": "<CLUSTER_NAME>", "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "kubernetesGroups": [], "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<CLUSTER_NAME>/user/<ACCOUNT_ID>/new-cluster-admin/26c6d1f8-4211-3fe0-f9d2-734b912dcd9a", "createdAt": "2024-02-13T19:27:45.370000+00:00", "modifiedAt": "2024-02-13T19:27:45.370000+00:00", "tags": {}, "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "type": "STANDARD" } }
-
运行以下命令将 AmazonEKSClusterAdminPolicy 关联到 Amazon EKS 集群和 IAM 角色:
aws eks associate-access-policy --cluster-name <CLUSTER_NAME> \ --principal-arn <IAM_PRINCIPAL_ARN> \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \ --access-scope type=cluster \ --region <REGION>
输出类似于以下内容:
{ "accessEntry": { "clusterName": "<CLUSTER_NAME>", "principalArn": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "kubernetesGroups": [], "accessEntryArn": "arn:aws:eks:<REGION>:<ACCOUNT_ID>:access-entry/<cluster_name>/user/<ACCOUNT_ID>/new-cluster-admin/7ec6efb3-31c8-edcf-3039-ca2b38e0d708", "createdAt": "2024-02-25T08:34:06.002000+00:00", "modifiedAt": "2024-02-25T08:34:06.002000+00:00", "tags": {}, "username": "arn:aws:iam::<ACCOUNT_ID>:user/new-cluster-admin", "type": "STANDARD" } }
-
要更新或生成 kubeconfig 文件,请运行以下命令以连接到 EKS 集群:
aws eks update-kubeconfig --name <CLUSTER_NAME> --region <REGION>
-
运行以下命令以验证用户是否能够以管理员身份访问 EKS 集群:
kubectl auth can-i '*' '*' --all-namespaces
**注意:**如果您能够以管理员身份访问 EKS 集群,则输出显示 yes(是)。
相关信息
eksctl 网站上的 EKS 访问条目
![AWS 官方](/static/images/aws.png)
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 个月前
- AWS 官方已更新 4 个月前