このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
Amazon EFS CSI ドライバーで、Amazon S3 Filesシステムストレージを使用する
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 Filesのサポートは、バージョン 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 CloudShell で、バージョン
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 Filesシステムと 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 Filesシステムを作成するには、「GitHub」の「Amazon EKS 用の Amazon S3 Filesシステムを作成
ステップ 4: サンプルアプリケーションをデプロイする
さまざまなサンプルアプリケーションをデプロイし、必要に応じて変更できます。詳細については、「GitHub」の「例