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

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 VPC CNI 外掛程式所使用的 aws-node Kubernetes 服務帳戶。您可將範例值取代為您自己的服務帳戶、Pod、命名空間和其他資源。

  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

    在先前的輸出中,Pod 在 us-west-2 AWS 區域中的節點上執行。

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

    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 角色來產生在 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 端點。

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

    kubectl delete Pods -n kube-system -l k8s-app=aws-node
  5. 確認所有 Pod 均重新啟動。

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

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

    範例輸出如下。

    AWS_STS_REGIONAL_ENDPOINTS=regional