使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

为什么我无法为我的 Amazon EKS 集群生成 kubeconfig 文件?

1 分钟阅读
0

当我尝试为 Amazon Elastic Kubernetes Service(Amazon EKS)集群生成 kubeconfig 文件时,出现了 AccessDeniedException 错误。

简短描述

您必须有权对集群使用 eks:DescribeCluster API 操作,才能为 Amazon EKS 集群生成 kubeconfig 文件。要获得权限,请向 IAM 用户附加一个 AWS Identity and Access Management(IAM)策略。

解决方法

要将 IAM 策略附加到用户,请完成下面的步骤:

  1. 打开 IAM 控制台。然后,在导航窗格中,选择用户或角色

  2. 选择要在其中嵌入策略的用户或角色的名称。

  3. 在**“权限”选项卡上,选择添加内联策略**。

  4. 选择 JSON 选项卡。

  5. 使用文本编辑器将代码替换为以下 IAM 策略:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "eks:DescribeCluster"
          ],
          "Resource": "*"
        }
      ]
    }
  6. 选择查看策略

  7. 对于名称,输入策略的名称。例如:eks_update-kubeconfig

  8. 选择创建策略
    注意: 如果已对使用 AWS 命令行界面(AWS CLI)的 IAM 用户强制执行多重身份验证(MFA),则在完成下一步之前,必须使用 MFA 进行身份验证。显式拒绝消息表明,如果 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 CLI 对 AWS 资源的访问进行身份验证。按照以下文章中的步骤进行操作:如何使用 MFA 令牌对通过 AWS CLI 进行的 AWS 资源访问执行身份验证?然后,运行 sts get-session-token AWS CLI 命令。将 arn-of-the-mfa-device 替换为您的 MFA 设备的 ARN,将 code-from-token 替换为您的令牌的代码:

    $ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code 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
  9. 运行 update-kubeconfig 命令并确认它更新了 ~/.kube/config 下的配置文件。region-code 替换为您的 AWS 区域的代码,将 cluster_name 替换为您的集群的名称:

    aws eks --region region-code update-kubeconfig --name cluster_name
AWS 官方
AWS 官方已更新 1 年前