Mountpoint for Amazon S3 CSI ドライバーを使用して Amazon S3 オブジェクトにアクセスする - Amazon EKS

Mountpoint for Amazon S3 CSI ドライバーを使用して Amazon S3 オブジェクトにアクセスする

Mountpoint for Amazon S3 Container Storage Interface (CSI) ドライバーを使用すると、Kubernetes アプリケーションはファイルシステムインターフェイスを介して Amazon S3 オブジェクトにアクセスできるため、アプリケーションコードを変更せずに高い総スループットを実現できます。Mountpoint for Amazon S3 上に構築された CSI ドライバーは、Amazon S3 バケットを Amazon EKS 内のコンテナや自己管理型 Kubernetes クラスターからアクセスできるボリュームとして提供します。このトピックでは、Mountpoint for Amazon S3 CSI ドライバーを、Amazon EKS クラスターにデプロイする方法を示します。

考慮事項

  • Mountpoint for Amazon S3 CSI ドライバーは、Windows ベースのコンテナイメージと現時点では互換性がありません。

  • Mountpoint for Amazon S3 CSI ドライバーは、AWS Fargate をサポートしていません。ただし、Amazon EC2 で実行されているコンテナ (Amazon EKS またはカスタム Kubernetes インストール) はサポートされています。

  • Mountpoint for Amazon S3 CSI ドライバーは、静的プロビジョニングのみをサポートします。動的プロビジョニング、つまり新しいバケットの作成はサポートされていません。

    注記

    静的プロビジョニングとは、PersistentVolume オブジェクトの volumeAttributesbucketName として指定されている既存の Amazon S3 バケットを使用することです。ユーザーのプロビジョニングの詳細については、「GitHub」を参照してください。

  • Mountpoint for Amazon S3 CSI ドライバーでマウントされたボリュームは、すべての POSIX ファイルシステム機能をサポートしているわけではありません。ファイルシステムの動作の詳細については、GitHub の「Mountpoint for Amazon S3 ファイルシステムの動作」を参照してください。

前提条件

  • クラスターの既存の AWS Identity and Access Management (IAM) OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「クラスターの IAM OIDC プロバイダーを作成する」を参照してください。

  • ご使用のデバイスまたは AWS CloudShell で、AWS CLI のバージョン 2.12.3 以降がインストールおよび設定されていること。

  • デバイスまたは AWS CloudShell に、kubectl コマンドラインツールがインストールされていること。バージョンは、ご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが 1.29 である場合、kubectl のバージョン 1.281.29、または 1.30 が使用できます。kubectl をインストールまたはアップグレードする方法については、「kubectl と eksctl のセットアップ」を参照してください。

IAM ポリシーを作成する

Mountpoint for Amazon S3 CSI ドライバーには、ファイルシステムと対話するための Amazon S3 アクセス許可が必要です。このセクションでは、必要な権限を付与する IAM ポリシーを作成する方法を説明します。

以下のポリシー例は、Mountpoint の IAM アクセス許可に関する推奨事項に従っています。別の方法として、AWS マネージドポリシー AmazonS3FullAccess を使用することもできますが、このマネージドポリシーでは Mountpoint に必要以上のアクセス権限が付与されます。

Mountpoint の推奨アクセス許可の詳細については、「GitHub」 の「Mountpoint IAM アクセス許可」を参照してください。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインの [ポリシー] を選択します。

  3. [ポリシー] ページで、[ポリシーの作成] を選択します。

  4. [ポリシーエディター] には [JSON] を選択します。

  5. 以下の [ポリシー] をコピーして、エディタに貼り付けます。

    重要

    amzn-s3-demo-bucket1 を Amazon S3 バケットの名前に置き換えます。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "MountpointFullBucketAccess", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "Sid": "MountpointFullObjectAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*" ] } ] }

    Amazon S3 Express One Zone ストレージクラスで導入されたディレクトリバケットは、汎用バケットとは異なる認証メカニズムを使用します。s3:* アクションではなく、s3express:CreateSession アクションを使用する必要があります。ディレクトリバケットの詳細については、Amazon S3 ユーザーガイドの「ディレクトリバケット」を参照してください。

    以下は、ディレクトリバケットに使用する最小特権ポリシーの例です。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3express:CreateSession", "Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket1--usw2-az1--x-s3" } ] }
  6. [Next] を選択します。

  7. [確認と作成] ページで、ポリシーに名前を付けます。このウォークスルーでは、名前に AmazonS3CSIDriverPolicy を使用します。

  8. [Create policy] を選択します。

IAM ロールを作成する

Mountpoint for Amazon S3 CSI ドライバーには、ファイルシステムと対話するための Amazon S3 アクセス許可が必要です。このセクションでは、IAM ロールを作成して、これらの権限を委任する方法を示します。このロールを作成するには、次のいずれかのツールを使用できます。

注記

IAM ポリシー AmazonS3CSIDriverPolicy は、前のセクションで作成しました。

eksctl

eksctl を使用して Mountpoint for Amazon S3 CSI ドライバーの IAM ロールを作成するには

以下のコマンドを実行して、IAM ロールと Kubernetes サービスアカウントを作成します。これらのコマンドはまた、AmazonS3CSIDriverPolicy IAM ポリシーをロールにアタッチし、Kubernetes サービスアカウント (s3-csi-controller-sa) に IAM ロールの Amazon リソースネーム (ARN) をアノテーションし、Kubernetes サービスアカウント名を IAMロールの信頼ポリシーに追加します。

CLUSTER_NAME=my-cluster REGION=region-code ROLE_NAME=AmazonEKS_S3_CSI_DriverRole POLICY_ARN=AmazonEKS_S3_CSI_DriverRole_ARN eksctl create iamserviceaccount \ --name s3-csi-driver-sa \ --namespace kube-system \ --cluster $CLUSTER_NAME \ --attach-policy-arn $POLICY_ARN \ --approve \ --role-name $ROLE_NAME \ --region $REGION \ --role-only

AWS Management Console

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[ロール] を選択します。

  3. [ロール] ページで、[ロールの作成] を選択します。

  4. [信頼されたエンティティを選択] ページで、以下の操作を実行します。

    1. [信頼されたエンティティの種類] セクションで、[ウェブ アイデンティティ] を選択します。

    2. [アイデンティティプロバイダー] で、(Amazon EKS の [概要] に示されているように) クラスターに [OpenID Connect プロバイダーの URL] を選択します。

      URL が表示されない場合は、「前提条件」を確認してください。

    3. [対象者] で [sts.amazonaws.com] を選択します。

    4. [Next] を選択します。

  5. [アクセス許可を追加] ページで、以下を実行します。

    1. [フィルタポリシー] ボックスに AmazonS3CSIDriverPolicy と入力します。

      注記

      このポリシーは、前のセクションで作成されました。

    2. 検索で返された AmazonS3CSIDriverPolicy 結果の左にあるチェックボックスを選択します。

    3. [Next] を選択します。

  6. [名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。

    1. [ロール名] に、AmazonEKS_S3_CSI_DriverRole などのロールの一意の名前を入力します。

    2. [タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

    3. [ロールの作成] を選択します。

  7. ロールが作成されたら、コンソールでロールを選択して編集用に開きます。

  8. [信頼関係] タブを選択し、続いて [信頼ポリシーの編集] を選択します。

  9. 次のように表示されます。

    "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:s3-csi-*"
  10. Condition オペレーターを "StringEquals" から "StringLike" に修正します。

  11. [ポリシーの更新] を選択して終了します。

AWS CLI

  1. クラスターの 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
  2. IAM ロールを作成し、Kubernetes サービスアカウントに AssumeRoleWithWebIdentity アクションを許可します。

    1. 次の内容を aws-s3-csi-driver-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": { "StringLike": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-*", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com" } } } ] }
    2. ロールを作成します。AmazonEKS_S3_CSI_DriverRole を別の名前に変更できますが、変更する場合は、後の手順でも変更してください。

      aws iam create-role \ --role-name AmazonEKS_S3_CSI_DriverRole \ --assume-role-policy-document file://"aws-s3-csi-driver-trust-policy.json"
  3. 次のコマンドを使用して IAM ロールを作成し、そのロールに IAM ポリシーをアタッチします。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy \ --role-name AmazonEKS_S3_CSI_DriverRole
    注記

    IAM ポリシー AmazonS3CSIDriverPolicy は、前のセクションで作成しました。

  4. ドライバーを Amazon EKS アドオンとしてインストールする場合は、この手順をスキップしてください。ドライバーのセルフマネージド型インストールでは、作成した IAM ロールの ARN で注釈が付けられた Kubernetes サービスアカウントを作成します。

    1. 次の内容を mountpoint-s3-service-account.yaml という名前のファイルに保存します。111122223333 は、ご自分のアカウント ID に置き換えます。

      --- apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/name: aws-mountpoint-s3-csi-driver name: mountpoint-s3-csi-controller-sa namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole
    2. クラスター上で Kubernetes サービスアカウントを作成します。Kubernetes サービスアカウント (mountpoint-s3-csi-controller-sa) は、AmazonEKS_S3_CSI_DriverRole という名前で作成した IAM ロールで注釈が付けられています。

      kubectl apply -f mountpoint-s3-service-account.yaml
      注記

      その手順でプラグインがデプロイされると、s3-csi-driver-sa という名前のサービスアカウントを作成して使用するように設定されます。

Mountpoint for Amazon S3 CSI ドライバーをインストールする

Mountpoint for Amazon S3 CSI ドライバーは、Amazon EKS アドオンを使用してインストールできます。次のツールを使用して、アドオンをクラスターに追加できます。

必要に応じて、セルフマネージドインストールとして Mountpoint for Amazon S3 CSI ドライバーをインストールできます。セルフマネージド型インストールとして追加する方法については、「GitHub」の「インストール」を参照してください。

v1.8.0 以降、CSI ドライバーの Pods を許容するようにテイントを設定できます。これを行うには、node.tolerations を使用して許容するカスタムのテイントセットを指定するか、node.tolerateAllTaints を使用してすべてのテイントを許容します。詳細については、Kubernetes ドキュメントの「テイントと容認」を参照してください。

eksctl

eksctl を使用して Amazon S3 CSI アドオンを追加するには

以下のコマンドを実行します。my-cluster をクラスターの名前に、111122223333 をアカウント ID に、AmazonEKS_S3_CSI_DriverRole前に作成した IAM ロールの名前に置き換えます。

eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster my-cluster \ --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole --force

--force オプションを削除した状態で Amazon EKS アドオンを更新する際に、そのアドオン設定のいずれかが現状の設定と競合している場合、その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。この設定のその他のオプションの詳細については、eksctl ドキュメントの「アドオン」を参照してください。Amazon EKS Kubernetes フィールド管理の詳細については、「Amazon EKS アドオンのためにカスタマイズできるフィールドを決定する」を参照してください。

設定ファイルをによって eksctl をカスタマイズできます。詳細については、eksctl ドキュメントの「Working with configuration values」を参照してください。次の例は、すべてのテイントを許容する方法を示しています。

# config.yaml ... addons: - name: aws-mountpoint-s3-csi-driver serviceAccountRoleARN: arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole configurationValues: |- node: tolerateAllTaints: true

AWS Management Console

  1. Amazon EKS コンソールを開きます。

  2. 左のナビゲーションペインで [クラスター] を選択します。

  3. Amazon S3 CSI アドオンの Mountpoint を設定するクラスターの名前を選択します。

  4. [アドオン] タブを選択します。

  5. [その他のアドオンを入手] を選択します。

  6. [アドオンを選択] ページで、次の操作を行います。

    1. [Amazon EKS アドオン] セクションで、[Mountpoint for Amazon S3 CSI ドライバー] チェックボックスを選択します。

    2. [Next] を選択します。

  7. [選択したアドオンセッティングの設定] ページで、次の操作を行います。

    1. 使用する [バージョン] を選択します。

    2. [IAM ロールを選択] で、Mountpoint for Amazon S3 CSI ドライバーの IAM ポリシー を アタッチした IAM ロールの名前を選択します。

    3. (オプション) [オプション設定] を展開した後、[競合解決方法] を更新します。[上書きする] を選択すると、既存のアドオンでの 1 つ以上の設定が、Amazon EKS アドオンの設定で上書きされます。このオプションが有効でない状態で既存の設定との競合が発生する場合は、オペレーションが失敗します。表示されたエラーメッセージを使用して、競合をトラブルシューティングできます。このオプションを選択する前に、自分で管理する必要のある設定が、Amazon EKS アドオンにより管理されていないことを確認してください。

    4. (オプション) [オプション設定] を展開した後、[設定値] フィールドで許容値を設定します。

    5. [Next] を選択します。

  8. [確認と追加] ページで、[作成] を選択します。アドオンのインストールが完了した後、インストールしたアドオンが表示されます。

AWS CLI

AWS CLI を使用して Mountpoint for Amazon S3 CSI アドオンを追加するには

以下のコマンドを実行します。my-cluster をクラスターの名前に、111122223333 をアカウント ID に、AmazonEKS_S3_CSI_DriverRole を前に作成したロールの名前に置き換えます。

aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \ --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole

--configuration-values フラグを使用してコマンドをカスタマイズできます。次の代替例は、すべてのテイントを許容する方法を示しています。

aws eks create-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver \ --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_S3_CSI_DriverRole \ --configuration-values '{"node":{"tolerateAllTaints":true}}'

Mountpoint for Amazon S3 を設定する

ほとんどの場合、Mountpoint for Amazon S3 はバケット名のみを設定できます。Mountpoint for Amazon S3 を設定する手順については、「GitHub」の「Mountpoint for Amazon S3 の設定」を参照してください。

サンプルアプリケーションをデプロイする

既存の Amazon S3 バケットのドライバーにデプロイできます。詳細については、「GitHub」の「静的プロビジョニング」を参照してください。

Mountpoint for Amazon S3 CSI ドライバーを削除する

Amazon EKS アドオンを削除するには、次の 2 つのオプションがあります。

  • クラスター上のアドオンソフトウェアを保持する — このオプションでは、すべての設定の Amazon EKS 管理が削除されます。また、Amazon EKS による更新の通知機能や、更新の開始後の Amazon EKS アドオンの自動更新機能も削除されます。ただし、クラスター上のアドオンソフトウェアは保持されます。このオプションを選択すると、アドオンは Amazon EKS アドオンではなく、セルフマネージド型インストールになります。このオプションを使用すると、アドオンのダウンタイムは発生しません。この手順のコマンドには、このオプションを使用します。

  • クラスターからアドオンソフトウェアを完全に削除する — クラスターから Amazon EKS アドオンを削除するのは、アドオンに依存するリソースがクラスター上にない場合のみとすることをお勧めします。このオプションを実行するには、この手順で使用するコマンドから --preserve を削除します。

アドオンに IAM アカウントが関連付けられている場合、その IAM アカウントは削除されません。

次のツールを使用して、Amazon S3 CSI アドオンを削除できます。

eksctl

eksctl を使用して Amazon S3 CSI アドオンを削除するには

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。

eksctl delete addon --cluster my-cluster --name aws-mountpoint-s3-csi-driver --preserve

AWS Management Console

  1. Amazon EKS コンソールを開きます。

  2. 左のナビゲーションペインで [クラスター] を選択します。

  3. Amazon EBS CSI アドオンを削除するクラスターの名前を選択します。

  4. [アドオン] タブを選択します。

  5. [Mountpoint for Amazon S3 CSI ドライバー] を選択します。

  6. [削除] を選択します。

  7. [削除: aws-mountpoint-s3-csi-driver] 確認ダイアログボックスで、以下の操作を行います。

    1. Amazon EKS でのアドオンの設定の管理を停止する場合は、[クラスターで保持する] を選択します。クラスターでアドオンソフトウェアを保持する場合は、この操作を実行します。これは、アドオンのすべての設定を自分で管理できるようにするためです。

    2. aws-mountpoint-s3-csi-driver と入力します。

    3. [削除] を選択します。

AWS CLI

AWS CLI を使用して Amazon S3 CSI アドオンを削除するには

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。

aws eks delete-addon --cluster-name my-cluster --addon-name aws-mountpoint-s3-csi-driver --preserve