我尝试为 Amazon Elastic Kubernetes Service (Amazon EKS) 集群生成 kubeconfig 文件时,收到了 AccessDeniedException 错误。
简短描述
您必须具有对集群使用 eks:DescribeCluster API 操作的权限,才能为 Amazon EKS 集群生成 kubeconfig 文件。要获得权限,请将 AWS Identity and Access Management (IAM) 策略附加到 IAM 用户。
解决方法
要将 IAM 策略附加到 IAM 用户,请完成以下步骤:
1. 打开 IAM 控制台。
2. 在导航窗格中,选择 Users or Roles(用户或角色)。
3. 选择要在其中嵌入策略的用户或角色的名称。
4. 在 Permissions(权限)选项卡中,选择 Add inline policy(添加内联策略)。
5. 选择 JSON 选项卡。
6. 使用文本编辑器将代码替换为以下 IAM 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DescribeCluster"
],
"Resource": "*"
}
]
}
7. 选择 Review policy(查看策略)。
8. 在 Name(名称)中,为策略输入名称。例如:eks_update-kubeconfig。
**注意:**您可以为策略选择任何名称。
9. 选择 Create policy(创建策略)。
explicit deny 消息表示如果多重身份验证 (MFA) 为 false,则存在拒绝大多数操作的 IAM 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BlockMostAccessUnlessSignedInWithMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ListUsers",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
**注意:**由于您使用的是 MFA 设备,因此必须使用 MFA 令牌通过 AWS Command Line Interface (AWS CLI) 对 AWS 资源的访问进行身份验证。请遵照如何使用 MFA 令牌对通过 AWS CLI 进行的 AWS 资源访问执行身份验证?一文中的步骤操作。 然后,运行 sts get-session-token AWS CLI 命令。
例如:
$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
**注意:**将 arn-of-the-mfa-device 替换为您的 MFA 设备的 ARN,并将 code-from-token 替换为您的令牌的代码。
您可以通过将值导出到环境变量来使用临时凭证。
例如:
$ export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
$ export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
$ export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output
运行 update-kubeconfig 命令并确认它更新了 ~/.kube/config 下的配置文件:
aws eks --region region-code update-kubeconfig --name cluster_name
注意:将 region-code 替换为您的 AWS 区域的代码,并将集群名称替换为您的集群名称。