指派 IAM 角色至 Kubernetes 服務帳戶 - Amazon EKS

協助改善此頁面

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

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

指派 IAM 角色至 Kubernetes 服務帳戶

本主題說明如何設定 Kubernetes 使用 Pod Identity 擔任 AWS Identity and Access Management (IAM) EKS 角色的服務帳戶。任何 Pods 設定為使用服務帳戶,然後可以存取角色具有存取許可的任何 AWS 服務 。

若要建立 EKS Pod Identity 關聯,只有一個步驟;您可以透過 AWS CLI AWS Management Console、 AWS SDKs AWS CloudFormation 和其他工具EKS在 中建立關聯。在任何 中,叢集內沒有任何關聯的資料或中繼資料 Kubernetes 物件,而且您不會將任何註釋新增至服務帳戶。

必要條件
  • 現有的叢集。如果您沒有,則可以按照其中一個 開始使用 Amazon EKS指南來建立。

  • 建立關聯的IAM主體必須具有 iam:PassRole

  • 在您的裝置或 上安裝 AWS CLI 和設定的 最新版本 AWS CloudShell。您可以使用 aws --version | cut -d / -f2 | cut -d ' ' -f1 來檢查您的目前版本。套件管理員yum,例如 apt-get、 或 Homebrew for macOS 通常是最新版本 後面的幾個版本 AWS CLI。若要安裝最新版本,請參閱 AWS Command Line Interface 使用者指南中的安裝、更新和解除安裝 AWS CLI 和 快速組態aws configure。中安裝的 AWS CLI 版本 AWS CloudShell 也可能是最新版本後面的幾個版本。若要更新它,請參閱 AWS CloudShell 使用者指南中的安裝 AWS CLI 到您的主目錄

  • 已在裝置或 AWS CloudShell上安裝 kubectl 命令列工具。版本可與 相同,或最多可以比 更早或更晚的一個次要版本 Kubernetes 叢集的版本。例如,如果您的叢集版本為 1.30,則可以搭配使用 kubectl 1.291.301.31 版。若要安裝或升級 kubectl,請參閱 設定 kubectl 和 eksctl

  • 包含叢集組態的現有 kubectl config 檔案。若要建立 kubectl config 檔案,請參閱連接 kubectl EKS 透過建立 kubeconfig file

建立 EKS Pod Identity 關聯

AWS Management Console
  1. 開啟位於 https://console.aws.amazon.com/eks/home#/clusters 的 Amazon EKS主控台。

  2. 在左側導覽窗格中,選取叢集 ,然後選取您要設定 EKS Pod Identity Agent 附加元件的叢集名稱。

  3. 選擇存取索引標籤。

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

  5. 針對IAM角色 ,選取具有您希望工作負載擁有之許可IAM的角色。

    注意

    此清單僅包含具有下列信任政策的角色,允許 Pod Identity EKS 使用它們。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
    sts:AssumeRole

    EKS Pod Identity 使用 AssumeRole 擔任IAM角色,然後再將臨時憑證傳遞至您的 Pod。

    sts:TagSession

    EKS Pod Identity 使用 TagSession工作階段標籤包含在對 的請求中 AWS STS。

    您可以在 中使用這些標籤 condition keys 以限制哪些服務帳戶、命名空間和叢集可以使用此角色。

    如需 Amazon EKS條件索引鍵的清單,請參閱服務授權參考 中的 Amazon Elastic Kubernetes Service 定義的條件。若要了解您可以搭配哪些動作和資源使用條件索引鍵,請參閱 Amazon Elastic Kubernetes Service 定義的動作

  6. 對於 Kubernetes 命名空間 ,選取 Kubernetes 包含服務帳戶和工作負載的命名空間。或者,您可以使用名稱 (不存在於叢集中) 指定命名空間。

  7. 對於 Kubernetes 服務帳戶 ,選取 Kubernetes 要使用的服務帳戶。您的 清單 Kubernetes 工作負載必須指定此服務帳戶。或者,您可以使用名稱 (不存在於叢集中) 指定服務帳戶。

  8. (選用) 對於標籤,請選擇新增標籤,以在鍵值對中新增中繼資料。這些標籤會套用至關聯,並可用於IAM政策。

    您可以多次重複此步驟以新增多個標籤。

  9. 選擇 Create (建立)。

AWS CLI
  1. 如果您想要將現有IAM政策與IAM角色建立關聯,請跳至下一個步驟。

    建立IAM政策。您可以建立自己的政策,或複製已授予您所需的某些許可的 AWS 受管政策,並根據您的特定要求加以自訂。如需詳細資訊,請參閱 IAM 使用者指南 中的建立IAM政策

    1. 建立包含您想要 之 AWS 服務 許可的檔案 Pods 以存取。如需所有 的所有動作清單 AWS 服務,請參閱服務授權參考

      您可以執行以下命令來建立允許唯讀存取 Amazon S3 儲存貯體的範例政策檔案。您可以選擇性地將組態資訊或引導指令碼存放在此儲存貯體中,並將容器存放在 Pod 可以從儲存貯體讀取檔案,並將其載入您的應用程式。如果您要建立此範例政策,請將以下內容複製到您的裝置。Replace (取代) my-pod-secrets-bucket 並執行 命令。

      cat >my-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] } EOF
    2. 建立IAM政策。

      aws iam create-policy --policy-name my-policy --policy-document file://my-policy.json
  2. 建立IAM角色並將其與 建立關聯 Kubernetes 服務帳戶。

    1. 如果您有現有的 Kubernetes 您要擔任IAM角色的服務帳戶,然後您可以略過此步驟。

      建立 Kubernetes 服務帳戶。將以下內容複製到您的裝置。Replace (取代) my-service-account 使用您想要的名稱和 default 使用不同的命名空間。如果您變更 default,命名空間必須已經存在。

      cat >my-service-account.yaml <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: my-service-account namespace: default EOF kubectl apply -f my-service-account.yaml

      執行下列命令。

      kubectl apply -f my-service-account.yaml
    2. 執行下列命令來建立IAM角色的信任政策檔案。

      cat >trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } EOF
    3. 建立角色。my-role 將 取代為IAM角色的名稱,並將 my-role-description 取代為角色的描述。

      aws iam create-role --role-name my-role --assume-role-policy-document file://trust-relationship.json --description "my-role-description"
    4. 將IAM政策連接至您的角色。my-role 將 取代為您IAM角色的名稱,並將 my-policy取代為您建立的現有政策的名稱。

      aws iam attach-role-policy --role-name my-role --policy-arn=arn:aws:iam::111122223333:policy/my-policy
      注意

      與服務帳戶IAM的角色不同,Pod Identity EKS 不會在服務帳戶上使用註釋。

    5. 執行下列命令以建立關聯。my-cluster 以叢集的名稱取代,取代 my-service-account 使用您想要的名稱和 default 使用不同的命名空間。

      aws eks create-pod-identity-association --cluster-name my-cluster --role-arn arn:aws:iam::111122223333:role/my-role --namespace default --service-account my-service-account

      範例輸出如下。

      { "association": { "clusterName": "my-cluster", "namespace": "default", "serviceAccount": "my-service-account", "roleArn": "arn:aws:iam::111122223333:role/my-role", "associationArn": "arn:aws::111122223333:podidentityassociation/my-cluster/a-abcdefghijklmnop1", "associationId": "a-abcdefghijklmnop1", "tags": {}, "createdAt": 1700862734.922, "modifiedAt": 1700862734.922 } }
      注意

      您可以使用名稱 (不存在於叢集中) 指定命名空間和服務帳戶。您必須建立使用服務帳戶的命名空間、服務帳戶和工作負載,Pod Identity EKS 關聯才能運作。

>確認組態

確認角色和服務帳戶設定正確。
  1. 確認IAM角色的信任政策設定正確。

    aws iam get-role --role-name my-role --query Role.AssumeRolePolicyDocument

    範例輸出如下。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow EKS Auth service to assume this role for Pod Identities", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] }
  2. 確認您在上一步連接至角色的政策已連接至該角色。

    aws iam list-attached-role-policies --role-name my-role --query AttachedPolicies[].PolicyArn --output text

    範例輸出如下。

    arn:aws:iam::111122223333:policy/my-policy
  3. 設定變數以存放您要使用的 政策的 Amazon Resource Name (ARN)。Replace (取代) my-policy 您想要確認許可的政策名稱。

    export policy_arn=arn:aws:iam::111122223333:policy/my-policy
  4. 檢視預設政策版本。

    aws iam get-policy --policy-arn $policy_arn

    範例輸出如下。

    { "Policy": { "PolicyName": "my-policy", "PolicyId": "EXAMPLEBIOWGLDEXAMPLE", "Arn": "arn:aws:iam::111122223333:policy/my-policy", "Path": "/", "DefaultVersionId": "v1", [...] } }
  5. 檢視政策內容,以確保政策包含您 Pod 需求。如有必要,請取代 1 在下列命令中,使用上一個輸出中傳回的版本。

    aws iam get-policy-version --policy-arn $policy_arn --version-id v1

    範例輸出如下。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-pod-secrets-bucket" } ] }

    如果您在上一步建立了範例政策,則輸出結果相同。如果您建立了不同的政策,則 example 內容不同。

下一步驟

設定 pods 使用 AWS 服務帳戶存取 服務