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 アドオンとして使用するための特定のステップが書かれています。ドライバーをセルフマネージドのアドオンとして使用するには、さまざまなステップが必要です。
- eksctl
-
eksctl
で Amazon EBS CSI プラグイン IAM ロールを作成するには-
次のコマンドで、IAM ロールを作成して、必要な AWS 管理ポリシーをアタッチします。
を自分のクラスター名に置き換えます。このコマンドは IAM ロールを作成して IAM ポリシーをアタッチする AWS CloudFormation スタックをデプロイします。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国東部) の AWS リージョン にある場合は、my-cluster
arn:aws:
をarn:aws-us-gov:
に置き換えます。eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster
my-cluster
\ --role-nameAmazonEKS_EBS_CSI_DriverRole
\ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve -
Amazon EBS ボリュームでの暗号化にカスタム「KMS キー
」を使用する場合、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。 -
次のコードをコピーし、新しい
ファイルに貼り付けます。kms-key-for-encryption-on-ebs
.json
をカスタム「KMS キー ARN」に置き換えます。custom-key-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
"] } ] } -
ポリシーを作成します。
は別の名前に変更できます。ただし、変更する場合は、必ず後の手順で変更してください。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 -
次のコマンドを使用して、IAM ポリシーをロールに添付します。
をアカウントID に置き換えます。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国東部) の AWS リージョン にある場合は、111122223333
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-nameAmazonEKS_EBS_CSI_DriverRole
-
-
- AWS Management Console
-
AWS Management Console で Amazon EBS CSI プラグイン IAM ロールを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
左のナビゲーションペインで、[Roles] (ロール) を選択します。
-
[ロール] ページで、[ロールの作成] を選択します。
-
[Select trusted entity] (信頼されたエンティティを選択) ページで、以下の操作を実行します。
[Trusted entity type] (信頼されたエンティティの種類) セクションで、[Web identity] (ウェブ アイデンティティ) を選択します。
-
[Identity provider] (アイデンティティプロバイダー) で、(Amazon EKS の [Overview] (概要) に示されているように) クラスターに [OpenID Connect provider URL] ( プロバイダーの URL) を選択します。
-
[Audience (対象者)] で [
sts.amazonaws.com
] を選択します。 [Next] (次へ) をクリックします。
-
[Add permissions] (アクセス許可を追加する) ページで、以下を実行します。
-
[Filter policies] (フィルタポリシー) ボックスに
AmazonEBSCSIDriverPolicy
と入力します。 -
検索で返された
AmazonEBSCSIDriverPolicy
の左にあるチェックボックスを選択します。 [Next] (次へ) をクリックします。
-
-
[Name, review, and create] (名前を付けて、レビューし、作成する) ページで、以下の操作を実行します。
-
[Role name] (ロール名) に、
などのロールの一意の名前を入力します。AmazonEKS_EBS_CSI_DriverRole
[Add tags (Optional)] (タグの追加(オプション)) で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用の詳細については、IAM ユーザーガイドの「IAM リソースのタグ付け」を参照してください。
-
[Create role] (ロールの作成) を選択します。
-
ロールが作成されたら、コンソールでロールを選択して編集用に開きます。
[Trust relationships] (信頼関係) タブを選択し、続いて [Edit trust policy] (信頼ポリシーの編集) を選択します。
-
次の行と似ている行を探してます。
"oidc.eks.
region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:aud": "sts.amazonaws.com"前の行の末尾にカンマを追加し、前の行の後に次の行を追加します。
をクラスターのある AWS リージョン に置き換えます。region-code
をクラスターの OIDC プロバイダー ID に置き換えます。EXAMPLED539D4633E53DE1B71EXAMPLE
"oidc.eks.
region-code
.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" [Update policy] (ポリシーの更新) を選択して終了します。
-
Amazon EBS ボリュームでの暗号化にカスタム「KMS キー
」を使用する場合、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。 -
左のナビゲーションペインの [Policies (ポリシー)] を選択します。
-
[ポリシー] ページで、[ポリシーの作成] を選択します。
-
[Create policy] (ポリシーの作成) ページで、[JSON] タブを選択します。
-
次のコードをコピーしてエディタに貼り付け、
をカスタム「KMS キー ARN」に置き換えます。custom-key-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
"] } ] } -
[Next: Tags] (次へ: タグ) を選択します。
-
[Add tags (Optional)] (タグの追加 (オプション)) ページで、[Next: Review] (次へ: 確認) を選択します。
-
[Name] (名前) に、ポリシーの一意の名前を入力します (例えば、
)。KMS_Key_For_Encryption_On_EBS_Policy
-
[Create policy] (ポリシーを作成) を選択します。
-
左のナビゲーションペインで、[Roles] (ロール) を選択します。
-
コンソールで [
AmazonEKS_EBS_CSI_DriverRole
] を選択し、編集用に開きます。 -
[Add permissions] (アクセス許可の追加) ドロップダウンリストから [Attach policies] (ポリシーのアタッチ) を選択します。
-
[Filter policies] (フィルタポリシー) ボックスに
と入力します。KMS_Key_For_Encryption_On_EBS_Policy
-
検索で返された
の左にあるチェックボックスを選択します。KMS_Key_For_Encryption_On_EBS_Policy
-
[ポリシーのアタッチ] を選択します。
-
- AWS CLI
-
AWS CLI で Amazon EBS CSI プラグイン IAM ロールを作成するには
-
クラスターの 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
-
IAM ロールを作成して
AssumeRoleWithWebIdentity
アクションを付与します。-
次の内容を
という名前のファイルにコピーします。aws-ebs-csi-driver-trust-policy
.json
はご使用のアカウントの ID に置き換えます。111122223333
とEXAMPLED539D4633E53DE1B71EXAMPLE
を、前のステップで返された値に置き換えます。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国東部) の AWS リージョン にある場合は、region-code
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" } } } ] } -
ロールを作成します。
は別の名前に変更できます。変更する場合は、必ず後の手順で変更してください。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"
-
-
次のマンドを実行して、必要な 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
-
Amazon EBS ボリュームでの暗号化にカスタム「KMS キー
」を使用する場合、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。 -
次のコードをコピーし、新しい
ファイルに貼り付けます。kms-key-for-encryption-on-ebs
.json
をカスタム「KMS キー ARN」に置き換えます。custom-key-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
"] } ] } -
ポリシーを作成します。
は別の名前に変更できます。ただし、変更する場合は、必ず後の手順で変更してください。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 -
次のコマンドを使用して、IAM ポリシーをロールに添付します。
をアカウントID に置き換えます。クラスターが AWS GovCloud (米国東部) または AWS GovCloud (米国東部) の AWS リージョン にある場合は、111122223333
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-nameAmazonEKS_EBS_CSI_DriverRole
-
-
Amazon EBS CSI ドライバーの IAM ロールを作成したので、続けて「Amazon EBS CSI ドライバーアドオンの追加」に進めます。その手順でプラグインがデプロイされると、ebs-csi-controller-sa
という名前のサービスアカウントを作成して使用するように設定されます。サービスアカウントは、必要な Kubernetes アクセス許可が割り当てられた Kubernetes clusterrole
にバインドされます。