服務帳戶的 IAM 角色 - Amazon EKS

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

服務帳戶的 IAM 角色

容器中Pod的應用程式可以使用 AWS SDK 或 AWS CLI 向 AWS 服務 使用 AWS Identity and Access Management (IAM) 許可發出 API 請求。應用程式必須使用 AWS 認證簽署其 AWS API 要求。服務帳戶的 IAM 角色提供管理應用程式憑證的功能,類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。您可以將 IAM 角色與服務帳戶建立關聯,並將其設定為使用Kubernetes服務帳戶,而不是建立和分發 AWS 登入資料Pods到容器或使用 Amazon EC2 執行個體的角色。您無法將 IAM 角色用於在 AWS Outposts上具有 Amazon EKS 本機叢集的服務帳戶。

服務帳戶的 IAM 角色提供下列優點:

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

  • 憑證隔離:Pod's 的容器只能擷取與容器所使用服務帳戶相關聯之 IAM 角色的憑證。容器一律無法訪問其他 Pods 中其他容器使用的憑證。當使用服務帳戶的 IAM 角色時,Pod's 容器也會向 Amazon EKS 節點 IAM 角色指派權限,除非您封鎖 Amazon EC2 執行個體中繼資料服務 (IMDS) 對 Pod 的存取權限。如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

  • 稽核性 — 可透過存取和事件記錄, AWS CloudTrail 以協助確保回溯性稽核。

完成下列程序,為服務帳戶啟用 IAM 角色:

  1. 為您的叢集建立 IAM OIDC 提供者 – 對每個叢集只完成此程序一次。

    注意

    如果您啟用 EKS VPC 端點,則無法從該 VPC 內部存取 EKS OIDC 服務端點。因此,您的作業 (例如在 VPC 利用 eksctl 建立 OIDC 提供者) 將無法運作,並且當嘗試請求 https://oidc.eks.region.amazonaws.com 時,會導致逾時。以下是範例錯誤訊息:

    ** server can't find oidc.eks.region.amazonaws.com: NXDOMAIN

    若要完成此步驟,您可以在 VPC 之外執行命令,例如在連接至網際網路的電腦上 AWS CloudShell 或在連線到網際網路的電腦上執行該命令。

  2. 設定Kubernetes服務帳戶以擔任 IAM 角色 – 對您希望應用程式擁有的每種非重複可組合完成此程序。

  3. 設定Pods為使用服Kubernetes務帳戶— 針對每個需要存取Pod的項目完成此程序 AWS 服務。

  4. 使用支援的 AWS 開發套件— 確認工作負載使用受支援版本的 AWS SDK,並確認工作負載使用預設認證鏈結。

IAM、Kubernetes 和 OpenID Connect (OIDC) 背景資訊

在 2014 年,使用 OpenID Connect (OIDC) AWS Identity and Access Management 新增了對聯合身分的支援。此功能可讓您透過支援的身分識別提供者驗證 AWS API 呼叫,並接收有效的 OIDC JSON Web Token (JWT)。您可以將此權杖傳遞至 AWS STS AssumeRoleWithWebIdentity API 作業,並接收 IAM 臨時角色登入資料。您可以使用這些憑證與任何 AWS 服務互動,例如 Amazon S3 和 DynamoDB。

每個 JWT 權杖均由一個簽署金鑰對簽署。這些金鑰是由 Amazon EKS 管理的 OIDC 供應商提供服務,且私有金鑰每 7 天就會輪換一次。Amazon EKS 會保留公有金鑰,直到它們過期為止。如果您連接外部 OIDC 用戶端,請注意,您需要在公開金鑰到期之前重新整理簽署金鑰。了解如何 擷取簽署金鑰

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。