了解 EKS Pod Identity 如何授予 Pod 對 AWS 服務的存取權 - Amazon EKS

協助改善此頁面

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

若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。

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

了解 EKS Pod Identity 如何授予 Pod 對 AWS 服務的存取權

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 執行個體的 角色。

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

如果 Pod 使用具有關聯的服務帳戶,則 Amazon EKS 會在 Pod 的容器中設定環境變數。環境變數設定 AWS SDKs,包括 AWS CLI,以使用 EKS Pod Identity 憑證。

EKS Pod 身分識別的優勢

EKS Pod 身分識別提供下列優勢:

  • 最低權限 – 您可以將 IAM 許可範圍限定為服務帳戶,而且只有使用該服務帳戶的 Pod 才能存取這些許可。有此功能也就不需要第三方解決方案,例如 kiamkube2iam

  • 登入資料隔離 – 當對 Amazon EC2 執行個體中繼資料服務 (IMDS) 的存取受到限制時,Pod 的容器只能擷取與容器使用之服務帳戶相關聯的 IAM 角色登入資料。容器永遠無法存取其他 Pod 中其他容器使用的登入資料。如果 IMDS 未受到限制,Pod 的容器也可以存取 Amazon EKS 節點 IAM 角色,而且容器可能可以存取相同節點上其他 Pod 的 IAM 角色憑證。如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

注意

使用 設定的 Pod hostNetwork: true一律具有 IMDS 存取權,但啟用時, AWS SDKs 和 CLI 將使用 Pod Identity 登入資料。

  • 稽核性 – 可透過 AWS CloudTrail 存取和事件記錄,以協助促進回溯性稽核。

重要

容器不是安全界限,使用 Pod Identity 不會變更此限制。指派給相同節點的 Pod 將共用核心和可能的其他資源,具體取決於您的 Pod 組態。雖然在個別節點上執行的 Pod 會在運算層隔離,但有些節點應用程式在 Kubernetes API 中具有超出個別執行個體範圍的額外許可。一些範例包括 kubeletkube-proxy、CSI 儲存驅動程式或您自己的 Kubernetes 應用程式。

EKS Pod Identity 比 更簡單服務帳戶的 IAM 角色,因為此方法不使用 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 Identity 中的 EKS Auth 服務會擔任每組臨時登入資料,而不是您在每個 Pod 中執行的每個 AWS SDK。然後,在每個節點上執行的 Amazon EKS Pod 身分識別代理程式會向 SDK 發出憑證。因此,每個節點的負載會減少為一次,而且不會在每個 Pod 中重複。如需該程序的詳細資訊,請參閱 了解 EKS Pod Identity 的運作方式

如需比較兩種替代方案的詳細資訊,請參閱 AWS 使用 Kubernetes 服務帳戶授予 Kubernetes 工作負載存取權

設定 EKS Pod 身分識別的概觀

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

  1. 設定 Amazon EKS Pod Identity Agent— 您只為每個叢集完成此程序一次。如果您的叢集上已啟用 EKS Auto Mode,則不需要完成此步驟。

  2. 將 IAM 角色指派給 Kubernetes 服務帳戶— 針對您希望應用程式擁有的每個唯一許可集,完成此程序。

  3. 設定 Pod 以使用 AWS 服務帳戶存取 服務— 為每個需要存取 AWS 服務的 Pod 完成此程序。

  4. 搭配 AWS SDK 使用 Pod 身分— 確認工作負載使用支援版本的 AWS SDK,以及工作負載使用預設登入資料鏈。

限制

  • 每個叢集最多支援 5,000 個 EKS Pod 身分關聯,以將 IAM 角色映射至 Kubernetes 服務帳戶。

考量事項

  • IAM 角色關聯:叢集中的每個 Kubernetes 服務帳戶都可以與叢集相同 AWS 帳戶中的一個 IAM 角色建立關聯。若要變更角色,請編輯 EKS Pod Identity 關聯。對於跨帳戶存取,請使用 IAM 角色將存取權委派給角色。若要進一步了解,請參閱《IAM 使用者指南》中的使用 IAM 角色在 AWS 帳戶之間委派存取權

  • EKS Pod Identity Agent:使用 EKS Pod Identity 需要 Pod Identity Agent。代理程式在叢集節點DaemonSet上做為 Kubernetes 執行,僅提供登入資料給相同節點上的 Pod。它使用節點的 hostNetwork、佔用連接埠80和連結本機地址 2703 (169.254.170.23適用於 IPv4、[fd00:ec2::23]適用於 IPv6)。如果您的叢集中已停用 IPv6,請停用 Pod Identity Agent 的 IPv6。若要進一步了解,請參閱 EKS Pod Identity Agent 中的停用 IPv6

  • 最終一致性:EKS Pod 身分關聯最終一致,在 API 呼叫後可能延遲數秒。避免在關鍵、高可用性的程式碼路徑中建立或更新關聯。反之,請在個別、較不頻繁的初始化或設定常式中執行這些動作。若要進一步了解,請參閱《EKS 最佳實務指南》中的每個 Pod 的安全群組

  • Proxy 和安全群組考量:對於使用 Proxy 的 Pod,請將 169.254.170.23(IPv4) 和 [fd00:ec2::23](IPv6) 新增至no_proxy/NO_PROXY環境變數,以防止對 EKS Pod Identity Agent 的請求失敗。如果搭配 AWS VPC CNI 使用 Pod 的安全群組,請將 ENABLE_POD_ENI旗標設為「true」,並將 POD_SECURITY_GROUP_ENFORCING_MODE旗標設為「standard」。若要進一步了解,請參閱將安全群組指派給個別 Pod

EKS Pod 身分識別叢集版本

若要使用 EKS Pod 身分,叢集的平台版本必須與下表列出的版本相同或更新,或 Kubernetes 版本必須高於表格中列出的版本。若要尋找 Kubernetes 版本的 Amazon EKS Pod Identity Agent 建議版本,請參閱 驗證 Amazon EKS 附加元件版本與叢集的相容性

Kubernetes 版本 平台版本

未列出的 Kubernetes 版本

所有平台版本都支援

1.28

eks.4

1.27

eks.8

1.26

eks.9

EKS Pod 身分識別限制

EKS Pod 身分識別適用於下列情況:

EKS Pod 身分不適用於下列項目:

  • AWS Outpost。

  • 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。