服務帳戶的 IAM 角色
pod 容器中的應用程式可以使用 AWS SDK 或 AWS CLI,以使用 AWS Identity and Access Management (IAM) 許可向 AWS 服務 提出 API 請求。應用程式必須使用 AWS 憑證簽署其 AWS API 請求。服務帳戶的 IAM 角色提供管理應用程式憑證的功能,類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。您可以將 IAM 角色與 Kubernetes 服務帳戶建立關聯,並設定 Pod 以使用服務帳戶,而不必建立 AWS 憑證並分發至容器,或使用 Amazon EC2 執行個體的角色。您無法將 IAM 角色用於在 AWS Outposts 上具有 Amazon EKS 本機叢集的服務帳戶。
服務帳戶的 IAM 角色提供下列優點:
-
最低權限 – 您可以將 IAM 許可範圍限定為服務帳戶,只有使用該服務帳戶的 pods 才能存取這些許可。有此功能也就不需要第三方解決方案,例如
kiam
或kube2iam
。 -
憑證隔離 – Pod 的容器只能擷取與容器所使用服務帳戶相關聯之 IAM 角色的憑證。容器一律無法訪問其他 pods 中其他容器使用的憑證。使用服務帳戶的 IAM角色時,pod's 容器也會將許可指派給 Amazon EKS 節點 IAM 角色,除非您禁止 pod 存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -
可稽核性 – 可透過 AWS CloudTrail 取得存取和事件記錄,以確保回顧稽核。
完成下列程序,為服務帳戶啟用 IAM 角色:
-
為叢集建立 IAM OIDC 供應商 – 對每個叢集只完成此程序一次。
-
設定要擔任 IAM 角色的 Kubernetes 服務帳戶 – 對您希望應用程式擁有的每種非重複可組合完成此程序。
-
設定 Pod 以使用 Kubernetes 服務帳戶 – 對需要存取 AWS 服務的每個 Pod 完成此程序。
IAM、Kubernetes 和 OpenID Connect (OIDC) 背景資訊
2014 年,AWS Identity and Access Management 進一步支援使用 OpenID Connect (OIDC) 的聯合身分。此功能可讓您向支援的身分提供者驗證 AWS API 呼叫,並接收有效的 OIDC JSON Web Token (JWT)。您可以將此字符傳遞給 AWS STS AssumeRoleWithWebIdentity
API 操作,並接收 IAM 臨時角色憑證。您可以使用這些憑證與任何 AWS 服務互動,例如 Amazon S3 和 DynamoDB。
Kubernetes 長期以來一直使用服務帳戶作為本身的內部身分系統。Pods 可以使用只有 Kubernetes API 伺服器才能驗證的自動掛載 Token (非 OIDC JWT) 向 Kubernetes API 伺服器進行驗證。這些舊的服務帳戶 Token 不會過期,而輪換簽署金鑰是一項困難的程序。Kubernetes 版本 1.12
進一步支援新的 ProjectedServiceAccountToken
功能。此功能是 OIDC JSON Web Token,同時包含服務帳戶身分,並支援可設定的對象。
Amazon EKS 為每個叢集託管公有 OIDC 探索端點,其中包含 ProjectedServiceAccountToken
JSON Web Token 的簽署金鑰,讓外部系統 (例如 IAM) 可以驗證和接受 Kubernetes 發出的 OIDC Token。