協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
為服務帳戶設定 AWS Security Token Service 端點
如果您將 Kubernetes 服務帳戶與服務帳戶的 IAM 角色搭配使用,則可設定服務帳戶所使用的 AWS Security Token Service 端點類型。
AWS 建議使用區域性 AWS STS 端點,而不要使用全域端點。這樣可以減少延遲、提供內建備援,並增加工作階段字符的有效性。AWS Security Token Service 必須在執行 Pod 的 AWS 區域中處於作用中狀態。此外,應用程式應具有內建備援,以便在該 AWS 區域的服務發生故障時選擇不同的 AWS 區域。如需詳細資訊,請參閱《IAM 使用者指南》中的在 AWS 區域中管理 AWS STS。
-
現有的叢集。如果您沒有,則可以使用其中一個 開始使用 Amazon EKS 指南來建立一個。
-
叢集的現有 IAM OIDC 提供商。如需詳細資訊,請參閱 為您的叢集建立 IAM OIDC 身分提供者。
-
現有的 Kubernetes 服務帳戶設定為與服務帳戶的 Amazon EKS IAM 功能搭配使用。
以下範例均使用由 Amazon VPC CNI 外掛程式所使用的 aws-node Kubernetes 服務帳戶。您可將範例值取代為您自己的服務帳戶、Pod、命名空間和其他資源。
-
根據您要變更端點的服務帳戶,選取使用該服務帳戶的 Pod。確定 Pod 在哪個 AWS 區域中執行。將
aws-node-6mfgv取代為您的 Pod 名稱,以及將kube-system取代為您 Pod 的命名空間。kubectl describe pod aws-node-6mfgv -n kube-system |grep Node:範例輸出如下。
ip-192-168-79-166.us-west-2/192.168.79.166在先前的輸出中,Pod 在 us-west-2 AWS 區域中的節點上執行。
-
判斷 Pod 的服務帳戶所使用的端點類型。
kubectl describe pod aws-node-6mfgv -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS範例輸出如下。
AWS_STS_REGIONAL_ENDPOINTS: regional如果目前端點是全域範圍,則輸出中會傳回
global。如果未傳回任何輸出,則預設端點類型正在使用中且未被覆寫。 -
如果您的叢集或平台版本與表中列出的版本相同或更高,則可以使用以下命令之一,將服務帳戶使用的端點類型從預設類型變更為其他類型。將
aws-node取代為您服務帳戶的名稱,以及將kube-system取代為服務帳戶的命名空間。-
如果您的預設或目前端點類型是全域範圍,且您想將其範圍變更為區域:
kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/sts-regional-endpoints=true如果您是使用服務帳戶的 IAM 角色來產生在 Pod 容器中執行的應用程式中的預簽署 S3 URL,則區域端點的 URL 格式會與以下範例類似:
https://bucket.s3.us-west-2.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&... -
如果您的預設或目前端點類型是區域範圍,且您想將其範圍變更為全域:
kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/sts-regional-endpoints=false如果您的應用程式明確地向 AWS STS 全域端點發出請求,並且您不會覆寫在 Amazon EKS 叢集中使用區域端點的預設行為,則請求會失敗並發生錯誤。如需詳細資訊,請參閱 Pod 容器會接收到下列錯誤:An error occurred (SignatureDoesNotMatch) when calling the GetCallerIdentity operation: Credential should be scoped to a valid region。
如果您是使用服務帳戶的 IAM 角色來產生在 Pod 容器中執行的應用程式中的預簽署 S3 URL,則全域端點的 URL 格式會與以下範例類似:
https://bucket.s3.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&...
如果您的自動化需要某種格式的預簽署 URL,或者您的應用程式或使用預簽署 URL 的下游相依性對 AWS 區域有期望,則請進行必要的變更,以使用適當的 AWS STS 端點。
-
-
刪除並重新建立任何與服務帳戶相關聯的現有 Pod,以套用憑證環境變數。變動 Webhook 不會將這些變數套用到已在執行中的 Pod。您可使用所設定標註的 Pod 資訊,來取代
Pod、kube-system和-l k8s-app=aws-node。kubectl delete Pods -n kube-system -l k8s-app=aws-node -
確認所有 Pod 均重新啟動。
kubectl get Pods -n kube-system -l k8s-app=aws-node -
檢視其中一個 Pod 的環境變數。確認
AWS_STS_REGIONAL_ENDPOINTS值是您在上一個步驟中所設定的值。kubectl describe pod aws-node-kzbtr -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS範例輸出如下。
AWS_STS_REGIONAL_ENDPOINTS=regional