設定服務帳戶的 AWS Security Token Service 端點 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] 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 區域中的「管理」。

必要條件
設定 Kubernetes 服務帳戶使用的端點類型

以下範例均使用由 Amazon VPC CNI 外掛程式所使用的 aws-node Kubernetes 服務帳戶。您可以將 example values 取代為您自己的服務帳戶、Pods、命名空間和其他資源。

  1. 根據您要變更端點的服務帳戶,選取使用該服務帳戶的 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

    AWS 區域

  2. 判斷 Pod's 服務帳戶所使用的端點類型。

    kubectl describe pod aws-node-6mfgv -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS

    範例輸出如下。

    AWS_STS_REGIONAL_ENDPOINTS: regional

    如果目前端點是全域範圍,則輸出中會傳回 global。如果未傳回任何輸出,則預設端點類型正在使用中且未被覆寫。

  3. 如果您的叢集或平台版本與表中列出的版本相同或更高,則可以使用以下命令之一,將服務帳戶使用的端點類型從預設類型變更為其他類型。將 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 的端點。

  4. 刪除並重新建立任何與服務帳戶相關聯的現有 Pods,以套用登入資料環境變數。變動 Webhook 不會將這些變數套用到已在執行中的 Pods。您可以使用所設定標註的 Pods 資訊,來取代 Podskube-system-l k8s-app=aws-node

    kubectl delete Pods -n kube-system -l k8s-app=aws-node
  5. 確認 Pods 全部重新啟動。

    kubectl get Pods -n kube-system -l k8s-app=aws-node
  6. 檢視其中一個 Pods 的環境變數。確認 AWS_STS_REGIONAL_ENDPOINTS 值是您在上一個步驟中所設定的值。

    kubectl describe pod aws-node-kzbtr -n kube-system |grep AWS_STS_REGIONAL_ENDPOINTS

    範例輸出如下。

    AWS_STS_REGIONAL_ENDPOINTS=regional