協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的 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 執行個體的方式。與其建立 AWS 登入資料並將其分發至容器或使用 Amazon EC2 執行個體的角色,您可以將 IAM 角色與 Kubernetes 服務帳戶建立關聯,並將 Pod 設定為使用服務帳戶。
每個 EKS Pod 身分識別關聯會將角色對應至指定叢集內命名空間中的服務帳戶。如果您在多個叢集中具有相同的應用程式,則可以在每個叢集中建立相同的關聯,而不必修改角色的信任政策。
如果 Pod 使用具有關聯的服務帳戶,則 Amazon EKS 會在 Pod 的容器中設定環境變數。環境變數會設定 AWS SDKs,包括 AWS CLI,以使用 EKS Pod Identity 憑證。
EKS Pod 身分識別的優勢
EKS Pod 身分識別提供下列優勢:
-
最低權限 – 您可以將 IAM 許可範圍限制為服務帳戶,而且只有使用該服務帳戶的 Pod 可以存取這些許可。有此功能也就不需要第三方解決方案,例如
kiam
或kube2iam
。 -
登入資料隔離 – Pod 的容器只能擷取與容器使用之服務帳戶相關聯的 IAM 角色登入資料。容器永遠無法存取其他 Pod 中其他容器使用的登入資料。使用 Pod 身分時,除非您封鎖 Pod 存取 Amazon EC2 執行個體中繼資料服務 (IMDS)Amazon EKS 節點 IAM 角色,否則 Pod 的容器也具有指派給 的許可。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -
可稽核性 – 可透過 AWS CloudTrail 存取和事件記錄,以協助促進回溯性稽核。
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 身分識別:
-
設定 Amazon EKS Pod Identity Agent— 您只為每個叢集完成此程序一次。如果叢集上已啟用 EKS Auto 模式,則不需要完成此步驟。
-
將 IAM 角色指派給 Kubernetes 服務帳戶— 針對您希望應用程式擁有的每個唯一許可集,完成此程序。
-
設定 Pod 以使用 AWS 服務帳戶存取 服務— 為每個需要存取 AWS 服務的 Pod 完成此程序。
-
搭配 AWS SDK 使用 Pod 身分— 確認工作負載使用支援版本的 AWS SDK,以及工作負載使用預設登入資料鏈。
EKS Pod 身分識別考量
-
您可以將一個 IAM 角色與每個叢集中的每個 Kubernetes 服務帳戶建立關聯。您可以透過編輯 EKS Pod 身分識別關聯來變更對應至服務帳戶的角色。
-
您只能關聯與叢集位於相同 AWS 帳戶中的角色。您可以將存取權從另一個帳戶委派給此帳戶 (您為要使用的 EKS Pod 身分識別所設定) 中的角色。如需委派存取權和 的教學課程
AssumeRole
,請參閱《IAM 使用者指南》中的使用 IAM 角色委派 AWS 帳戶間的存取權。 -
EKS Pod 身分識別代理程式是必要項目。它在您的節點
DaemonSet
上以 Kubernetes 形式執行,並且只會在其執行的節點上提供登入資料給 Pod。如需 EKS Pod 身分識別代理程式相容性的詳細資訊,請參閱下節 EKS Pod 身分識別限制。 -
如果您使用 Pod 的安全群組搭配 Pod Identity Agent,您可能需要設定 AWS VPC CNI 的
POD_SECURITY_GROUP_ENFORCING_MODE
旗標。如需 Pod 考量的安全群組詳細資訊,請參閱 將安全群組指派給個別 Pod。 -
EKS Pod 身分識別代理程式會使用節點的
hostNetwork
,並使用節點上 link-local 地址上的連接埠80
和連接埠2703
。此地址169.254.170.23
適用於 IPv4 和[fd00:ec2::23]
IPv6 叢集。如果您停用
IPv6
地址,或以其他方式防止 localhostIPv6
IP 地址,則代理程式無法啟動。若要在無法使用 的節點上啟動代理程式IPv6
,請依照中的步驟在 EKS Pod Identity Agent IPv6中停用停用IPv6
組態。 -
如果您的 Pod 使用代理,您必須確保在插入 Pod 的
no_proxy
/NO_PROXY
環境變數中169.254.170.23
為 IPv4 和[fd00:ec2::23]
IPv6 新增 。否則,從應用程式 Pod 到eks-pod-identity-agent
DaemonSets 的請求會失敗,因為請求會傳送到代理,而且代理無法路由 IP。
EKS Pod 身分識別叢集版本
若要使用 EKS Pod 身分,叢集的平台版本必須與下表列出的版本相同或更新,或 Kubernetes 版本必須比資料表列出的版本更新。
Kubernetes 版本 | 平台版本 |
---|---|
未列出的 Kubernetes 版本 |
所有平台版本都支援 |
|
|
|
|
|
|
|
|
|
|
EKS Pod 身分識別限制
EKS Pod 身分識別適用於下列情況:
-
上一個主題 EKS Pod 身分識別叢集版本 中列出的 Amazon EKS 叢集版本。
-
叢集中為 Linux Amazon EC2 執行個體的工作節點。
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。