協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
服務帳戶的 IAM 角色
Pod 容器中的應用程式可以使用 AWS SDK 或 AWS CLI,使用 AWS Identity and Access Management (IAM) 許可向 AWS 服務提出 API 請求。應用程式必須使用 AWS 登入資料簽署其 AWS API 請求。服務帳戶 (IRSA) 的 IAM 角色可讓您管理應用程式的登入資料,類似於 Amazon EC2 執行個體描述檔提供登入資料給 Amazon EC2 執行個體的方式。與其建立 AWS 登入資料並將其分發至容器或使用 Amazon EC2 執行個體的角色,您可以將 IAM 角色與 Kubernetes 服務帳戶建立關聯,並將 Pod 設定為使用服務帳戶。您無法將 IAM 角色用於具有 Amazon EKS on AWS Outposts 本機叢集的服務帳戶。
服務帳戶的 IAM 角色提供下列優點:
-
最低權限 – 您可以將 IAM 許可範圍限制為服務帳戶,而且只有使用該服務帳戶的 Pod 可以存取這些許可。有此功能也就不需要第三方解決方案,例如
kiam
或kube2iam
。 -
登入資料隔離 – Pod 的容器只能擷取與容器使用之服務帳戶相關聯的 IAM 角色登入資料。容器永遠無法存取其他 Pod 中其他容器使用的登入資料。將 IAM 角色用於服務帳戶時,Pod 的容器也具有指派給 Amazon EKS 節點 IAM 角色的許可,除非您封鎖 Pod 存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 -
可稽核性 – 可透過 AWS CloudTrail 存取和事件記錄,以協助確保回溯性稽核。
完成下列程序,為服務帳戶啟用 IAM 角色:
-
為您的叢集建立 IAM OIDC 提供者 – 您只為每個叢集完成此程序一次。
注意
如果您啟用 EKS VPC 端點,則無法從該 VPC 內部存取 EKS OIDC 服務端點。因此,您的作業 (例如在 VPC 利用
eksctl
建立 OIDC 提供者) 將無法運作,並且當嘗試請求https://oidc.eks
時,會導致逾時。以下是範例錯誤訊息:. region
.amazonaws.com.rproxy.goskope.comserver cant find oidc.eks.region.amazonaws.com: NXDOMAIN
若要完成此步驟,您可以在 VPC 外部執行 命令,例如 in AWS CloudShell 或連接到網際網路的電腦上。或者,您可以在 VPC 中建立分割期限條件式解析程式,例如 Route 53 Resolver,以使用 OIDC 發行者 URL 的不同解析程式,而不是使用 VPC DNS。如需 CoreDNS 中條件式轉送的範例,請參閱 GitHub 上的 Amazon EKS 功能請求
。 -
將 IAM 角色指派給 Kubernetes 服務帳戶 – 針對您希望應用程式擁有的每個唯一許可集,完成此程序。
-
將 Pod 設定為使用 Kubernetes 服務帳戶 – 為每個需要存取 AWS 服務的 Pod 完成此程序。
-
搭配 AWS SDK 使用 IRSA – 確認工作負載使用支援版本的 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 EKS 管理的 OIDC 供應商提供服務,且私有金鑰每 7 天就會輪換一次。Amazon EKS 會保留公有金鑰,直到它們過期為止。如果您連接外部 OIDC 用戶端,請注意,您需要在公有金鑰過期之前重新整理簽署金鑰。了解如何擷取簽署金鑰來驗證 OIDC 權杖。
Kubernetes 長期以來使用服務帳戶作為自己的內部身分系統。Pod 可以使用只有 Kubernetes API 伺服器可以驗證的自動掛載字符 (非 OIDC JWT),向 Kubernetes API 伺服器進行驗證。這些舊版服務帳戶權杖不會過期,而輪換簽署金鑰是困難的程序。在 Kubernetes 版本 中1.12
,已新增對新ProjectedServiceAccountToken
功能的支援。此功能是 OIDC JSON Web 權杖,也包含服務帳戶身分,並支援可設定的對象。
Amazon EKS 會為每個叢集託管公有 OIDC 探索端點,其中包含 ProjectedServiceAccountToken
JSON Web 權杖的簽署金鑰,因此 IAM 等外部系統可以驗證並接受 Kubernetes 發行的 OIDC 權杖。