協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定服務帳戶的 AWS Security Token Service 端點
如果您在搭配使用Kubernetes服務帳戶服務帳戶的 IAM 角色,則可以設定服務帳戶所使用的 AWS Security Token Service 端點類型 (如果叢集和平台版本與下表所列版本相同或更新)。如果您的 Kubernetes 或平台版本早於表中列出的版本,則服務帳戶只能使用全域端點。
Kubernetes 版本 | 平台版本 | 預設端點類型 |
---|---|---|
1.30 |
eks.2 |
區域性 |
1.29 |
eks.1 |
區域性 |
1.28 |
eks.1 |
區域性 |
1.27 |
eks.1 |
區域性 |
1.26 |
eks.1 |
區域性 |
1.25 |
eks.1 |
區域性 |
1.24 |
eks.2 |
區域性 |
1.23 |
eks.1 |
區域性 |
AWS 建議使用區域 AWS STS 端點而非全域端點。這樣可以減少延遲、提供內建備援,並增加工作階段字符的有效性。 AWS Security Token Service 必須在正在執行的 AWS 區域 位置處處於作Pod用中狀態。此外,您的應用程式必須具 AWS 區域 有不同的內建備援,以便在 AWS 區域. 如需詳細資訊,請參閱 AWS STS《IAM 使用者指南》 AWS 區域中的「管理」。
必要條件
-
現有的叢集。如果您沒有,則可以使用其中一個 開始使用 Amazon EKS 指南來建立一個。
-
叢集的現有 IAM OIDC 提供商。如需詳細資訊,請參閱 為您的叢集建立IAMOIDC提供者。
-
現有的 Kubernetes 服務帳戶設定為與服務帳戶的 Amazon EKS IAM 功能搭配使用。
設定 Kubernetes 服務帳戶使用的端點類型
以下範例均使用由 Amazon VPC CNI 外掛程式所使用的 aws-node
Kubernetes 服務帳戶。您可以將
取代為您自己的服務帳戶、Pods、命名空間和其他資源。example values
-
根據您要變更端點的服務帳戶,選取使用該服務帳戶的 Pod。確定Pod運 AWS 區域 行在哪一個。將
取代為 Pod 名稱,並將aws-node-6mfgv
取代為 Pod 的命名空間。kube-system
kubectl describe pod
aws-node-6mfgv
-nkube-system
|grep Node:範例輸出如下。
ip-192-168-79-166.us-west-2/192.168.79.166
AWS 區域
-
判斷 Pod's 服務帳戶所使用的端點類型。
kubectl describe pod
aws-node-6mfgv
-nkube-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 角色 來產生在 Pods 容器中執行的應用程式中的預簽署 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 角色 來產生在 Pods 容器中執行的應用程式中的預簽署 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 的端點。
-
-
刪除並重新建立任何與服務帳戶相關聯的現有 Pods,以套用登入資料環境變數。變動 Webhook 不會將這些變數套用到已在執行中的 Pods。您可以使用所設定標註的 Pods 資訊,來取代
、Pods
和kube-system
。-l k8s-app=aws-node
kubectl delete
Pods
-nkube-system
-l
k8s-app=aws-node
-
確認 Pods 全部重新啟動。
kubectl get
Pods
-nkube-system
-l k8s-app=aws-node
-
檢視其中一個 Pods 的環境變數。確認
AWS_STS_REGIONAL_ENDPOINTS
值是您在上一個步驟中所設定的值。kubectl describe pod
aws-node-kzbtr
-nkube-system
|grep AWS_STS_REGIONAL_ENDPOINTS範例輸出如下。
AWS_STS_REGIONAL_ENDPOINTS=
regional