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

協助改善此頁面

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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

如果您使用的是 Kubernetes 服務帳戶服務帳戶的 IAM 角色,然後,如果您的叢集和平台版本與下表中列出的版本相同或更新,則可以設定服務帳戶使用的 AWS Security Token Service 端點類型。如果您的 Kubernetes 或 平台版本早於資料表中列出的版本,則您的服務帳戶只能使用全域端點。

Kubernetes version 平台版本 預設端點類型
1.31 eks.1 區域性
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 區域。如需詳細資訊,請參閱 IAM 使用者指南中的AWS STS 管理 AWS 區域

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

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

  1. 選取 Pod 使用您要變更端點的服務帳戶。判斷 AWS 區域 Pod 會在 中執行。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 區域中的節點上執行。

  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 角色 在 中執行的應用程式URLs中產生預先簽署的 S3 Pods' 容器,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

      如果您使用 在 中執行的應用程式URLs中服務帳戶的 IAM 角色產生預先簽署的 S3 Pods' 容器,URL全域端點的 格式類似於下列範例:

      https://bucket.s3.amazonaws.com/path?...&X-Amz-Credential=your-access-key-id/date/us-west-2/s3/aws4_request&...

    如果您的自動化預期預先簽署的 URL會以特定格式呈現,或者如果使用預先簽署的應用程式或下游相依性對 AWS 區域 目標URLs具有預期,則進行必要的變更,以使用適當的 AWS STS 端點。

  4. 刪除並重新建立任何現有的 Pods 與服務帳戶相關聯的 ,以套用憑證環境變數。靜音 Web 掛鉤不適用於 Pods 已在執行。您可以使用 -l k8s-app=aws-node的資訊取代 Podskube-system、 和 Pods 您為 設定註釋。

    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