

 **協助改進此頁面** 

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

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

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

# 了解 EKS Pod 身分識別如何授予 AWS 服務的 Pod 存取權
<a name="pod-identities"></a>

Pod 容器中的應用程式可以使用 AWS SDK 或 AWS CLI，以利用 AWS Identity and Access Management (IAM) 許可向 AWS 服務提出 API 請求。應用程式必須使用 AWS 憑證簽署其 AWS API 請求。

 *EKS Pod 身分識別*提供管理應用程式憑證的功能，類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。您可以將 IAM 角色與 Kubernetes 服務帳戶建立關聯，並設定 Pod 來使用該服務帳戶，而不必建立 AWS 憑證並分發至容器或使用 Amazon EC2 執行個體的角色。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/aUjJSorBE70?rel=0/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/aUjJSorBE70?rel=0)


每個 EKS Pod 身分識別關聯會將角色對應至指定叢集內命名空間中的服務帳戶。如果您在多個叢集中具有相同的應用程式，則可以在每個叢集中建立相同的關聯，而不必修改角色的信任政策。

如果 Pod 使用具有關聯的服務帳戶，則 Amazon EKS 會在 Pod 的容器中設定環境變數。環境變數會將 AWS SDK (包含 AWS CLI) 設定為使用 EKS Pod 身分識別憑證。

## EKS Pod 身分識別的優勢
<a name="pod-id-benefits"></a>

EKS Pod 身分識別提供下列優勢：
+  **最低權限**：您可以將 IAM 許可範圍限定為服務帳戶，只有使用該服務帳戶的 Pod 才能存取這些許可。有此功能也就不需要第三方解決方案，例如 `kiam` 或 `kube2iam`。
+  **憑證隔離**：若 [Amazon EC2 執行個體中繼資料服務 (IMDS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html) 存取權受限，Pod 的容器僅可擷取與容器所用服務帳戶關聯的 IAM 角色憑證。容器一律無法存取其他 Pod 中其他容器使用的憑證。若 IMDS 不受限制，Pod 的容器亦可存取 [Amazon EKS 節點 IAM 角色](create-node-role.md)，且容器或許能存取相同節點上其他 Pod 的 IAM 角色的憑證。如需詳細資訊，請參閱[‬限制存取指派給工作節點的執行個體設定檔‭](https://docs.aws.amazon.com/eks/latest/best-practices/identity-and-access-management.html#_identities_and_credentials_for_eks_pods_recommendations)。

**注意**  
使用 `hostNetwork: true` 設定的 Pod 一律具有 IMDS 存取權，但 AWS SDK 和 CLI 將在啟用時使用 Pod 身分識別憑證。
+  **可稽核性** – 可透過 AWS CloudTrail 取得存取和事件記錄，以促進回顧稽核。

**重要**  
容器並非安全邊界，而且使用 Pod 身分識別亦不會對此有所變更。若 Pod 指派到相同的節點，將會分享核心及可能的其他資源，具體取決於 Pod 組態。儘管執行於單獨節點上的 Pod 將會在運算層隔離，但有些節點應用程式在 Kubernetes API 中擁有超出個別執行個體範圍的額外許可。部分範例包括 `kubelet`、`kube-proxy`、CSI 儲存驅動程式，或者您本人的 Kubernetes 應用程式。

相較於 [服務帳戶的 IAM 角色](iam-roles-for-service-accounts.md)，EKS Pod 身分識別是比較簡單的方法，因為此方法不使用 OIDC 身分識別提供者。EKS Pod 身分識別具有下列增強功能：
+  **獨立運作** – 在許多組織中，建立 OIDC 身分識別提供者和管理 Kubernetes 叢集是不同團隊的責任。EKS Pod 身分識別具有完整的職責分離，其中 EKS Pod 身分識別關聯的所有組態都在 Amazon EKS 中完成，而 IAM 許可的所有組態則都在 IAM 中完成。
+  **可重複使用性** – EKS Pod 身分識別會針對服務帳戶的 IAM 角色使用的每個叢集使用單一 IAM 主體，而不是使用不同的主體。您的 IAM 管理員會將下列主體新增至任何角色的信任政策，以便供 EKS Pod 身分識別使用。

  ```
              "Principal": {
                  "Service": "pods.eks.amazonaws.com"
              }
  ```
+  **可擴展性**：每組臨時憑證由 EKS Pod 身分識別中的 EKS 驗證服務擔任，而不是由您在每個 Pod 中執行的每個 AWS SDK 擔任。然後，在每個節點上執行的 Amazon EKS Pod 身分識別代理程式會向 SDK 發出憑證。因此，每個節點的負載會減少為一次，而且不會在每個 Pod 中重複。如需該程序的詳細資訊，請參閱 [了解 EKS Pod 身分識別的運作方式](pod-id-how-it-works.md)。

如需比較兩種替代方案的詳細資訊，請參閱 [AWS 使用 Kubernetes 服務帳戶授予 Kubernetes 工作負載存取權](service-accounts.md)。

## 設定 EKS Pod 身分識別的概觀
<a name="pod-id-setup-overview"></a>

完成下列程序以開啟 EKS Pod 身分識別：

1.  [設定 Amazon EKS Pod 身分識別代理程式](pod-id-agent-setup.md)：您對每個叢集只完成此程序一次。若叢集已啟用 EKS 自動模式，則無須完成此步驟。

1.  [指派 IAM 角色至 Kubernetes 服務帳戶](pod-id-association.md)：對您希望應用程式擁有的每種非重複可組合完成此程序。

1.  [設定 Pod 以使用 AWS 服務帳戶存取 服務](pod-id-configure-pods.md)：對需要存取 AWS 服務的每個 Pod 完成此程序。

1.  [將 Pod 身分識別與 AWS SDK 搭配使用](pod-id-minimum-sdk.md)：確認工作負載使用受支援版本的 AWS SDK，並確認工作負載使用預設憑證鏈。

## 限制
<a name="pod-id-limits"></a>
+ 每個叢集可擁有最多 5，000 個 EKS Pod 身分識別關聯，將 IAM 角色映射至 Kubernetes 服務帳戶。

## 考量事項
<a name="pod-id-considerations"></a>
+  **IAM 角色關聯**：叢集中的每項 Kubernetes 服務帳戶可與叢集相同 AWS 帳戶中的一個 IAM 角色關聯。如需變更角色，編輯 EKS Pod 身分識別關聯。針對跨帳戶存取權，使用 IAM 角色向角色委派存取權。如需了解詳細資訊，請參閱 *IAM 使用者指南》*中的[使用 IAM 角色跨 AWS 帳戶委派存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html)。
+  **EKS Pod 身分識別代理程式**：需要 Pod 身分識別代理程式以使用 EKS Pod 身分識別。代理程式以叢集節點上的 Kubernetes `DaemonSet` 執行，僅向相同節點上的 Pod 提供憑證。其使用節點的 `hostNetwork`，佔用連接埠 `80`，以及連結本機位址上 `2703` (若是 IPv4，使用 `169.254.170.23`；若是 IPv6，使用 `[fd00:ec2::23]`)。若 IPv6 在叢集中停用，則為 Pod 身分識別代理程式停用 IPv6。如需了解詳細資訊，請參閱[在 EKS Pod 身分識別代理程式中停用 IPv6](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-agent-config-ipv6.html)。
+  **最終一致性**：EKS Pod 身分識別關聯最終會一致，並在 API 呼叫之後可能會延遲幾秒。請避免在關鍵、高可用性程式碼路徑中建立或更新關聯。取而代之的是，在單獨、不太頻繁的初始化或設定例程中執行這些動作。如需了解詳細資訊，請參閱 *EKS 最佳實務指南*中的[每個 Pod 的安全群組](https://docs.aws.amazon.com/eks/latest/best-practices/sgpp.html)。
+  **代理與安全群組考量**：針對使用代理的 Pod，新增 `169.254.170.23` (IPv4) 與 `[fd00:ec2::23]` (IPv6) 至 `no_proxy/NO_PROXY` 環境變數，以免向 EKS Pod 身分識別代理程式發出的請求失敗。若將 Pod 的安全群組與 AWS VPC CNI 配合使用，則將 `ENABLE_POD_ENI` 標誌設定為 ‘true’，然後並將 `POD_SECURITY_GROUP_ENFORCING_MODE` 標誌設定為 ‘standard’。如需了解詳細資訊，請參閱[將安全群組指派給個別 Pod](https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html)。

### EKS Pod 身分識別叢集版本
<a name="pod-id-cluster-versions"></a>

如需使用 EKS Pod 身分識別，叢集的平台版本必須與下表所列版本相同或更新，或是晚於表格中列出版本的 Kubernetes 版本。如需尋找適用於 Kubernetes 版本的 Amazon EKS Pod 身分識別代理程式建議版本，請參閱 [確認 Amazon EKS 附加元件版本與叢集的相容性](addon-compat.md)。


| Kubernetes 版本 | 平台版本 | 
| --- | --- | 
|  Kubernetes 版本未列出  |  所有平台版本支援  | 
|   `1.28`   |   `eks.4`   | 

### EKS Pod 身分識別限制
<a name="pod-id-restrictions"></a>

EKS Pod 身分識別適用於下列情況：
+ 上一個主題 [EKS Pod 身分識別叢集版本](#pod-id-cluster-versions) 中列出的 Amazon EKS 叢集版本。
+ 叢集中為 Linux Amazon EC2 執行個體的工作節點。

EKS Pod 身分識別不適用於下列情況：
+  AWS Outposts。
+ Amazon EKS Anywhere。
+ 您在 Amazon EC2 上建立和執行的 Kubernetes 叢集。EKS Pod 身分識別元件僅適用於 Amazon EKS。

您無法將 EKS Pod 身分識別與下列項目搭配使用：
+ 在 Linux Amazon EC2 執行個體以外的任何位置執行的 Pod。不支援在 AWS Fargate (Fargate) 上執行的 Linux 和 Windows Pod。不支援在 Windows Amazon EC2 執行個體上執行的 Pod。