協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 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 資源 (例如 S3 儲存貯體或 DynamoDB 資料表) 帳戶中的目標 IAM 角色。由於 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 身分角色 ARN 且沒有目標 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。例如:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws: iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws: iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }
更新 EKS Pod Identity 角色的許可政策
在此步驟中,您將新增目標 IAM 角色 ARN 做為資源,以更新與 Amazon EKS 叢集相關聯的 EKS Pod 身分角色的許可政策。
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取 EKS 叢集的名稱。
-
選擇存取索引標籤。
-
在 Pod 身分關聯下,選取您的 EKS Pod 身分角色。
-
選擇許可、新增許可,然後選擇建立內嵌政策。
-
選擇右側的 JSON。
-
在政策編輯器中,將預設 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 服務帳戶之間建立關聯。
-
開啟 Amazon EKS 主控台
。 -
在左側導覽窗格中,選取叢集,然後選取您要新增關聯的叢集名稱。
-
選擇存取索引標籤。
-
在 Pod 身分識別關聯中,選擇建立。
-
為您的工作負載選擇 IAM 角色中的 EKS Pod 身分角色。
-
在目標 IAM 角色中選擇將由 EKS Pod Identity 角色擔任的目標 IAM 角色。 https://docs.aws.amazon.com/eks/latest/userguide/pod-id-role.html
-
在 Kubernetes 命名空間欄位中,輸入您要建立關聯的命名空間名稱 (例如
my-app-namespace
)。這會定義服務帳戶所在的位置。 -
在 Kubernetes 服務帳戶欄位中,輸入將使用 IAM 憑證的服務帳戶名稱 (例如
my-service-account
)。這會將 IAM 角色連結至服務帳戶。 -
選擇建立以建立關聯。
(選用) 步驟 3:將外部許可新增至 IAM 目標角色
有時,您可能需要讓第三方存取您的 AWS 資源 (委派存取權)。例如,您決定聘請名為 Example Corp 的第三方公司來監控 AWS 您的帳戶,並協助最佳化成本。為了追蹤您的每日花費,Example Corp 需要存取您的 AWS 資源。在此情況下,建議您將 ExternalId
新增至 IAM 目標角色的信任政策,以避免可能的混淆代理人問題。
編輯信任政策
-
建立角色後,您將返回角色清單。尋找並按一下您在上一個步驟中建立的新角色 (例如
MyCustomIAMTargetRole
)。 -
選取信任關係標籤。
-
按一下右側的編輯信任政策。
-
在政策編輯器中,將預設 JSON 取代為您的信任政策。取代 的
ExternalId
預留位置值aws-region/other-account/cluster-name/namespace/service-account-name
,其中 "region" 是叢集 AWS 的區域,"111122223333" 是另一個 AWS 帳戶 ID,"cluster-name" 是 EKS 叢集名稱,"namespace" 是 Kubernetes 命名空間,而 "service-account-name" 是 Kubernetes 服務帳戶名稱。例如:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws: iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "region/111122223333/cluster-name/namespace/service-account-name" } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws: iam::111122223333:role/eks-pod-identity-primary-role" }, "Action": "sts:TagSession" } ] }