

# S3 Files の前提条件
<a name="s3-files-prereq-policies"></a>

S3 Files の使用を開始する前に、以下の前提条件を満たしていることを確認してください。

## AWS アカウントとコンピューティングのセットアップ
<a name="s3-files-prereq-account-setup"></a>
+ アクティブな AWS アカウントがあります。
+ ファイルシステムを作成する AWS リージョンに、コンピューティングリソースと S3 汎用バケットがあります。詳細については、「[汎用バケットの作成](create-bucket-overview.md)」を参照してください。
+ S3 バケットでバージョニングが有効になっています。S3 Files では、ファイルシステムと S3 バケット間の変更を同期するために S3 バージョニングが必要です。詳細については、「[バケットでのバージョニングの有効化](manage-versioning-examples.md)」を参照してください。
+ S3 バケットは、Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) または AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) のいずれかの暗号化タイプを使用する必要があります。

## S3 Files クライアント
<a name="s3-files-prereq-client"></a>

Amazon EC2 で S3 Files を使用するには、Amazon EFS および Amazon S3 Files 用のツールの共有オープンソースコレクションであるクライアント `amazon-efs-utils` をインストールする必要があります。S3 Files を使用するには、`amazon-efs-utils` バージョン 3.0.0 以降が必要です。クライアントには、S3 ファイルシステムのマウントを簡素化し、ファイルシステムのマウントステータスをモニタリングするための Amazon CloudWatch メトリクスを有効にするマウントヘルパープログラムが含まれています。

### ステップ 1: クライアントをインストールする
<a name="s3-files-prereq-client-install"></a>
+ Secure Shell (SSH) を介して Amazon EC2 インスタンスのターミナルにアクセスし、適切なユーザー名でログインします。詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[EC2 インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)」を参照してください。
+ Amazon Linux を使用している場合は、以下を実行して Amazon リポジトリから efs-utils をインストールします。

  ```
  sudo yum -y install amazon-efs-utils
  ```
+ サポートされている他の Linux ディストリビューションを使用する場合は、以下を実行できます。

  ```
  curl https://amazon-efs-utils.aws.com/efs-utils-installer.sh | sudo sh -s -- --install
  ```
+ 他の Linux ディストリビューションについては、GitHub の amazon-efs-utils README にある「[他の Linux ディストリビューションでは](https://github.com/aws/efs-utils/?tab=readme-ov-file#on-other-linux-distributions)」を参照してください。

### ステップ 2: botocore をインストールする
<a name="s3-files-prereq-client-botocore"></a>

`amazon-efs-utils` クライアントは botocore を使用して、その他の AWS サービスと連携します。例えば、Amazon CloudWatch を使用してファイルシステムをモニタリングするには、botocore をインストールする必要があります。botocore のインストールとアップグレードの手順については、GitHub にある amazon-efs-utils README の「[botocore をインストールする](https://github.com/aws/efs-utils#install-botocore)」を参照してください。

### S3 Files で FIPS モードを有効化する
<a name="s3-files-prereq-client-fips"></a>

連邦情報処理規格 (FIPS) に準拠する必要がある場合は、クライアントで FIPS モードを有効にする必要があります。FIPS モードを有効にするには、オペレーティングシステム上の `s3files-utils.conf` ファイルを変更する必要があります。

S3 Files 用のクライアントで FIPS モードを有効にするには、次の手順に従います。

1. 任意のテキストエディタを使用して、`/etc/amazon/efs/s3files-utils.conf` ファイルを開きます。

1. 次のテキストを含む行を見つけます。

   ```
   fips_mode_enabled = false
   ```

1. テキストを次に変更します。

   ```
   fips_mode_enabled = true
   ```

1. 変更内容を保存します。

## IAM ロールとポリシー
<a name="s3-files-prereq-iam"></a>

S3 Files を使用するには、次の 2 つの目的で IAM ロールとアタッチされたポリシーを設定する必要があります。
+ ファイルシステムからバケットにアクセスする
+ AWS コンピューティングリソースへのファイルシステムのアタッチ

### ファイルシステムからバケットにアクセスするための IAM ロール
<a name="s3-files-prereq-iam-creation-role"></a>

S3 ファイルシステムを作成するときは、S3 バケットとの間で読み書きを行うために S3 Files が引き受ける IAM ロールを指定する必要があります。このロールにより、S3 Files はファイルシステムと S3 バケット間の変更を同期できます。このロールは、S3 Files で S3 バケットの変更を検出し、同期をトリガーするために使用する Amazon EventBridge ルールを管理するアクセス許可も付与します。また、ソースバケットのバケットポリシーがコンピューティングリソースからのアクセスを拒否しないようにする必要があります。

**注記**  
AWS マネジメントコンソールを使用してファイルシステムを作成すると、S3 Files は必要なアクセス許可を持つこの IAM ロールを自動的に作成します。

この IAM ロールには、以下が必要です。
+ インラインポリシーは次のとおりです。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "S3BucketPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:ListBucket",
                  "s3:ListBucketVersions"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}",
              "Condition": {
                  "StringEquals": {
                      "aws:ResourceAccount": "{{accountId}}"
                  }
              }
          },
          {
              "Sid": "S3ObjectPermissions",
              "Effect": "Allow",
              "Action": [
                  "s3:AbortMultipartUpload",
                  "s3:DeleteObject*",
                  "s3:GetObject*",
                  "s3:List*",
                  "s3:PutObject*"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}/*",
              "Condition": {
                  "StringEquals": {
                      "aws:ResourceAccount": "{{accountId}}"
                  }
              }
          },
          {
              "Sid": "UseKmsKeyWithS3Files",
              "Effect": "Allow",
              "Action": [
                  "kms:GenerateDataKey",
                  "kms:Encrypt",
                  "kms:Decrypt",
                  "kms:ReEncryptFrom",
                  "kms:ReEncryptTo"
              ],
              "Condition": {
                  "StringLike": {
                      "kms:ViaService": "s3.{{region}}.amazonaws.com",
                      "kms:EncryptionContext:aws:s3:arn": [
                          "arn:aws:s3:::{{bucket}}",
                          "arn:aws:s3:::{{bucket}}/*"
                      ]
                  }
              },
              "Resource": "arn:aws:kms:{{region}}:{{accountId}}:*"
          },
          {
              "Sid": "EventBridgeManage",
              "Effect": "Allow",
              "Action": [
                  "events:DeleteRule",
                  "events:DisableRule",
                  "events:EnableRule",
                  "events:PutRule",
                  "events:PutTargets",
                  "events:RemoveTargets"
              ],
              "Condition": {
                  "StringEquals": {
                      "events:ManagedBy": "elasticfilesystem.amazonaws.com"
                  }
              },
              "Resource": [
                  "arn:aws:events:*:*:rule/DO-NOT-DELETE-S3-Files*"
              ]
          },
          {
              "Sid": "EventBridgeRead",
              "Effect": "Allow",
              "Action": [
                  "events:DescribeRule",
                  "events:ListRuleNamesByTarget",
                  "events:ListRules",
                  "events:ListTargetsByRule"
              ],
              "Resource": [
                  "arn:aws:events:*:*:rule/*"
              ]
          }
      ]
  }
  ```

  プレースホルダーの値を独自の値にそれぞれ置き換えます。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/s3-files-prereq-policies.html)
+ S3 Files が IAM ロールを引き受けるのを許可する信頼ポリシー。S3 Files サービスが IAM ロールを引き受けることができるように、次の信頼ポリシーを IAM ロールに追加します。{{accountId}} および {{region}} を独自の値に置き換えます。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowS3FilesAssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": "elasticfilesystem.amazonaws.com"
              },
              "Action": "sts:AssumeRole",
              "Condition": {
                  "StringEquals": {
                      "aws:SourceAccount": "{{accountId}}"
                  },
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:s3files:{{region}}:{{accountId}}:file-system/*"
                  }
              }
          }
      ]
  }
  ```

### ファイルシステムを AWS コンピューティングリソースにアタッチするための IAM ロール
<a name="s3-files-prereq-iam-compute-role"></a>

S3 ファイルシステムをマウントするコンピューティングリソースには、コンピューティングリソースが S3 ファイルシステムおよびソース S3 バケットとやり取りできるようにするポリシーを含む IAM ロール (EC2 インスタンスプロファイルなど) がアタッチされている必要があります。また、ソースバケットのバケットポリシーがコンピューティングリソースからのアクセスを拒否しないようにする必要があります。

コンピューティングリソースにアタッチされた IAM ロールに次の 2 つのポリシーを追加します。
+ **コンピューティングリソースが S3 ファイルシステムに接続して操作するためのアクセス許可**

  IAM ロールには、マウントヘルパーが S3 ファイルシステムに接続して操作するためのアクセス許可が含まれている必要があります。コンピューティングリソースに S3 ファイルシステムへの読み取りおよび書き込みのフルアクセスを許可する場合は、`AmazonS3FilesClientFullAccess` マネージドポリシーなどの AWS マネージドポリシーをアタッチできます。読み取り専用アクセスの場合は、`AmazonS3FilesClientReadOnlyAccess` をアタッチできます。Amazon CloudWatch モニタリングを有効にする場合は、`AmazonElasticFileSystemUtils` マネージドポリシーをアタッチすることもできます。S3 Files で利用可能なマネージドポリシーの詳細と完全なリストについては、「[Amazon S3 Files の AWS マネージドポリシー](s3-files-security-iam-awsmanpol.md)」を参照してください。また、コンピューティングリソースの IAM ロールに `s3files:ClientMount` や `s3files:ClientWrite` (読み取り専用接続の場合は不要) などの個別の IAM アクセス許可を追加することで、これらのアクセス許可を付与することもできます。
+ **S3 オブジェクトへの読み取りアクセスをコンピューティングリソースに許可するインラインポリシー**

  以下のインラインポリシーを IAM ロールに追加します。このポリシーは、読み取りパフォーマンスを最適化するために、同じアカウントのリンクされた S3 バケットからオブジェクトを直接読み取るためのアクセス許可をコンピューティングリソースに付与します。{{bucket}} をご自身の S3 バケット名、またはプレフィックス付きのバケット名に置き換えます。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "S3ObjectReadAccess",
              "Effect": "Allow",
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Resource": "arn:aws:s3:::{{bucket}}/*"
          },
          {
              "Sid": "S3BucketListAccess",
              "Effect": "Allow",
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::{{bucket}}"
          }
      ]
  }
  ```

## セキュリティグループ
<a name="s3-files-prereq-security-groups"></a>

ファイルシステムとマウントターゲットが作成されたら、ファイルシステムの使用を開始するための適切なセキュリティグループを設定する必要があります。コンピューティングリソースとマウントターゲットの両方のセキュリティグループで、以下の表に示すように、必要なトラフィックを許可する必要があります。


| セキュリティグループ | ルールタイプ | プロトコル | ポート | 送信元/送信先 | 
| --- | --- | --- | --- | --- | 
| EC2 インスタンス | アウトバウンド | TCP | 2049 | マウントターゲットセキュリティグループ | 
| マウントターゲット | インバウンド | TCP | 2049 | EC2 インスタンスのセキュリティグループ | 