建立 Amazon EBS CSI 驅動程式 IAM 角色 - Amazon EKS

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

建立 Amazon EBS CSI 驅動程式 IAM 角色

Amazon EBS CSI 外掛程式需要 IAM 許可,才能代表您呼叫 AWS API。如需詳細資訊,請參閱 GitHub 上的設定驅動程式許可

注意

Pods 可以存取指派給 IAM 角色的許可,除非您封鎖對 IMDS 的存取。如需詳細資訊,請參閱 Amazon EKS 的安全最佳實務

必要條件
  • 現有的叢集。

  • 叢集的現有 AWS Identity and Access Management OpenID Connect (IAMOIDC) () 提供者。若要判定您是否已經擁有一個,或是要建立一個,請參閱 為您的叢集建立 IAM OIDC 提供者

以下程序說明如何建立 IAM 角色,並將 AWS 受管政策連接到該角色。您可以使用 eksctl、 AWS Management Console或 AWS CLI。

注意

本程序中的特定步驟是針對將驅動程式用作 Amazon EKS 附加元件而編寫。需要執行不同的步驟,才能將驅動程式用作自我管理附加元件。如需詳細資訊,請參閱 GitHub 上的設定驅動程式許可

eksctl
使用 eksctl 建立 Amazon EBS CSI 外掛程式 IAM 角色
  1. 建立 IAM 角色並附加政策。 AWS 維護受 AWS 管政策,或者您可以建立自己的自訂原則。您可以使用以下命令建立 IAM 角色並附加 AWS 受管政策。使用您叢集的名稱取代 my-cluster。該命令會部署建立 IAM 角色並將 IAM 政策附加到其中的 AWS CloudFormation 堆疊。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,請取代arn:aws:為. arn:aws-us-gov:

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
  2. 如果在 Amazon EBS 磁碟區上使用自訂 KMS 金鑰進行加密,請視需要自訂 IAM 角色。例如,請執行以下操作:

    1. 複製以下程式碼並貼到新 kms-key-for-encryption-on-ebs.json 檔案中。將 custom-key-arn 取代為自訂 KMS 金鑰 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 建立政策。您可以將 KMS_Key_For_Encryption_On_EBS_Policy 變更為不同名稱。但是,如果您這樣做,請務必在稍後的步驟中也進行變更。

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 使用以下命令將 IAM 政策連接至角色。使用您的帳戶 ID 取代 111122223333如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,請取代arn:aws:為. arn:aws-us-gov:

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole
AWS Management Console
若要建立您的 Amazon EBS CSI 外掛程式 IAM 角色 AWS Management Console
  1. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

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

  3. Roles (角色) 頁面上,選擇 Create role (建立角色)。

  4. Select trusted entity (選取信任的實體) 頁面上,執行以下作業:

    1. Trusted entity type (信任的實體類型) 區段中,選擇 Web identity (Web 身分)。

    2. Identity provider (身分提供者) 欄位,為您的叢集選擇 OpenID Connect provider URL ( 供應商 URL) (如 Amazon EKS Overview (概觀) 下所示)。

    3. 針對 Audience (對象),選擇 sts.amazonaws.com

    4. 選擇 Next (下一步)。

  5. Add permissions (新增許可) 頁面上,執行以下作業:

    1. Filter policies (篩選政策) 方塊中,輸入 AmazonEBSCSIDriverPolicy

    2. 勾選在搜尋中傳回的 AmazonEBSCSIDriverPolicy 左側的核取方塊。

    3. 選擇 Next (下一步)。

  6. Name, review, and create (命名、檢閱和建立) 頁面上,執行以下作業:

    1. 針對 Role name (角色名稱),為您的角色輸入唯一名稱 (例如 AmazonEKS_EBS_CSI_DriverRole)。

    2. 藉由連接標籤做為鍵值對,在新增標籤 (選用) 下將中繼資料新增至角色。如需有關在 IAM 中使用標籤的詳細資訊,請參閱《IAM 使用者指南》中的標記 IAM 資源

    3. 選擇建立角色

  7. 建立角色之後,在主控台中選擇角色,以開啟角色進行編輯。

  8. 選擇 Trust Relationships (信任關係) 標籤,然後選擇 Edit Trust Relationship (編輯信任政策)。

  9. 查找與下列行相似的行:

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"

    在上一行的末尾新增一個逗號,然後在上一行之後新增下一行。region-code以叢集所 AWS 區域 在的位置取代。EXAMPLED539D4633E53DE1B71EXAMPLE 取代為叢集的 OIDC 供應商 ID。

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
  10. 選擇 Update policy (更新政策) 以完成操作。

  11. 如果在 Amazon EBS 磁碟區上使用自訂 KMS 金鑰進行加密,請視需要自訂 IAM 角色。例如,請執行以下操作:

    1. 在左側導覽窗格中選擇 Policies (政策)。

    2. Policies (政策) 頁面上,選擇 Create a policy (建立政策)。

    3. 建立政策頁面上,選擇 JSON 標籤。

    4. 複製以下程式碼並貼到編輯器中,將 custom-key-arn 取代為自訂 KMS 金鑰 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    5. 選擇下一步:標籤

    6. Add tags (Optional) (新增標籤 (選用)) 頁面上,選擇 Next: Review (下一步:檢閱)。

    7. Name (名稱) 中輸入您的政策名稱 (例如 KMS_Key_For_Encryption_On_EBS_Policy)。

    8. 選擇建立政策

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

    10. DriverRole在控制台中選擇亞馬遜 _EBS_CSI_ 以將其打開以進行編輯。

    11. 新增許可下拉式清單中,選擇連接政策

    12. Filter policies (篩選政策) 方塊中,輸入 KMS_Key_For_Encryption_On_EBS_Policy

    13. 勾選在搜尋中傳回的 KMS_Key_For_Encryption_On_EBS_Policy 左側的核取方塊。

    14. 選擇連接政策

AWS CLI
若要建立您的 Amazon EBS CSI 外掛程式 IAM 角色 AWS CLI
  1. 檢視叢集的 OIDC 提供商 URL。使用您的叢集名稱取代 my-cluster。如果來自命令的輸出是 None,則請檢閱先決條件

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

    範例輸出如下。

    https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. 建立 IAM 角色,授予其 AssumeRoleWithWebIdentity 動作。

    1. 將以下內容複製到名為 aws-ebs-csi-driver-trust-policy.json 的檔案。使用您的帳戶 ID 取代 111122223333。使用前一個步驟傳回的值取代 EXAMPLED539D4633E53DE1B71EXAMPLEregion-code如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,請取代arn:aws:為. arn:aws-us-gov:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] }
    2. 建立角色。您可以將 AmazonEKS_EBS_CSI_DriverRole 變更為不同名稱。若要變更名稱,請務必在稍後的步驟中進行變更。

      aws iam create-role \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
  3. 附加策略。 AWS 維護受 AWS 管政策,或者您可以建立自己的自訂原則。使用下列命令將 AWS 受管理的原則附加至角色。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,請取代arn:aws:為. arn:aws-us-gov:

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --role-name AmazonEKS_EBS_CSI_DriverRole
  4. 如果在 Amazon EBS 磁碟區上使用自訂 KMS 金鑰進行加密,請視需要自訂 IAM 角色。例如,請執行以下操作:

    1. 複製以下程式碼並貼到新 kms-key-for-encryption-on-ebs.json 檔案中。將 custom-key-arn 取代為自訂 KMS 金鑰 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 建立政策。您可以將 KMS_Key_For_Encryption_On_EBS_Policy 變更為不同名稱。但是,如果您這樣做,請務必在稍後的步驟中也進行變更。

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 使用以下命令將 IAM 政策連接至角色。使用您的帳戶 ID 取代 111122223333如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,請取代arn:aws:為. arn:aws-us-gov:

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole

現在,您已建立 Amazon EBS CSI 驅動程式 IAM 角色,即可繼續進行 新增 Amazon EBS CSI 驅動程式附加元件。當您在該程序中部署外掛程式時,其會建立並設定為使用名為 ebs-csi-controller-sa 的服務帳戶。服務帳戶會繫結至指派所需 Kubernetes 許可的 Kubernetes clusterrole