サービスアカウント用の Amazon EBS CSI ドライバー IAM ロールの作成 - Amazon EKS

サービスアカウント用の Amazon EBS CSI ドライバー IAM ロールの作成

Amazon EBS CSI プラグインでは、ユーザーに代わって AWS API の呼び出しを行うための IAM アクセス許可が必要です。詳細については、GitHub の「ドライバー権限の設定」を参照してください。

プラグインがデプロイされると、ebs-csi-controller-sa という名前のサービスアカウントが作成され、そのアカウントを使用するように設定されます。サービスアカウントは、必要な Kubernetes アクセス許可が割り当てられた Kubernetes clusterrole にバインドされます。

注記

サービスアカウントの IAM ロールを使用するように Amazon EBS CSI プラグインを設定するかどうかにかかわらず、pods は IAM ロールに割り当てられた許可へのアクセスが可能です。これは、IMDS へのアクセスをブロックする場合を除きます。詳細については、「Amazon EKS のセキュリティベストプラクティス」を参照してください。

前提条件
  • 既存のクラスター。

    • 1.19 には eks.7 以降が必要です。

    • 1.20 には eks.3 以降が必要です。

    • 1.21 には eks.3 以降が必要です。

  • クラスター用の既存 AWS Identity and Access Management IAM OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスター用の IAM OIDC プロバイダーの作成」を参照してください。

IAM ロールを作成して、必要な AWS 管理ポリシーをアタッチします。eksctl、AWS Management Console、または AWS CLI を使用できます。

eksctl
eksctl で Amazon EBS CSI プラグイン IAM ロールを作成するには
  1. 次のコマンドで、IAM ロールを作成して、必要な AWS 管理ポリシーをアタッチします。my-cluster を自分のクラスター名に置き換えます。コマンドは、IAM ロールを作成する AWS CloudFormation スタックをデプロイし、そこに IAM ポリシーをアタッチし、既存の ebs-csi-controller-sa サービスアカウントに IAM ロールの Amazon リソースネーム (ARN) の注釈を付けます。クラスターが 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 \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve \ --role-only \ --role-name AmazonEKS_EBS_CSI_DriverRole
  2. Amazon EBS ボリュームでの暗号化にカスタム KMS キーを使用する場合は、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。

    1. 次のコードをコピーし、新しい kms-key-for-encryption-on-ebs.json ファイルに貼り付けます。custom-key-id をカスタム KMS キー ID に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-id"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-id"] } ] }
    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 ポリシーをロールに添付します。111122223333 をアカウントID に置き換えます。クラスターが 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
AWS Management Console で Amazon EBS CSI プラグイン IAM ロールを作成するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[Roles] (ロール) を選択します。

  3. [ロール] ページで、[ロールの作成] を選択します。

  4. [Select trusted entity] (信頼されたエンティティを選択) ページで、以下の操作を実行します。

    1. [Trusted entity type] (信頼されたエンティティの種類) セクションで、[Web identity] (ウェブ アイデンティティ) を選択します。

    2. [Identity provider] (アイデンティティプロバイダー) で、(Amazon EKS の [Overview] (概要) に示されているように) クラスターに [OpenID Connect provider URL] ( プロバイダーの URL) を選択します。

    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. [Add tags (Optional)] (タグの追加(オプション)) で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用の詳細については、IAM ユーザーガイドの「IAM リソースのタグ付け」を参照してください。

    3. [Create role] (ロールの作成) を選択します。

  7. ロールが作成されたら、コンソールでロールを選択して編集用に開きます。

  8. [Trust relationships] (信頼関係) タブを選択し、続いて [Edit trust policy] (信頼ポリシーの編集) を選択します。

  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. [ポリシー] ページで、[ポリシーの作成] を選択します。

    3. [Create policy] (ポリシーの作成) ページで、[JSON] タブを選択します。

    4. 次のコードをコピーしてエディタに貼り付けます。custom-key-id をカスタム KMS キー ID に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-id"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-id"] } ] }
    5. [Next: Tags] (次へ: タグ) を選択します。

    6. [Add tags (Optional)] (タグの追加 (オプション)) ページで、[Next: Review] (次へ: 確認) を選択します。

    7. [Name] (名前) に、ポリシーの一意の名前を入力します (例えば、KMS_Key_For_Encryption_On_EBS_Policy)。

    8. [Create policy] (ポリシーを作成) を選択します。

    9. 左のナビゲーションペインで、[Roles] (ロール) を選択します。

    10. コンソールで [AmazonEKS_EBS_CSI_DriverRole] を選択し、編集用に開きます。

    11. [Add permissions] (アクセス許可の追加) ドロップダウンリストから [Attach policies] (ポリシーのアタッチ) を選択します。

    12. [Filter policies] (フィルタポリシー) ボックスに KMS_Key_For_Encryption_On_EBS_Policy と入力します。

    13. 検索で返された KMS_Key_For_Encryption_On_EBS_Policy の左にあるチェックボックスを選択します。

    14. [ポリシーのアタッチ] を選択します。

  12. ebs-csi-controller-sa Kubernetes サービスアカウントを、IAM ロールの ARN に対しアノテートします。

    1. サービスアカウントに注釈を付けます。111122223333 をアカウント ID に置き換え、AmazonEKS_EBS_CSI_DriverRole を IAM ロール名に置き換えます。

      kubectl annotate serviceaccount ebs-csi-controller-sa \ -n kube-system \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole
    2. 注釈を有効にするには、ebs-csi-controller デプロイを再開します。

      kubectl rollout restart deployment ebs-csi-controller -n kube-system
AWS CLI
AWS CLI で Amazon EBS CSI プラグイン IAM ロールを作成するには
  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 ロールを作成します。

    1. 次の内容を aws-ebs-csi-driver-trust-policy.json という名前のファイルにコピーします。111122223333 をアカウント ID に、region-code を AWS リージョン に、EXAMPLED539D4633E53DE1B71EXAMPLE を前のステップで返された値に置き換えます。クラスターが 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 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-id をカスタム KMS キー ID に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-id"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-id"] } ] }
    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 ポリシーをロールに添付します。111122223333 をアカウントID に置き換えます。クラスターが 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
  5. ebs-csi-controller-sa Kubernetes サービスアカウントを、IAM ロールの ARN に対しアノテートします。111122223333 をアカウント ID に置き換え、AmazonEKS_EBS_CSI_DriverRole を IAM ロール名に置き換えます。

    kubectl annotate serviceaccount ebs-csi-controller-sa \ -n kube-system \ eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole
  6. 注釈を有効にするには、ebs-csi-controller デプロイを再開します。

    kubectl rollout restart deployment ebs-csi-controller -n kube-system