當我嘗試為 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 取代為叢集的名稱。