このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
Amazon EFS CSI ドライバーで、Amazon S3 ファイルシステムストレージを使用する
S3 ファイルは、すべての AWS コンピューティングを Amazon S3 のデータに直接接続する共有ファイルシステムです。これにより、データが S3 を離れることなく、完全なファイルシステムのセマンティクスと低レイテンシーのパフォーマンスを備えたファイルとして、すべての S3 データにすばやく直接アクセスできます。つまり、ファイルベースのアプリケーション、エージェント、チームは、既に依存しているツールを使用して、ファイルシステムとして S3 データにアクセスして操作できます。Amazon EFS Container Storage Interface (CSI) ドライバー
考慮事項
-
Amazon EFS CSI ドライバーは、Windows ベースのコンテナイメージと互換性がありません。
-
EKS Fargate は、S3 ファイルをサポートしていません。
-
Amazon EFS CSI ドライバーは Amazon EKS Hybrid Nodes と互換性がありません。
-
Amazon EFS CSI ドライバーでの Amazon S3 ファイルのサポートは、バージョン 3.0.0
から開始されます。
前提条件
-
Amazon EFS CSI ドライバーには AWS Identity and Access Management (IAM) のアクセス権限が必要です。
-
AWS では、EKS Pod Identity の使用を推奨しています。詳細については、EKS Pod Identity のセットアップの概要 を参照してください。
-
サービスアカウントの IAM ロールと、クラスターの IAM OpenID Connect (OIDC) プロバイダーの設定については、クラスターの IAM OIDC プロバイダーを作成するには で詳しく確認できます。
-
-
ご使用のデバイスまたは AWS クラウドシェル で、バージョン
2.12.3以降、または AWS コマンドラインインターフェイス (AWS CLI のバージョン1.27.160以降がインストールおよび設定されていること。現在のバージョンを確認するには、aws --version | cut -d / -f2 | cut -d ' ' -f1を参照してください。yum、apt-get、macOS 用の Homebrew などのパッケージマネージャーは、多くの場合 AWS CLI の最新バージョンより数バージョン古くなっています。最新バージョンをインストールするには「AWS コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。 -
デバイスまたは AWS CloudShell に、
kubectlコマンドラインツールがインストールされていること。バージョンはご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが1.29である場合、kubectlのバージョン1.28、1.29、または1.30が使用できます。kubectlをインストールまたはアップグレードする方法については、kubectl および eksctl のセットアップ を参照してください。
ステップ 1: IAM ロールを作成する
Amazon EFS CSI ドライバーには、ファイルシステムと対話するための IAM アクセス許可が必要です。EFS CSI ドライバーは、個別の IAM ロールを持つ 2 つのサービスアカウントを使用します。
-
efs-csi-controller-sa— コントローラーで使用され、AmazonS3FilesCSIDriverPolicyが必要です。 -
efs-csi-node-sa— ノードデーモンセットで使用されるには、以下が必要です。-
AmazonS3ReadOnlyAccess— S3 バケットから直接読み取りをストリーミングして、スループットを向上できます。 -
AmazonElasticFileSystemsUtils— マウント操作の可視性とトラブルシューティングの容易性を向上させるため、efs-utils のログを Amazon CloudWatch に公開できるようにします。
-
注記
Amazon S3 ファイルシステムと Amazon EFS ストレージの両方を使用する場合は、AmazonS3FilesCSIDriverPolicy と AmazonEFSCSIDriverPolicy の両方のマネージドポリシーをコントローラーロールにアタッチする必要があります。Amazon EBS ストレージの詳細については、Amazon EFS で Elastic File System ストレージを使用する を参照してください。
この手順を実装するには、次のいずれかのツールを使用できます。
注記
この手順には、ドライバーを Amazon EKS アドオンとして使用するための特定のステップが書かれています。セルフマネージド型インストールについての詳細は、GitHub の「Set up driver permission
eksctl
Pod Identity を使用する場合
以下のコマンドを実行します。ここでは、eksctl を使用して IAM ロールと、Pod Identity の関連付けを作成しています。マイクラスター をご自分の値に置き換えます。
export cluster_name=my-cluster # Create the controller role eksctl create podidentityassociation \ --service-account-name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_ControllerRole \ --permission-policy-arns arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy # Create the node role eksctl create podidentityassociation \ --service-account-name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name AmazonEKS_EFS_CSI_NodeRole \ --permission-policy-arns arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess,arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils
サービスアカウントに IAM ロールを使用している場合
次のコマンドを実行して、eksctl を使用して IAM ロールを作成します。my-cluster はクラスター名に、region-code を AWS のリージョンコードに置き換えます。
export cluster_name=my-cluster export region_code=region-code # Create the controller role export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole eksctl create iamserviceaccount \ --name efs-csi-controller-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $controller_role_name \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --approve \ --region $region_code # Create the node role export node_role_name=AmazonEKS_EFS_CSI_NodeRole eksctl create iamserviceaccount \ --name efs-csi-node-sa \ --namespace kube-system \ --cluster $cluster_name \ --role-name $node_role_name \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --approve \ --region $region_code
AWS マネジメントコンソール
次のコマンドを実行して、AWS マネジメントコンソール を使用して IAM ロールを作成します。
-
IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。
-
左のナビゲーションペインで、[ロール] を選択してください。
-
[ロール] ページで、[ロールの作成] を選択してください。
-
[信頼されたエンティティを選択] ページで、以下の操作を実行します。
-
EKS Pod Identity を使用する場合
-
[信頼するエンティティのタイプ] で [AWS サービス] を選択してください。
-
[サービスまたはユースケース] のドロップダウンで、EKS を選択します。
-
ユースケースセクションで、[EKS - Pod Identity] を選択します。
-
[次へ] を選択します。
-
-
サービスアカウントに IAM ロールを使用している場合
-
[信頼されたエンティティの種類] セクションで、[ウェブ アイデンティティ] を選択します。
-
[Identity provider] (ID プロバイダー) で、(Amazon EKS の [Overview] (概要) に示されているように) クラスターに [OpenID Connect provider URL] (OpenID Connect プロバイダーの URL) を選択します。
-
[対象者] で [
sts.amazonaws.com] を選択します。 -
[次へ] を選択します。
-
-
-
[アクセス許可を追加] ページで、以下を実行します。
-
[フィルタポリシー] ボックスに
AmazonS3FilesCSIDriverPolicyと入力します。 -
検索結果に表示されたポリシーの左側にあるチェックボックスを選択します。
-
[次へ] を選択します。
-
-
[名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。
-
[ロール名] に、
AmazonEKS_EFS_CSI_ControllerRoleなどのロールの一意の名前を入力します。 -
[タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。
-
[ロールの作成] を選択してください。
-
-
ロールの作成後
-
EKS Pod Identity を使用する場合
-
Amazon EKS コンソール
を開きます。 -
左のナビゲーションペインで、[クラスター] を選択して、EKS Pod Identity の関連付けを設定するクラスターの名前を選択します。
-
[アクセス] タブを選択します。
-
[Pod Identity の関連付け] で [作成] を選択します。
-
[IAM ロール] ドロップダウンを選択して、新しく作成したロールを選択します。
-
[Kubernetes 名前空間] フィールドを選択して、
kube-systemを入力します。 -
[Kubernetes サービスアカウント] フィールドを選択して、
efs-csi-controller-saを入力します。 -
[作成] を選択します。
-
Pod Identity の関連付けの作成については、Pod Identity の関連付けを作成する (AWS コンソール) で詳しく確認できます。
-
上記の手順を繰り返して、ノードサービスアカウントの 2 つ目の役割を作成します。アクセス許可の追加 ページで、代わりに
AmazonS3ReadOnlyAccessとAmazonElasticFileSystemsUtilsをアタッチします。次に、Kubernetes サービスアカウント フィールドのefs-csi-node-saとの Pod Identity 関連付けを作成します。
-
-
サービスアカウントに 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:efs-csi-controller-sa", -
[ポリシーの更新] を選択して終了します。
-
上記の手順を繰り返して、ノードサービスアカウントの 2 つ目の役割を作成します。アクセス許可の追加 ページで、代わりに
AmazonS3ReadOnlyAccessとAmazonElasticFileSystemsUtilsをアタッチします。信頼ポリシーで、:sub条件値にefs-csi-node-saを使用します。
-
-
AWS CLI
次のコマンドを実行して、AWS CLI を使用して IAM ロールを作成します。
Pod Identity を使用する場合
-
pods.eks.amazonaws.comサービスにAssumeRoleおよびTagSessionアクションを許可する IAM ロールを作成します。-
次の内容を
aws-efs-csi-driver-trust-policy-pod-identity.jsonという名前のファイルにコピーします。{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEksAuthToAssumeRoleForPodIdentity", "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] } ] } -
ロールを作成します。
マイクラスターの部分は自分のクラスター名に置き換えます。export cluster_name=my-cluster export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json"
-
-
コントローラーロールに、必要な AWS マネージドポリシーをアタッチします。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name -
同じ信頼ポリシーを使用して、ノードの IAM ロールを作成します。
export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"aws-efs-csi-driver-trust-policy-pod-identity.json" -
ノードロールに、必要な AWS マネージドポリシーをアタッチします。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name -
次のコマンドを実行して、Pod Identity の関連付けを作成します。
<111122223333>は、ご自分のアカウント ID に置き換えます。aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$controller_role_name --namespace kube-system --service-account efs-csi-controller-sa aws eks create-pod-identity-association --cluster-name $cluster_name --role-arn {arn-aws}iam::<111122223333>:role/$node_role_name --namespace kube-system --service-account efs-csi-node-sa
-
Pod Identity の関連付けの作成については、Pod Identity の関連付けを作成する (AWS コンソール) で詳しく確認できます。
サービスアカウントに IAM ロールを使用している場合
-
クラスターの OIDC プロバイダーの URL を表示します。
マイクラスターの部分は自分のクラスター名に置き換えます。export cluster_name=my-cluster aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text出力例は次のとおりです。
https://oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>コマンドの出力が
Noneの場合は、「前提条件」を確認してください。 -
コントローラーサービスアカウントの IAM ロールを作成します。
-
次の内容を
controller-trust-policy.jsonという名前のファイルにコピーします。<111122223333>は、ご自分のアカウント ID に置き換えます。<EXAMPLED539D4633E53DE1B71EXAMPLE>と<region-code>を、前のステップで返された値に置き換えます。{ "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:efs-csi-controller-sa" } } } ] } -
ロールを作成します。
export controller_role_name=AmazonEKS_EFS_CSI_ControllerRole aws iam create-role \ --role-name $controller_role_name \ --assume-role-policy-document file://"controller-trust-policy.json"
-
-
コントローラーロールに、必要な AWS マネージドポリシーをアタッチします。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonS3FilesCSIDriverPolicy \ --role-name $controller_role_name -
ノードサービスアカウントの IAM ロールを作成します。
-
次の内容を
node-trust-policy.jsonという名前のファイルにコピーします。<111122223333>は、ご自分のアカウント ID に置き換えます。<EXAMPLED539D4633E53DE1B71EXAMPLE>と<region-code>を、前のステップで返された値に置き換えます。{ "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>:sub": "system:serviceaccount:kube-system:efs-csi-node-sa", "oidc.eks.<region-code>.amazonaws.com/id/<EXAMPLED539D4633E53DE1B71EXAMPLE>:aud": "sts.amazonaws.com" } } } ] } -
ロールを作成します。
export node_role_name=AmazonEKS_EFS_CSI_NodeRole aws iam create-role \ --role-name $node_role_name \ --assume-role-policy-document file://"node-trust-policy.json"
-
-
ノードロールに、必要な AWS マネージドポリシーをアタッチします。
aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ --role-name $node_role_name aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonElasticFileSystemsUtils \ --role-name $node_role_name
注記
この AmazonS3ReadOnlyAccess ポリシーは、すべての S3 バケットへの読み取りアクセスを許可します。特定のバケットへのアクセスを制限するには、バケットをデタッチし、タグベースのインラインポリシーに置き換えます。詳細については、GitHub の「Amazon EFS CSI ドライバー IAM ポリシードキュメント
ステップ 2: Amazon EFS CSI ドライバーを取得する
Amazon EFS CSI ドライバーは Amazon EKS アドオンを使用してインストールすることをお勧めします。Amazon EKS アドオンをクラスターに追加するには、Amazon EKS アドオンを作成する を参照してください。アドオンの詳細については、Amazon EKS アドオン を参照してください。Amazon EKS アドオンを使用できない場合は、その理由に関する問題をコンテナロードマップ GitHub リポジトリ
重要
Amazon EFS ドライバーを Amazon EKS アドオンとして追加する前に、クラスターにセルフマネージドバージョンのドライバーがインストールされていないことを確認してください。インストールされている場合は、GitHub の「Uninstalling the Amazon EFS CSI Driver
または、Amazon EFS CSI ドライバーのセルフマネージド型インストールが必要な場合は、GitHub の「Installation
ステップ 3: Amazon EFS ファイルシステムを作成する
Amazon S3 ファイルシステムを作成するには、「GitHub」の「Amazon EKS 用の Amazon S3 ファイルシステムを作成
ステップ 4: サンプルアプリケーションをデプロイする
さまざまなサンプルアプリケーションをデプロイし、必要に応じて変更できます。詳細については、「GitHub」の「例