為什麼在 Amazon EKS 中使用 AWS 負載平衡器控制器時出現 "webidentityerr" 錯誤?
當我嘗試在 Amazon Elastic Kubernetes Service (Amazon EKS) 中使用 AWS 負載平衡器控制器時收到下列錯誤訊息:"failed to find existing LoadBalancer due to WebIdentityErr: failed to retrieve credentials\ncaused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity\n\tstatus code: 403 (由於出現 WebIdentityErr,無法找到現有的負載平衡器控制器:無法擷取憑證\n原因:存取遭拒:未授權執行 sts:AssumeRoleWithWebIdentity\n\狀態代碼:403)"
簡短描述
由於下列原因,當您在 Amazon EKS 中使用 AWS 負載平衡器控制器時出現此錯誤:
- 服務帳户組態不正確
- 服務帳戶中使用的 AWS Identity and Access Management (IAM) 角色的信任關係不正確
藉由 AWS 負載平衡器控制器,工作節點可執行這些任務。必須授予這些工作節點使用 IAM 許可存取 AWS Application Load Balancer 或 AWS Network Load Balancer 資源的權限。您可以使用服務帳戶的 IAM 角色設定 IAM 許可。或者,您可以將 IAM 許可直接附加到工作節點的 IAM 角色。如需更多詳細資訊,請參閲 Kubernetes 網站上的負載平衡器控制器安裝。
解析度
服務帳户組態不正確
若要檢查服務帳戶組態是否正確設定,請執行以下步驟:
1. 驗證部署中定義的服務帳户名稱:
kubectl describe deploy <aws-load-balancer-controller> -n kube-system | grep -i "Service Account"
2. 描述服務帳户:
kubectl describe sa <aws-load-balancer-controller> -n kube-system
3. 驗證 IAM 角色的服務帳戶註解:
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxxxxx:role/<AmazonEKSLoadBalancerControllerRole>
4. 如果此註解遺失或不正確,則請更新註解。確保您正確地將 IAM 角色關聯到服務帳戶:
kubectl annotate serviceaccount -n <SERVICE_ACCOUNT_NAMESPACE> <SERVICE_ACCOUNT_NAME> \ eks.amazonaws.com/role-arn=arn:aws:iam::<ACCOUNT_ID>:role/<IAM_ROLE_NAME>
5. 刪除並重新建立與服務帳戶關聯的任何現有 Amazon EKS pod。確保套用憑證環境變數:
kubectl delete pods <aws-loadbalancer-controller-pod> -n <kube-system>
使用的 IAM 角色與服務帳戶之間的信任關係不正確
以下範例顯示了在 IAM 角色和服務帳戶之間建立信任關係時可能出現的一些常見錯誤。
範例 1:IAM 角色或信任關係未正確定義為 "sts:AssumeRoleWithWebIdentity" 動作
確認為sts:AssumeRoleWithWebIdentity 動作 (而不是 sts:AssumeRole 動作) 正確定義了信任關係。
以下為沒有正確定義信任關係的範例:
{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "xxxxx.amazonaws.com" }, "Action": "sts:AssumeRole" }
若要更正信任關係,請確保為 sts:AssumeRoleWithWebIdentity 動作定義信任關係:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS-ACCOUNT>:oidc-provider/oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-cluster-OIDC-Provider-ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-cluster-OIDC-Provider-ID>:sub": "system:serviceaccount:kube-system:<aws-load-balancer-controller-serviceaccount>" } } } ] }
**注意:**請確保使用您自己的值取代所有變數。
若要針對一個帳戶中的多個叢集使用相同的 IAM 角色,請定義類似下列內容的信任關係:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS-ACCOUNT>:oidc-provider/oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-Cluster-1-OIDC-Provider-ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-Cluster-1-OIDC-Provider-ID>:sub": "system:serviceaccount: kube-system:<aws-load-balancer-controller-serviceaccount>", "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-cluster-1-OIDC-Provider-ID>:aud": "sts.amazonaws.com" } } }, { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<AWS-ACCOUNT>:oidc-provider/oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-Cluster-2-OIDC-Provider-ID>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-Cluster-2-OIDC-Prob>:sub": "system:serviceaccount: kube-system:<aws-load-balancer-controller-serviceaccount>", "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-cluster-2-OIDC-Provider-ID>:aud": "sts.amazonaws.com" } } } ] }
範例 2:建立 Amazon EKS 叢集時不正確的 OIDC 提供者 ID
確保為您的 Amazon EKS 叢集正確建立並驗證 OIDC 提供者。驗證是否正確列出 OIDC 提供者 ID 和關聯的 AWS 區域。否則,您將收到 WebIdentityErr 錯誤。
範例 3:未正確輸入服務帳戶名稱或其命名空間
在更新 AWS 負載平衡器控制器部署時,請確保輸入正確的服務帳戶名稱及其命名空間。
範例 4:信任關係中缺少 "sts.amazonaws.com" 步驟
如果與 EKS pod 關聯的服務角色無法對 AssumeRoleWithWebIdentity 動作執行 STS 操作,則請更新信任關係。信任關係必須包含 "sts.amazonaws.com" 才能執行 STS 動作。
例如:
"Condition": { "StringEquals": { "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-cluster-OIDC-Provider-ID>:sub": "system:serviceaccount:kube-system:<aws-load-balancer-controller-serviceaccount>", "oidc.eks.<REGION>.amazonaws.com/id/<Your-EKS-cluster-OIDC-Provider-ID>:aud": "sts.amazonaws.com" } }
如需相關具有多個金鑰或值的 IAM 條件的更多資訊,請參閲建立具有多個金鑰或值的條件。

相關內容
- 已提問 4 個月前lg...
- 已提問 4 個月前lg...
- 已提問 1 年前lg...
- 已提問 6 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 10 個月前