協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 EKS Pod 身分目標 IAM 角色存取 AWS 資源
在 Amazon Elastic Kubernetes Service (Amazon EKS) 上執行應用程式時,您可能需要存取存在於不同 AWS 帳戶中 AWS 的資源。本指南說明如何使用 EKS Pod Identity 設定跨帳戶存取,這可讓您的 Kubernetes Pod 使用目標角色存取其他 AWS 資源。
先決條件
開始之前,請確保您已完成下列步驟:
運作方式
Pod Identity 可讓 EKS 叢集中的應用程式透過稱為角色鏈結的程序跨帳戶存取 AWS 資源。
建立 Pod Identity 關聯時,您可以提供兩個 IAM 角色:與 EKS 叢集位於相同帳戶中的 EKS Pod Identity 角色,以及包含您要存取 AWS 之資源的帳戶的目標 IAM 角色 (例如 S3 儲存貯體或 RDS 資料庫)。由於 IAM PassRole 需求,EKS Pod 身分角色必須位於 EKS 叢集的帳戶中,而目標 IAM 角色可以位於任何 AWS 帳戶中。PassRole 可讓 AWS 實體將角色擔任委派給其他服務。EKS Pod Identity 使用 PassRole 將角色連線至 Kubernetes 服務帳戶,要求角色和傳遞該角色的身分都與 EKS 叢集位於相同的 AWS 帳戶中。當您的應用程式 Pod 需要存取 AWS 資源時,它會向 Pod Identity 請求登入資料。Pod 身分識別隨後可自動依序執行兩項角色擔任:首先擔任 EKS Pod 身分識別角色,然後使用這些憑證來擔任目標 IAM 角色。此程序為您的 Pod 提供暫時登入資料,該登入資料具有目標角色中定義的許可,允許安全存取其他 AWS 帳戶中的資源。
快取考量
由於採用快取機制,對現有 Pod 身分識別關聯中 IAM 角色更新,可能不會在 EKS 叢集上執行的 Pod 中立即生效。Pod 身分識別代理程式可依據擷取憑證時關聯的組態來快取 IAM 憑證。若關聯僅包括 EKS Pod 身分識別角色,而不含目標 IAM 角色,快取憑證則可持續 6 小時。若關聯包括 EKS Pod 身分識別角色 ARN 與目標 IAM 角色,快取憑證則可持續 59 分鐘。修改現有關聯,如更新 EKS Pod 身分識別角色 ARN 或新增目標 IAM 角色,不會對現有快取進行重設。因此,代理程式不會識別更新,直至快取憑證資料重新整理。如需加速套用變更,您可重新建立現有 Pod;否則,您將需要等候快取到期。
步驟 1:建立目標 IAM 角色並與之關聯
在此步驟中,您將建立並設定目標 IAM 角色,藉此來建立安全的信任鏈。為了示範,我們將建立新的目標 IAM 角色,以在兩個 AWS 帳戶之間建立信任鏈:EKS 叢集帳戶中的 EKS Pod 身分角色 (例如 eks-pod-identity-primary-role) 取得在您的目標帳戶中擔任目標 IAM 角色 (例如 eks-pod-identity-aws-resources) 的許可,以允許存取 Amazon S3 儲存貯體等 AWS 資源。 AWS
建立目標 IAM 角色
-
開啟 Amazon IAM 主控台
。 -
在頂端導覽列中,確認您已登入帳戶,其中包含目標 IAM 角色 AWS 的資源 (例如 S3 儲存貯體或 DynamoDB 資料表)。
-
在左側導覽窗格中,選擇 Roles (角色)。
-
選擇建立角色按鈕,然後選擇「可信任實體類型」下的 AWS 帳戶。
-
選擇另一個 AWS 帳戶,輸入您的 AWS 帳號 (EKS Pod 身分角色所在的帳戶),然後選擇下一步。
-
新增您想要關聯角色的許可政策 (例如 AmazonS3FullAccess),然後選擇下一步。
-
輸入角色名稱 (例如
MyCustomIAMTargetRole),然後選擇建立角色。
更新目標 IAM 角色信任政策
-
建立角色之後,您將返回到角色清單。尋找並選取您在之前步驟中建立的角色政策 (例如
MyCustomIAMTargetRole)。 -
選取信任關係標籤。
-
點選右側的編輯信任政策。
-
在政策編輯器中,使用您的信任政策來取代預設 JSON。將角色名稱和 IAM 角色 ARN
111122223333中的預留位置值取代為託管 EKS 叢集 AWS 的帳戶 ID。此外,您亦可選擇在角色信任政策中使用 PrincipalTags,以便僅授權指定叢集與命名空間的特定服務帳戶來擔任目標角色。例如:
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Condition": { "StringEquals": { "aws:RequestTag/eks-cluster-arn": "arn:aws:eks:us-east-1:111122223333:cluster/example-cluster", "aws:RequestTag/kubernetes-namespace": "ExampleNameSpace", "aws:RequestTag/kubernetes-service-account": "ExampleServiceAccountName" }, "ArnEquals": { "aws:PrincipalARN": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" } } } ] }
上述政策可讓eks-pod-identeity-primary-role AWS 帳戶 111122223333 中具有相關 EKS Pod Identity Session 標籤的角色擔任此角色。
若您在 EKS Pod 身分識別中停用工作階段標籤,EKS Pod 身分識別亦可在擔任目標角色時,利用 Pod 的叢集、命名空間及服務帳戶相關資訊來設定 sts:ExternalId。
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name" }, "ArnEquals": { "aws:PrincipalARN": "arn:aws:iam::111122223333:role/eks-pod-identity-primary-role" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:TagSession" } ] }
藉助上述政策,可確保僅預期的叢集、命名空間及服務帳戶擔任目標角色。
更新 EKS Pod 身分識別角色的許可政策
在此步驟中,您將新增目標 IAM 角色 ARN 作為資源,藉此來更新與 Amazon EKS 叢集關聯的 EKS Pod 身分識別角色的許可政策。
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取 EKS 叢集的名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯項下,選取 EKS Pod 身分識別角色。
-
依序選擇許可、新增許可、建立內嵌政策。
-
在右側選擇 JSON。
-
在政策編輯器中,使用您的許可政策來取代預設 JSON。使用您的目標 IAM 角色,來取代 IAM 角色 ARN 中的角色名稱及
222233334444的預留位置。例如:
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:TagSession" ], "Resource": "arn:aws:iam::222233334444:role/eks-pod-identity-aws-resources" } ] }
步驟 2:關聯目標 IAM 角色與 Kubernetes 服務帳戶
在此步驟中,您將在 EKS 叢集中的目標 IAM 角色與 Kubernetes 服務帳戶間建立關聯。
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您想要新增關聯的目標叢集的名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯中,選擇建立。
-
針對您想要其擔任角色的工作負載,選擇 IAM 角色中的 EKS Pod 身分識別角色。
-
在目標 IAM 角色中選擇目標 IAM 角色,將由 EKS Pod 身分識別角色擔任。
-
在 Kubernetes 命名空間欄位,輸入您想要建立關聯的命名空間名稱 (例如
my-app-namespace)。這將定義服務帳戶所在的位置。 -
在 Kubernetes 服務帳戶欄位,輸入將會使用 IAM 憑證的服務帳戶名稱 (例如
my-service-account)。這將連結 IAM 角色至服務帳戶。 -
選擇建立可建立關聯。