服務帳戶的 IAM 角色 - Amazon EKS

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

服務帳戶的 IAM 角色

Pod 容器中的應用程式可以使用 AWS SDK 或 AWS CLI,以使用 AWS Identity and Access Management (IAM) 許可向 AWS 服務 提出 API 請求。應用程式必須使用 AWS 憑證簽署其 AWS API 請求。服務帳戶的 IAM 角色提供管理應用程式憑證的功能,類似 Amazon EC2 執行個體設定檔將憑證提供給 Amazon EC2 執行個體的方式。您可以將 IAM 角色與 Kubernetes 服務帳戶建立關聯,並設定 Pods 以使用服務帳戶,而不必建立 AWS 憑證並分發至容器,或使用 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. 設定要擔任 IAM 角色的 Kubernetes 服務帳戶 – 對您希望應用程式擁有的每種非重複可組合完成此程序。

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

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

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。

每個 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。