服務帳戶的 IAM 角色 - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。

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

服務帳戶的 IAM 角色

中的應用程式 Pod的容器可以使用 AWS SDK或 AWS CLI 來API請求 AWS 服務 使用 AWS Identity and Access Management (IAM) 許可。應用程式必須使用 AWS 憑證簽署其 AWS API請求。IAM 服務帳戶的角色提供管理應用程式憑證的功能,類似於 Amazon EC2執行個體設定檔提供憑證給 Amazon EC2執行個體的方式。除了建立 AWS 憑證並將其分發至容器或使用 Amazon EC2執行個體的角色之外,您還可以將IAM角色與 Kubernetes 服務帳戶並設定您的 Pods 來使用服務帳戶。您無法在 上將 IAM 角色用於具有 Amazon 本機叢集的服務帳戶。 EKS AWS Outposts

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

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

  • 憑證隔離 – A Pod's 容器只能擷取與容器使用之服務帳戶相關聯的IAM角色憑證。容器永遠無法存取其他容器在其他 中使用的憑證 Pods。 使用服務帳戶IAM的角色時,Pod's 容器也有指派給 Amazon EKS節點IAM角色 的許可,除非您封鎖 Pod 存取 Amazon EC2 Instance Metadata Service (IMDS)。如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

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

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

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

    注意

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

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

    若要完成此步驟,您可以在 外部執行 命令VPC,例如在 AWS CloudShell 中或連接至網際網路的電腦上執行 命令。或者,您可以在 中建立分割期限條件式解析器VPC,例如 Route 53 Resolver,以使用OIDC發行者的不同解析器URL,而不是VPCDNS使用 。如需 中的條件式轉送範例 CoreDNS,請參閱 上的 Amazon EKS功能請求 GitHub.

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

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

  4. 搭IRSA配使用 AWS SDK – 確認工作負載使用受支援版本的 AWS SDK,以及工作負載使用預設憑證鏈。

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

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

每個JWT權杖都由簽署金鑰對簽署。金鑰由 Amazon 管理的OIDC提供者提供,EKS而私有金鑰每 7 天輪換一次。Amazon 會EKS保留公有金鑰,直到它們過期為止。如果您連接外部OIDC用戶端,請注意,您需要在公有金鑰過期之前重新整理簽署金鑰。了解如何 獲取簽名密鑰以驗證OIDC令牌

Kubernetes 長期使用的服務帳戶作為其自己的內部身分系統。Pods 可以使用 進行身分驗證 Kubernetes API 使用自動掛載權杖 (非OIDC JWT),只有 Kubernetes API 伺服器可以驗證。這些舊的服務帳戶 Token 不會過期,而輪換簽署金鑰是一項困難的程序。In (入) Kubernetes 版本 1.12,已新增對新ProjectedServiceAccountToken功能的支援。此功能是 OIDC JSON Web 權杖也包含服務帳戶身分,並支援可設定的受眾。

Amazon EKS託管公有 OIDC 每個叢集的探索端點,其中包含 的簽署金鑰 ProjectedServiceAccountToken JSON Web 權杖,例如 IAM等外部系統可以驗證和接受 OIDC 由 發行的權杖 Kubernetes.