為何無法為 Amazon EKS 叢集產生 kubeconfig 檔案?

2 分的閱讀內容
0

當我嘗試為 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集產生 kubeconfig 檔案時,出現 AccessDeniedException 錯誤。

簡短描述

您必須具有對 Amazon EKS 叢集使用 eks:DescribeCluster API 動作的許可,才能為該叢集產生 kubeconfig 檔案。若要獲得許可,請將 AWS Identity and Access Management (IAM) 政策連接到 IAM 使用者。

解決方案

若要將 IAM 政策連接到 IAM 使用者,請完成以下步驟:

1.    開啟 IAM console (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 (建立政策)。

明確拒絕消息指示如果多重要素驗證 (MFA) 為否,則存在拒絕大多數動作的 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 區域的代碼,將 cluster name 取代為叢集的名稱。


AWS 官方
AWS 官方已更新 2 年前