このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
Amazon EBS を利用して Kubernetes ボリュームを保存する
Amazon Elastic Block Store (Amazon EBS) Container Storage Interface (CSI) ドライバーは、Amazon EBS ボリュームのライフサイクルを、作成した Kubernetes ボリュームのストレージとして管理します。Amazon EBS CSI ドライバーは、ジェネリックエフェメラルボリュームとパーシステントボリュームという種類の Kubernetes ボリューム用の Amazon EBS ボリュームを作成します。
考慮事項
Amazon EBS CSI ドライバーのスナップショット機能を使用するには、アドオンをインストールする前または後のいずれかに外部の Snapshotter をインストールする必要があります。外部の Snapshotter のコンポーネントは、次の順序でインストールする必要があります。
詳細については、「GitHub」の「CSI Snapshotter」を参照してください。
前提条件
-
既存のクラスター。必要なプラットフォームのバージョンを確認するには、次のコマンドを実行します。
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 の「ドライバー権限の設定」を参照してください。
以下の手順は、IAM ロールを作成し、それに AWS マネージドポリシーをアタッチする方法を示しています。eksctl
、AWS Management Console、または AWS CLI を使用できます。
この手順には、ドライバーを Amazon EKS アドオンとして使用するための特定のステップが書かれています。ドライバーをセルフマネージドのアドオンとして使用するには、さまざまなステップが必要です。詳細については、「GitHub」 の「ドライバー権限の設定」を参照してください。
- eksctl
-
eksctl
で Amazon EBS CSI プラグイン IAM ロールを作成するには
-
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 キー 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
-
AWS Management Console で Amazon EBS CSI プラグイン IAM ロールを作成するには
IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。
-
左のナビゲーションペインで、[ロール] を選択します。
-
[ロール] ページで、[ロールの作成] を選択します。
-
[信頼されたエンティティを選択] ページで、以下の操作を実行します。
[信頼されたエンティティの種類] セクションで、[ウェブ アイデンティティ] を選択します。
-
[ID プロバイダー] で、(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 キー 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
)。
-
[ポリシーを作成] を選択します。
-
左のナビゲーションペインで、[ロール] を選択します。
-
コンソールで [AmazonEKS_EBS_CSI_DriverRole
] を選択し、編集用に開きます。
-
[アクセス許可を追加] ドロップダウンリストから [ポリシーをアタッチ] を選択します。
-
[フィルタポリシー] ボックスに 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
という名前のファイルにコピーします。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 キー 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 CSI ドライバーのセルフマネージドインストールが必要な場合は、GitHub の「インストール」を参照してください。
ステップ 3: サンプルアプリケーションをデプロイする
さまざまなサンプルアプリケーションをデプロイし、必要に応じて変更できます。詳細については、GitHub の「Kubernetes Examples」を参照してください。