Amazon EBS で Kubernetes ボリュームを保存する
Amazon Elastic Block Store (Amazon EBS) コンテナストレージインターフェイス (CSI) ドライバー
考慮事項
-
Amazon EBS ボリュームを Fargate Pods にマウントすることはできません。
-
Amazon EBS CSI コントローラーは Fargate ノードで実行できますが、Amazon EBS CSI ノード DaemonSet は Amazon EC2 インスタンスでのみ実行できます。
-
最新のアドオンバージョンと 1 つの以前のバージョンがサポートされます。最新バージョンで見つかったバグや脆弱性は、新しいマイナーバージョンの以前のリリースにバックポートされます。
重要
Amazon EBS CSI ドライバーのスナップショット機能を使用するには、まず CSI スナップショットコントローラーをインストールする必要があります。詳細については、「CSI ボリュームのためにスナップショット機能を有効にする」を参照してください。
前提条件
-
既存のクラスター。必要なプラットフォームのバージョンを確認するには、次のコマンドを実行します。
aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
-
クラスターの既存の AWS Identity and Access Management (IAM) OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスターの IAM OIDC プロバイダーを作成する」を参照してください。
-
クラスター全体の制限された PodSecurityPolicy を使用している場合、デプロイのための十分な権限がアドオンに付与されていることを確認してください。各アドオン Pod に必要なアクセス許可については、GitHub の「関連するアドオンマニフェストの定義
」を参照してください。
ステップ 1: IAM ロールを作成する
Amazon EBS CSI プラグインでは、ユーザーに代わって AWS API の呼び出しを行うための IAM アクセス許可が必要です。これらのステップを実行しない場合、アドオンをインストールして kubectl describe pvc
を実行しようとすると、could not create volume in EC2: UnauthorizedOperation
エラーとともに failed to provision volume with StorageClass
が表示されます。詳細については、GitHub の「ドライバー権限の設定
注記
Pods は、IMDS へのアクセスをブロックする場合を除き、IAM ロールに割り当てられたアクセス許可にアクセスできます。詳細については、「ベストプラクティスによる Amazon EKS クラスターの保護」を参照してください。
以下の手順は、IAM ロールを作成し、それに AWS マネージドポリシーをアタッチする方法を示しています。この手順を実装するには、次のいずれかのツールを使用できます。
注記
この手順には、ドライバーを Amazon EKS アドオンとして使用するための特定のステップが書かれています。ドライバーをセルフマネージドのアドオンとして使用するには、さまざまなステップが必要です。詳細については、「GitHub」 の「ドライバー権限の設定
eksctl
-
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
-
Amazon EBS ボリュームでの暗号化にカスタム「KMS キー
」を使用する場合、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。 -
次のコードをコピーし、新しい
kms-key-for-encryption-on-ebs.json
ファイルに貼り付けます。custom-key-arn
をカスタム KMS 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 ポリシーをロールに添付します。
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
-
IAM コンソール (https://console.aws.amazon.com/iam/
) を開きます。 -
左のナビゲーションペインで、[ロール] を選択します。
-
[ロール] ページで、[ロールの作成] を選択します。
-
[信頼されたエンティティを選択] ページで、以下の操作を実行します。
-
[信頼されたエンティティの種類] セクションで、[ウェブ アイデンティティ] を選択します。
-
[アイデンティティプロバイダー] で、(Amazon EKS の [概要] に示されているように) クラスターに [OpenID Connect プロバイダーの URL] を選択します。
-
[対象者] で [
sts.amazonaws.com
] を選択します。 -
[Next] を選択します。
-
-
[アクセス許可を追加] ページで、以下を実行します。
-
[フィルタポリシー] ボックスに
AmazonEBSCSIDriverPolicy
と入力します。 -
検索で返された
AmazonEBSCSIDriverPolicy
の左にあるチェックボックスを選択します。 -
[Next] を選択します。
-
-
[名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。
-
[ロール名] に、
AmazonEKS_EBS_CSI_DriverRole
などのロールの一意の名前を入力します。 -
[タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。
-
[ロールの作成] を選択します。
-
-
ロールが作成されたら、コンソールでロールを選択して編集用に開きます。
-
[信頼関係] タブを選択し、続いて [信頼ポリシーの編集] を選択します。
-
次の行と似ている行を探してます。
"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"
-
[ポリシーの更新] を選択して終了します。
-
Amazon EBS ボリュームでの暗号化にカスタム「KMS キー
」を使用する場合、必要に応じて IAM ロールをカスタマイズします。例えば、以下を実行してください。 -
左のナビゲーションペインの [ポリシー] を選択します。
-
[ポリシー] ページで、[ポリシーの作成] を選択します。
-
[ポリシーの作成] ページで、[JSON] タブを選択します。
-
次のコードをコピーしてエディタに貼り付け、
custom-key-arn
をカスタム KMS 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] (次へ: タグ) を選択します。
-
[タグの追加 (オプション)] ページで、[次へ: 確認] を選択します。
-
名前 には、ポリシーの一意の名前を入力します (例:
KMS_Key_For_Encryption_On_EBS_Policy
)。 -
[Create policy] を選択します。
-
左のナビゲーションペインで、[ロール] を選択します。
-
コンソールで
[AmazonEKS_EBS_CSI_DriverRole]
を選択し、編集用に開きます。 -
[アクセス許可を追加] ドロップダウンリストから [ポリシーをアタッチ] を選択します。
-
[フィルターポリシー] ボックスに、
KMS_Key_For_Encryption_On_EBS_Policy
と入力します。 -
検索で返された
KMS_Key_For_Encryption_On_EBS_Policy
の左側にあるチェックボックスをオンにします。 -
[ポリシーのアタッチ] を選択します。
-
AWS CLI
-
クラスターの 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
という名前のファイルにコピーします。111122223333
は、ご自分のアカウント ID に置き換えます。EXAMPLED539D4633E53DE1B71EXAMPLE
およびregion-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" } } } ] }
-
ロールを作成します。
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 マネージドポリシーを維持しますが、ユーザーが独自のカスタムポリシーを作成することもできます。次のコマンドを使用して、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
ファイルに貼り付けます。custom-key-arn
をカスタム KMS 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 ポリシーをロールに添付します。
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 ロールを作成したので、次のセクションに進むことができます。この IAM ロールを使用してアドオンをデプロイすると、ebs-csi-controller-sa
という名前のサービスアカウントが作成され、それを使用されるように設定されます。サービスアカウントは、必要な Kubernetes アクセス許可が割り当てられた Kubernetes clusterrole
にバインドされます。
ステップ 2: Amazon EBS CSI ドライバーを入手する
セキュリティを強化し、作業量を削減するために、Amazon EKS アドオンを通じて Amazon EBS CSI ドライバーをインストールすることをお勧めします。Amazon EKS アドオンをクラスターに追加するには、「Amazon EKS アドオンを作成する」を参照してください。アドオンの詳細については、「Amazon EKS アドオン」を参照してください。
重要
Amazon EBS ドライバーを Amazon EKS アドオンとして追加する前に、クラスターにセルフマネージドバージョンのドライバーがインストールされていないことを確認してください。インストールされている場合は、GitHub の「セルフマネージド型 Amazon EBS CSI ドライバーのアンインストール
または、Amazon EBS CSI ドライバーのセルフマネージドインストールが必要な場合は、GitHub の「インストール
ステップ 3: サンプルアプリケーションをデプロイする
さまざまなサンプルアプリケーションをデプロイし、必要に応じて変更できます。詳細については、GitHub の「Kubernetes の例