

# S3 Files ファイルシステムへのクライアントアクセスを制御する
<a name="s3-files-access-point-policy-examples"></a>

このトピックでは、ファイルシステムポリシー、IAM ID ポリシー、ネットワークコントロールを使用して、どのクライアントがどのアクセスポイントを経由して S3 Files ファイルシステムにアクセスできるかを制御する方法について説明します。

## S3 Files アクセスポイント
<a name="s3-files-access-point-policy-overview"></a>

S3 Files アクセスポイントは、大規模なデータアクセス管理を簡素化する、ファイルシステムへのアプリケーション固有のエントリポイントです。アクセスポイントを使用して、アクセスポイントを介して行われたすべてのファイルシステムリクエストにユーザー ID とアクセス許可を適用し、クライアントが指定されたルートディレクトリとそのサブディレクトリ内のデータにのみアクセスするように制限できます。

アクセスポイントは、クライアントがファイルシステムで実行できる操作の範囲を指定します。どのクライアントが使用できるかは指定しません。ファイルシステムポリシーで制限されていない限り、`s3files:ClientMount` アクセス許可を持つアカウントのロールは、ファイルシステム上の任意のアクセスポイントを介してマウントできます。どのクライアントがどのアクセスポイントを使用できるかを制御するには、ネットワークコントロール (接続の防止)、ファイルシステムリソースポリシー (ID ポリシーの変更後も有効な明示的な拒否)、IAM ID ポリシー (ロールに対する最小特権) の 3 つのレイヤーを組み合わせます。

S3 Files は、マウントのたびに、`s3files:ClientMount`、`s3files:ClientWrite`、および `s3files:ClientRootAccess` をファイルシステムポリシーに対して評価します。`s3files:AccessPointArn` 条件キーはマウントのたびに評価されるため、指定したもの以外のアクセスポイントを介したアクセスをブロックする単一の拒否ステートメントを記述できます。必要なアクションが拒否または付与されない場合、ファイルオペレーションが発生する前にマウントは失敗します。次の 2 つのセクションでは、ワークロードを特定のアクセスポイントに制限し、ファイルシステムへのワークロードアクセスを完全に拒否するという 2 つの一般的な要件について説明します。

## 特定のアクセスポイントへのアクセスを制限する
<a name="s3-files-access-point-policy-restrict"></a>

このパターンは、ロール (EC2 インスタンスロールや ECS タスクロールなど) が 1 つのアクセスポイントを介してのみファイルシステムをマウントする必要がある場合に適用されます。条件キーは `s3files:AccessPointArn` です。このポリシーでは、目的のアクセスポイントには `Allow` を、その他のすべてのアクセスポイントに対しては明示的な `Deny` をそれぞれ設定する必要があります。IAM 許可の付与は、ID ポリシーとリソースポリシー間で加算されます。明示的な拒否がない限り、別のポリシーで異なるアクセスポイントへのアクセスが許可される可能性があります。

**ファイルシステムポリシーの例:**

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowComputeAOnlyViaSpecificAP",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::ACCOUNT:role/compute-a-role" },
      "Action": [
        "s3files:ClientMount",
        "s3files:ClientWrite"
      ],
      "Condition": {
        "StringEquals": {
          "s3files:AccessPointArn": "arn:aws:s3files:REGION:ACCOUNT:file-system/fs-ID/access-point/fsap-ID"
        }
      }
    },
    {
      "Sid": "DenyComputeAIfWrongAP",
      "Effect": "Deny",
      "Principal": { "AWS": "arn:aws:iam::ACCOUNT:role/compute-a-role" },
      "Action": "s3files:Client*",
      "Condition": {
        "StringNotEquals": {
          "s3files:AccessPointArn": "arn:aws:s3files:REGION:ACCOUNT:file-system/fs-ID/access-point/fsap-ID"
        }
      }
    }
  ]
}
```

ロール `compute-a-role` は、リクエストが `fsap-ID` をターゲットとする場合にのみマウントおよび書き込みが許可され、このファイルシステムの他のすべてのアクセスポイントでは明示的に拒否されます。リソースポリシーの明示的な拒否は ID ポリシーによって上書きできないため、この制限は、後でより広範な IAM ポリシーがロールにアタッチされた場合でも保持されます。

**マウントコマンド:**

```
sudo mount -t s3files -o accesspoint=fsap-ID fs-ID:/ /mnt/s3files
```

## あらゆるアクセスポイントを介したワークロードアクセスを拒否する
<a name="s3-files-access-point-policy-deny"></a>

このパターンは、ロールがアカウントを S3 Files ファイルシステムと共有しているが、アクセスポイント経由でも直接でもマウントしてはならない場合に適用されます。すべてのアクセスポイントの使用をブロックするには、最も強力な分離保証から最も弱い分離保証に順序付けられた 3 つのレイヤーを適用します。

**1. ネットワークコントロール。**`compute-b-role` のインスタンスに TCP ポート 2049 のマウントターゲットへのアクセスを許可するセキュリティグループルールを削除します。ネットワークコントロールは、認証情報の交換が行われる前にマウント試行を防止するため、最も耐障害性のあるレイヤーです。誤って設定されたポリシーによってマウントアクセス許可が付与されていたとしても、NFS 接続はマウントターゲットに到達できません。

**2. ファイルシステムポリシーでの明示的な拒否:** ファイルシステムポリシーの拒否ステートメントは、後でロールに広範な IAM アクセス許可が付与された場合でも、マウントを拒否します。ファイルシステムのリソースポリシーは、`iam:PutRolePolicy` を持つユーザーがロールの ID ポリシーを変更した場合でも、その拒否が維持されるようにします。このレイヤーを変更できるのは、`s3files:PutFileSystemPolicy` を持つプリンシパルのみです。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyComputeBOnFileSystem",
      "Effect": "Deny",
      "Principal": { "AWS": "arn:aws:iam::ACCOUNT:role/compute-b-role" },
      "Action": "s3files:Client*",
      "Resource": "*"
    }
  ]
}
```

**3. IAM ID ポリシー。**`s3files:Client*` ロールにアクセス許可を付与しないでください。これは最後のレイヤーであり、`iam:PutRolePolicy` を持つすべての管理者がロールにマウントアクセス許可を付与できるため、最もミスが発生しやすいレイヤーです。

### ファイルシステムポリシーがない場合、どのロールも任意のアクセスポイントを介してマウントできます。
<a name="s3-files-access-point-policy-deny-no-resource-policy"></a>

ファイルシステムのリソースポリシーは、ID ポリシーを変更するアクセス許可のみを持つユーザーでは削除できない拒否設定を提供します。ファイルシステムポリシーがない場合、ID ポリシーに `s3files:ClientMount` が含まれているロールは、ファイルシステム上の任意のアクセスポイントを介してマウントできます。拒否ベースラインを持つすべてのファイルシステムにファイルシステムポリシーをアタッチし、ワークロードごとに許可ステートメントを追加することをお勧めします。

## アクセスポイント分離のベストプラクティス
<a name="s3-files-access-point-policy-best-practices"></a>

次の表は、一般的なアクセスポイントの分離目標の推奨アプローチをまとめたものです。


| 目標 | (推奨されるアプローチ) | 
| --- | --- | 
| ワークロードを単一のアクセスポイントに制限する | 特定のアクセスポイント ARN に対してロールを許可し、他のすべてのアクセスポイントに対しては明示的に拒否します。「特定のアクセスポイントへのアクセスを制限する」を参照してください。 | 
| 同じアカウント内のロールがファイルシステムをマウントできないようにブロックする | ポート 2049 へのネットワークアクセスを削除し、ファイルシステムポリシーで拒否し、IAM で許可しないようにします。 | 
| 同じファイルシステム上に複数のワークロードが存在し、それぞれが独自のアクセスポイントにスコープされている | ファイルシステムポリシーでは、ロールごとに 1 つの許可と拒否のペアを維持し、それぞれを異なるアクセスポイント ARN にスコープ設定します。 | 
| アクセスポイントを介したクロスアカウントアクセス | ファイルシステムポリシーを使用して、特定のアクセスポイント ARN に対してクロスアカウントロールを付与します。ID ポリシーのみに依存しないでください。 | 