Amazon EBS CSI ドライバー IAM ロールの作成 - Amazon EKS

このページの改善にご協力ください

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

Amazon EBS CSI ドライバー IAM ロールの作成

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

注記

Pods は、IMDS へのアクセスをブロックする場合を除き、IAM ロールに割り当てられたアクセス許可にアクセスできます。詳細については、「Amazon EKS のセキュリティベストプラクティス」を参照してください。

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

  • クラスター用の既存 AWS Identity and Access Management IAM OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスターの 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 ポリシーをロールに添付します。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. 左のナビゲーションペインで、[ロール] を選択します。

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

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

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

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

    3. [対象者] で [sts.amazonaws.com] を選択します。

    4. [Next] を選択します。

  5. [アクセス許可を追加] ページで、以下を実行します。

    1. [フィルタポリシー] ボックスに AmazonEBSCSIDriverPolicy と入力します。

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

    3. [Next] を選択します。

  6. [名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。

    1. [ロール名] に、AmazonEKS_EBS_CSI_DriverRole などのロールの一意の名前を入力します。

    2. [タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

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

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

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

  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. [ポリシーの更新] を選択して終了します。

  11. Amazon EBS ボリュームでの暗号化にカスタム「KMS キー」を使用する場合、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。

    1. 左のナビゲーションペインの [ポリシー] を選択します。

    2. [ポリシー] ページで、[ポリシーの作成] を選択します。

    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. [タグの追加 (オプション)] ページで、[次へ: 確認] を選択します。

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

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

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

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

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

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

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

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

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 ロールを作成して AssumeRoleWithWebIdentity アクションを付与します。

    1. 次の内容を aws-ebs-csi-driver-trust-policy.json という名前のファイルにコピーします。111122223333 はご使用のアカウントの ID に置き換えます。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 ポリシーをロールに添付します。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

Amazon EBS CSI ドライバーの IAM ロールを作成したので、続けて「Amazon EBS CSI ドライバーアドオンの追加」に進めます。その手順でプラグインがデプロイされると、ebs-csi-controller-sa という名前のサービスアカウントを作成して使用するように設定されます。サービスアカウントは、必要な Kubernetes アクセス許可が割り当てられた Kubernetes clusterrole にバインドされます。