使用 EKS Pod 身分目標 IAM 角色存取 AWS 資源 - Amazon EKS

協助改善此頁面

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

若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 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 Identity 會自動依序執行兩個角色假設:先擔任 EKS Pod Identity 角色,然後使用這些登入資料來擔任目標 IAM 角色。此程序為您的 Pod 提供暫時登入資料,該登入資料具有目標角色中定義的許可,允許安全存取其他 AWS 帳戶中的資源。

快取考量

由於快取機制,現有 Pod Identity 關聯中 IAM 角色的更新可能不會在 EKS 叢集上執行的 Pod 中立即生效。Pod Identity Agent 會根據擷取憑證時的關聯組態快取 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 角色

  1. 開啟 Amazon IAM 主控台

  2. 在頂端導覽列中,確認您已登入帳戶,其中包含目標 IAM 角色 AWS 的資源 (例如 S3 儲存貯體或 DynamoDB 資料表)。

  3. 在左側導覽窗格中,選擇 Roles (角色)。

  4. 選擇建立角色按鈕,然後在「可信任實體類型」下 AWS 建立帳戶

  5. 選擇另一個 AWS 帳戶,輸入 AWS 您的帳戶號碼 (EKS Pod 身分角色所在的帳戶),然後選擇下一步

  6. 新增您要與角色建立關聯的許可政策 (例如 AmazonS3FullAccess),然後選擇下一步

  7. 輸入角色名稱,例如 MyCustomIAMTargetRole,然後選擇建立角色

更新目標 IAM 角色信任政策

  1. 建立角色後,您將返回角色清單。尋找並選取您在上一個步驟中建立的新角色 (例如 MyCustomIAMTargetRole)。

  2. 選取信任關係標籤。

  3. 按一下右側的編輯信任政策

  4. 在政策編輯器中,將預設 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:PrincipalTag/eks-cluster-arn": "arn:aws:eks:us-east-1:111122223333:cluster/example-cluster", "aws:PrincipalTag/kubernetes-namespace": "ExampleNameSpace", "aws:PrincipalTag/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 身分也會在擔任目標角色時sts:ExternalId,使用 Pod 的叢集、命名空間和服務帳戶的相關資訊來設定 。

{ "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 Identity 角色的許可政策

在此步驟中,您將新增目標 IAM 角色 ARN 作為資源,以更新與 Amazon EKS 叢集相關聯的 EKS Pod Identity 角色的許可政策。

  1. 開啟 Amazon EKS 主控台

  2. 在左側導覽窗格中,選取叢集,然後選取 EKS 叢集的名稱。

  3. 選擇存取索引標籤。

  4. Pod 身分關聯下,選取您的 EKS Pod 身分角色

  5. 選擇許可新增許可,然後選擇建立內嵌政策

  6. 選擇右側的 JSON

  7. 在政策編輯器中,將預設 JSON 取代為您的許可政策。將角色名稱 和 IAM 角色 ARN 222233334444中的預留位置值取代為您的目標 IAM 角色。例如:

{ "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 服務帳戶建立關聯

在此步驟中,您將在目標 IAM 角色與 EKS 叢集中的 Kubernetes 服務帳戶之間建立關聯。

  1. 開啟 Amazon EKS 主控台

  2. 在左側導覽窗格中,選取叢集,然後選取您要新增關聯的叢集名稱。

  3. 選擇存取索引標籤。

  4. Pod 身分識別關聯中,選擇建立

  5. 為您的工作負載選擇 IAM 角色中的 EKS Pod 身分角色。

  6. 在目標 IAM 角色中選擇將由 EKS Pod Identity 角色擔任的目標 IAM 角色。 https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html

  7. Kubernetes 命名空間欄位中,輸入您要建立關聯的命名空間名稱 (例如 my-app-namespace)。這會定義服務帳戶所在的位置。

  8. Kubernetes 服務帳戶欄位中,輸入將使用 IAM 憑證的服務帳戶名稱 (例如 my-service-account)。這會將 IAM 角色連結至服務帳戶。

  9. 選擇建立以建立關聯。