協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
了解 EKS Pod 身分識別如何授予 AWS 服務的 Pod 存取權
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 SDK (包含 AWS CLI) 設定為使用 EKS Pod 身分識別憑證。
EKS Pod 身分識別的優勢
EKS Pod 身分識別提供下列優勢:
-
最低權限:您可以將 IAM 許可範圍限定為服務帳戶,只有使用該服務帳戶的 Pod 才能存取這些許可。有此功能也就不需要第三方解決方案,例如
kiam或kube2iam。 -
憑證隔離:若 Amazon EC2 執行個體中繼資料服務 (IMDS) 存取權受限,Pod 的容器僅可擷取與容器所用服務帳戶關聯的 IAM 角色憑證。容器一律無法存取其他 Pod 中其他容器使用的憑證。若 IMDS 不受限制,Pod 的容器亦可存取 Amazon EKS 節點 IAM 角色,且容器或許能存取相同節點上其他 Pod 的 IAM 角色的憑證。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔。
注意
使用 hostNetwork: true 設定的 Pod 一律具有 IMDS 存取權,但 AWS SDK 和 CLI 將在啟用時使用 Pod 身分識別憑證。
-
可稽核性 – 可透過 AWS CloudTrail 取得存取和事件記錄,以促進回顧稽核。
重要
容器並非安全邊界,而且使用 Pod 身分識別亦不會對此有所變更。若 Pod 指派到相同的節點,將會分享核心及可能的其他資源,具體取決於 Pod 組態。儘管執行於單獨節點上的 Pod 將會在運算層隔離,但有些節點應用程式在 Kubernetes API 中擁有超出個別執行個體範圍的額外許可。部分範例包括 kubelet、kube-proxy、CSI 儲存驅動程式,或者您本人的 Kubernetes 應用程式。
相較於 服務帳戶的 IAM 角色,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 身分識別的運作方式。
如需比較兩種替代方案的詳細資訊,請參閱 藉助 Kubernetes 服務帳戶向 AWS 授予 Kubernetes 工作負載存取權。
設定 EKS Pod 身分識別的概觀
完成下列程序以開啟 EKS Pod 身分識別:
-
設定 Amazon EKS Pod 身分識別代理程式:您對每個叢集只完成此程序一次。若叢集已啟用 EKS 自動模式,則無須完成此步驟。
-
指派 IAM 角色至 Kubernetes 服務帳戶:對您希望應用程式擁有的每種非重複可組合完成此程序。
-
設定 Pod 透過服務帳戶來存取 AWS 服務:對需要存取 AWS 服務的每個 Pod 完成此程序。
-
將 Pod 身分識別與 AWS SDK 搭配使用:確認工作負載使用受支援版本的 AWS SDK,並確認工作負載使用預設憑證鏈。
限制
-
每個叢集可擁有最多 5,000 個 EKS Pod 身分識別關聯,將 IAM 角色映射至 Kubernetes 服務帳戶。
考量事項
-
IAM 角色關聯:叢集中的每項 Kubernetes 服務帳戶可與叢集相同 AWS 帳戶中的一個 IAM 角色關聯。如需變更角色,編輯 EKS Pod 身分識別關聯。針對跨帳戶存取權,使用 IAM 角色向角色委派存取權。如需了解詳細資訊,請參閱 IAM 使用者指南》中的使用 IAM 角色跨 AWS 帳戶委派存取。
-
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。 -
最終一致性:EKS Pod 身分識別關聯最終會一致,並在 API 呼叫之後可能會延遲幾秒。請避免在關鍵、高可用性程式碼路徑中建立或更新關聯。取而代之的是,在單獨、不太頻繁的初始化或設定例程中執行這些動作。如需了解詳細資訊,請參閱 EKS 最佳實務指南中的每個 Pod 的安全群組。
-
代理與安全群組考量:針對使用代理的 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。
EKS Pod 身分識別叢集版本
如需使用 EKS Pod 身分識別,叢集的平台版本必須與下表所列版本相同或更新,或是晚於表格中列出版本的 Kubernetes 版本。如需尋找適用於 Kubernetes 版本的 Amazon EKS Pod 身分識別代理程式建議版本,請參閱 確認 Amazon EKS 附加元件版本與叢集的相容性。
| Kubernetes 版本 | 平台版本 |
|---|---|
|
Kubernetes 版本未列出 |
所有平台版本支援 |
|
|
|
EKS Pod 身分識別限制
EKS Pod 身分識別適用於下列情況:
-
上一個主題 EKS Pod 身分識別叢集版本 中列出的 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。