服務帳戶的 IAM 角色 - Amazon EKS

協助改善此頁面

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

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

服務帳戶的 IAM 角色

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

IAM服務帳戶的角色具有下列優點:

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

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

    注意

    如果啟用了EKSVPC端點,則無法從該端點內部訪問EKSOIDC服務端點VPC。因此,您的操作(例如eksctl在中創建OIDC提供程序)VPC將無法運作,並在嘗試請求時導致超時https://oidc.eks.region.amazonaws.com。以下是範例錯誤訊息:

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

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

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

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

  4. 搭IRSA配使用 AWS SDK— 確認工作負載使用支援 AWS SDK的版本,並確認工作負載使用預設認證鏈結。

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

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

每個JWT令牌由一個簽名 key pair 簽名。金鑰由 Amazon 管理的OIDC供應商提供服務EKS,私鑰每 7 天輪換一次。Amazon EKS 保留公鑰,直到它們過期。如果您連接外部OIDC用戶端,請注意您必須在公開金鑰到期之前重新整理簽署金鑰。了解如何 獲取簽名密鑰以驗證OIDC令牌

Kubernetes長期以來一直使用服務帳戶作為自己的內部識別系統。 Pods可以使用只有KubernetesAPI服務器可以驗證的自動掛載令牌(非 OIDCJWT)與KubernetesAPI服務器進行身份驗證。這些舊的服務帳戶 Token 不會過期,而輪換簽署金鑰是一項困難的程序。Kubernetes 版本 1.12 進一步支援新的 ProjectedServiceAccountToken 功能。此功能是 OIDC JSON Web Token,同時包含服務帳戶身分,並支援可設定的對象。

Amazon 會為每個叢集EKS託管一個公開OIDC探索端點,其中包含 ProjectedServiceAccountToken JSON Web Token 的簽署金鑰,以便外部系統 (例如IAM) 可以驗證和接受由發行的OIDC權杖Kubernetes。