

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# Mountpoint for Amazon S3 ドライバーをデプロイする
<a name="s3-csi-create"></a>

[Mountpoint for Amazon S3 Container Storage Interface (CSI) ドライバー](https://github.com/awslabs/mountpoint-s3-csi-driver)を使用すると、Kubernetes アプリケーションはファイルシステムインターフェイスを介して Amazon S3 オブジェクトにアクセスできるため、アプリケーションコードを変更せずに高い総スループットを実現できます。

こちらの手順では、[Mountpoint for Amazon S3 CSI Amazon EKS ドライバー](s3-csi.md)をデプロイする方法を解説します。先に進む前に、[考慮事項](s3-csi.md#s3-csi-considerations)をご一読ください。

## 前提条件
<a name="s3-csi-prereqs"></a>
+ クラスターの既存の AWS Identity and Access Management (IAM) OpenID Connect (OIDC) プロバイダー。既に存在しているかどうかを確認する、または作成するには「[クラスターの IAM OIDC プロバイダーを作成するには](enable-iam-roles-for-service-accounts.md)」を参照してください。
+ ご使用のデバイスまたは AWS CloudShell で、AWS CLI のバージョン 2.12.3 以降がインストールおよび設定されていること。
+ デバイスまたは AWS クラウドシェル に、`kubectl` コマンドラインツールがインストールされていること。バージョンはご使用のクラスターの Kubernetes バージョンと同じか、1 つ前のマイナーバージョン以前、あるいはそれより新しいバージョンが使用できます。例えば、クラスターのバージョンが `1.29` である場合、`kubectl` のバージョン `1.28`、`1.29`、または `1.30` が使用できます。`kubectl` をインストールまたはアップグレードする方法については「[`kubectl` および `eksctl` のセットアップ](install-kubectl.md)」を参照してください。

## ステップ 1: IAM ポリシーを作成する
<a name="s3-create-iam-policy"></a>

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

以下のポリシー例は、Mountpoint の IAM アクセス許可に関する推奨事項に従っています。別の方法として、AWS マネージドポリシー [AmazonS3FullAccess](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonS3FullAccess$jsonEditor) を使用することもできますが、このマネージドポリシーでは Mountpoint に必要以上のアクセス権限が付与されます。

Mountpoint の推奨アクセス許可の詳細については、GitHub の「[Mountpoint IAM permissions](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md#iam-permissions)」を参照してください。

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

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

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

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

1. 以下の **[ポリシー]** をコピーして、エディタに貼り付けます。
**重要**  
`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 ユーザーガイド*」の「[ディレクトリバケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html)」を参照してください。

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

   ```
   {
       "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"
           }
       ]
   }
   ```

1. [**次へ**] を選択します。

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

1. [**Create policy**] (ポリシーの作成) を選択します。

## ステップ 2: IAM ロールを作成する
<a name="s3-create-iam-role"></a>

Mountpoint for Amazon S3 CSI ドライバーには、ファイルシステムとやり取りするための Amazon S3 アクセス許可が必要です。このセクションでは、IAM ロールを作成して、これらの権限を委任する方法を示します。このロールを作成するには、次のいずれかのツールを使用できます。
+  [eksctl](#eksctl_s3_store_app_data) 
+  [AWS マネジメントコンソール](#console_s3_store_app_data) 
+  [AWS CLI](#awscli_s3_store_app_data) 

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

### eksctl
<a name="eksctl_s3_store_app_data"></a>

 **`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 マネジメントコンソール
<a name="console_s3_store_app_data"></a>

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

1. 左のナビゲーションペインで、**[ロール]** を選択してください。

1. **[ロール]** ページで、**[ロールの作成]** を選択してください。

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

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

   1. **[Identity provider]** (ID プロバイダー) で、(Amazon EKS の **[Overview]** (概要) に示されているように) クラスターに **[OpenID Connect provider URL]** (OpenID Connect プロバイダーの URL) を選択します。

      URL が表示されない場合は、「[前提条件](#s3-csi-prereqs)」を確認してください。

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

   1. [**次へ**] を選択します。

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

   1. **[フィルターポリシー]** ボックスに AmazonS3CSIDriverPolicy と入力します。
**注記**  
このポリシーは、前のセクションで作成されました。

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

   1. [**次へ**] を選択します。

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

   1. **[ロール名]** に、AmazonEKS\$1S3\$1CSI\$1DriverRole などロールの一意の名前を入力します。

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

   1. [**ロールの作成**] を選択してください。

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

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

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

   ```
   "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-driver-sa"
   ```

1. `Condition` 演算子が `"StringEquals"` に設定されていることを確認します。

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

### AWS CLI
<a name="awscli_s3_store_app_data"></a>

1. クラスターの OIDC プロバイダーの URL を表示します。*マイクラスター* の部分は自分のクラスター名に置き換えます。コマンドの出力が `None` の場合は、「[前提条件](#s3-csi-prereqs)」を確認してください。

   ```
   aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text
   ```

   出力例は次のとおりです。

   ```
   https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
   ```

1. 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.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:s3-csi-driver-sa",
                "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
              }
            }
          }
        ]
      }
      ```

   1. ロールを作成します。*AmazonEKS\$1S3\$1CSI\$1DriverRole* を別の名前に変更できますが、変更する場合は、後の手順でも変更してください。

      ```
      aws iam create-role \
        --role-name AmazonEKS_S3_CSI_DriverRole \
        --assume-role-policy-document file://"aws-s3-csi-driver-trust-policy.json"
      ```

1. 次のコマンドを使用して IAM ロールを作成し、そのロールに IAM ポリシーをアタッチします。

   ```
   aws iam attach-role-policy \
     --policy-arn arn:aws:iam::aws:policy/AmazonS3CSIDriverPolicy \
     --role-name AmazonEKS_S3_CSI_DriverRole
   ```
**注記**  
IAM ポリシー `AmazonS3CSIDriverPolicy` は、前のセクションで作成しました。

1. ドライバーを 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
      ```

   1. クラスター上で Kubernetes サービスアカウントを作成します。Kubernetes サービスアカウント (`mountpoint-s3-csi-controller-sa`) は、*AmazonEKS\$1S3\$1CSI\$1DriverRole* という名前で作成した IAM ロールの注釈が付けられています。

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

## ステップ 3: Mountpoint for Amazon S3 CSI ドライバーをインストールする
<a name="s3-install-driver"></a>

Mountpoint for Amazon S3 CSI ドライバーは、Amazon EKS アドオンを使用してインストールできます。次のツールを使用して、アドオンをクラスターに追加できます。
+  [eksctl](#eksctl_s3_add_store_app_data) 
+  [AWS マネジメントコンソール](#console_s3_add_store_app_data) 
+  [AWS CLI](#awscli_s3_add_store_app_data) 

または、セルフマネージド型インストールとして Mountpoint for Amazon S3 CSI ドライバーをインストールできます。セルフマネージド型インストールを実行する方法については、GitHub の「[Installation](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/docs/install.md#deploy-driver)」を参照してください。

`v1.8.0` 以降、CSI ドライバーの Pod を許容するようにテイントを設定できます。これを行うには、`node.tolerations` を使用して許容するカスタムのテイントセットを指定するか、`node.tolerateAllTaints` を使用してすべてのテイントを許容します。詳細については、Kubernetes ドキュメントの「[テイントと容認](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)」を参照してください。

### eksctl
<a name="eksctl_s3_add_store_app_data"></a>

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

以下のコマンドを実行してください。*my-cluster* をクラスターの名前に、*111122223333* をアカウント ID に、*AmazonEKS\$1S3\$1CSI\$1DriverRole* を[前に作成した IAM ロール](#s3-create-iam-role)の名前に置き換えます。

```
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` ドキュメントの「[アドオン](https://eksctl.io/usage/addons/)」を参照してください。Amazon EKS Kubernetes フィールド管理の詳細については、「[Amazon EKS アドオンのためにカスタマイズできるフィールドを決定する](kubernetes-field-management.md)」を参照してください。

設定ファイルをによって `eksctl` をカスタマイズできます。詳細については、`eksctl` ドキュメントの「[Working with configuration values](https://eksctl.io/usage/addons/#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 マネジメントコンソール
<a name="console_s3_add_store_app_data"></a>

1. [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home#/clusters)を開きます。

1. 左のナビゲーションペインで **[Clusters]** (クラスター) を選択してください。

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

1. **[アドオン]** タブを選択してください。

1. **[その他のアドオンを入手]** を選択してください。

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

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

   1. [**次へ**] を選択します。

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

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

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

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

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

   1. [**次へ**] を選択します。

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

### AWS CLI
<a name="awscli_s3_add_store_app_data"></a>

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

以下のコマンドを実行してください。*my-cluster* をクラスターの名前に、*111122223333* をアカウント ID に、*AmazonEKS\$1S3\$1CSI\$1DriverRole* を前に作成したロールの名前に置き換えます。

```
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}}'
```

## ステップ 4: Mountpoint for Amazon S3 を設定する
<a name="s3-configure-mountpoint"></a>

ほとんどの場合、Mountpoint for Amazon S3 はバケット名のみで設定できます。Mountpoint for Amazon S3 を設定する手順については、GitHub の「[Configuring Mountpoint for Amazon S3](https://github.com/awslabs/mountpoint-s3/blob/main/doc/CONFIGURATION.md)」を参照してください。

## ステップ 5: サンプルアプリケーションをデプロイする
<a name="s3-sample-app"></a>

既存の Amazon S3 バケットのドライバーにデプロイできます。詳細については、GitHub の「[Static provisioning](https://github.com/awslabs/mountpoint-s3-csi-driver/blob/main/examples/kubernetes/static_provisioning/README.md)」を参照してください。