

 **協助改進此頁面** 

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

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

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

# 了解 EKS Pod 身分識別的運作方式
<a name="pod-id-how-it-works"></a>

Amazon EKS Pod 身分識別關聯提供管理應用程式憑證的功能，類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。

Amazon EKS Pod 身分識別透過其他 *EKS 驗證* API 和在每個節點上執行的代理程式 Pod，為您的工作負載提供憑證。

在您的附加元件中 (例如 *Amazon EKS 附加元件*和自我管理控制器、運算子和其他附加元件)，編寫者需要更新其軟體以使用最新的 AWS SDK。如需 EKS Pod 身分識別與 Amazon EKS 產生的附加元件之間的相容性清單，請參閱上節 [EKS Pod 身分識別限制](pod-identities.md#pod-id-restrictions)。

## 在程式碼中使用 EKS Pod 身分識別
<a name="pod-id-credentials"></a>

在您的程式碼中，您可以使用 AWS SDK 存取 AWS 服務。撰寫程式碼即可使用 SDK 建立 AWS 服務的用戶端，並且依預設，SDK 會在位置鏈中搜尋要使用的 AWS Identity and Access Management 憑證。找到有效的憑證後，系統就會停止搜尋。如需使用預設位置的詳細資訊，請參閱 AWS SDK 和工具參考指南中的[憑證提供者鏈](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)。

EKS Pod 身分識別已新增至*容器憑證提供者*，系統會在預設憑證鏈中的某個步驟搜尋此提供者。如果您的工作負載目前使用憑證鏈中較早的憑證，那麼即使您為相同工作負載設定 EKS Pod 身分識別關聯，系統仍會繼續使用這些憑證。如此一來，您就可以先建立關聯，然後再移除舊憑證，以安全地從其他類型的憑證遷移。

容器憑證提供者會從每個節點上執行的代理程式提供臨時憑證。在 Amazon EKS 中，代理程式為 Amazon EKS Pod 身分識別代理程式，而在 Amazon Elastic Container Service 上，代理程式則為 `amazon-ecs-agent`。SDK 使用環境變數來尋找要連線的代理程式。

相對來說，*服務帳戶的 IAM 角色*會透過使用 `AssumeRoleWithWebIdentity` 的方式，提供 AWS SDK 必須與 AWS 安全記號化服務交換的 *Web 身分*記號。

## EKS Pod 身分識別代理程式如何搭配 Pod 使用
<a name="pod-id-agent-pod"></a>

1. 當 Amazon EKS 啟動使用具有 EKS Pod 身分識別關聯之服務帳戶的全新 Pod 時，叢集會將下列內容新增至 Pod 資訊清單：

   ```
       env:
       - name: AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE
         value: "/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token"
       - name: AWS_CONTAINER_CREDENTIALS_FULL_URI
         value: "http://169.254.170.23/v1/credentials"
       volumeMounts:
       - mountPath: "/var/run/secrets/pods.eks.amazonaws.com/serviceaccount/"
         name: eks-pod-identity-token
     volumes:
     - name: eks-pod-identity-token
       projected:
         defaultMode: 420
         sources:
         - serviceAccountToken:
             audience: pods.eks.amazonaws.com
             expirationSeconds: 86400 # 24 hours
             path: eks-pod-identity-token
   ```

1. Kubernetes 會選取要在哪個節點上執行 Pod。然後，節點上的 Amazon EKS Pod 身分識別代理程式會使用 [AssumeRoleForPodIdentity](https://docs.aws.amazon.com/eks/latest/APIReference/API_auth_AssumeRoleForPodIdentity.html) 動作以從 EKS 驗證 API 擷取臨時憑證。

1. EKS Pod 身分識別代理程式可讓您在容器內執行的 AWS SDK 使用這些憑證。

1. 您可以在應用程式中使用 SDK，無需指定憑證提供者來使用預設憑證鏈。或者，您可以指定容器憑證提供者。如需使用預設位置的詳細資訊，請參閱 AWS SDK 和工具參考指南中的[憑證提供者鏈](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)。

1. SDK 會使用環境變數來連線至 EKS Pod 身分識別代理程式，並擷取憑證。
**注意**  
如果您的工作負載目前使用憑證鏈中較早的憑證，那麼即使您為相同工作負載設定 EKS Pod 身分識別關聯，系統仍會繼續使用這些憑證。