

# S3 Tables 用のリソースベースのポリシー
<a name="s3-tables-resource-based-policies"></a>

S3 Tables は、テーブルバケットとテーブルへのアクセスを管理するためのリソースベースのポリシー (テーブルバケットポリシーとテーブルポリシー) を提供します。テーブルバケットポリシーを使用して、テーブルバケット、名前空間、またはテーブルレベルで API アクセス許可を付与できます。テーブルバケットにアタッチされたアクセス許可は、ポリシー定義に応じて、バケット内のすべてのテーブルまたはバケット内の特定のテーブルに適用できます。テーブルポリシーを使用して、テーブルレベルでアクセス許可を付与できます。

S3 Tables は、リクエストを受け取ると、まずリクエスタに必要なアクセス許可があることを確認します。リクエストを許可するかどうかを決定する際に、関連するすべてのアクセスポリシー、ユーザーポリシー、リソースベースのポリシー (IAM ユーザーポリシー、IAM ロールポリシー、テーブルバケットポリシー、テーブルポリシー) を評価します。例えば、テーブルバケットポリシーが、バケット内のテーブル (`DeleteTable` を含む) に対してすべてのアクションを実行するアクセス許可をユーザーに付与しているが、個々のテーブルにすべてのユーザーの `DeleteTable` アクションを拒否するテーブルポリシーがある場合、そのユーザーはテーブルを削除できません。

次のトピックでは、テーブルおよびテーブルバケットポリシーの例を示します。これらのポリシーを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

**注記**  
テーブルを変更するアクセス許可を付与するすべてのポリシーには、`GetTableMetadataLocation` がテーブルのルートファイルにアクセスするためのアクセス許可を含める必要があります。詳細については、[ を参照してください。`GetTableMetadataLocation`](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_GetTableMetadataLocation.html)
テーブルで書き込みまたは削除アクティビティを実行するたびに、アクセスポリシーに `UpdateTableMetadataLocation` へのアクセス許可を含めます。
バケットレベルのアクションへのアクセスを管理するにはテーブルバケットポリシーを使用し、テーブルレベルのアクションへのアクセスを管理するにはテーブルポリシーを使用することをお勧めします。複数のテーブルで同じアクセス許可のセットを定義する場合は、テーブルバケットポリシーを使用することをお勧めします。

**Topics**
+ [例 1: テーブルバケットポリシーで、アカウント内のバケットの `PutBucketMaintenanceConfiguration` へのアクセスを許可する](#table-bucket-policy-1)
+ [例 2: `hr` 名前空間に保存されているテーブルへの読み取り (SELECT) アクセスを許可するテーブルバケットポリシー](#table-bucket-policy-2)
+ [例 3: ユーザーがテーブルを削除できるようにするテーブルポリシー](#table-bucket-policy-3)

## 例 1: テーブルバケットポリシーで、アカウント内のバケットの `PutBucketMaintenanceConfiguration` へのアクセスを許可する
<a name="table-bucket-policy-1"></a>

次の例では、テーブルバケットポリシーは、`PutBucketMaintenanceConfiguration` へのアクセスを許可することで、IAM `data steward` がアカウント内のすべてのバケットの参照されていないオブジェクトを削除することを許可します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/datasteward"
            },
            "Action": [
                "s3tables:PutTableBucketMaintenanceConfiguration"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
        }
    ]
}
```

------

## 例 2: `hr` 名前空間に保存されているテーブルへの読み取り (SELECT) アクセスを許可するテーブルバケットポリシー
<a name="table-bucket-policy-2"></a>

次の例では、テーブルバケットポリシーは、AWS アカウント ID `123456789012` のユーザーである Jane がテーブルバケットの `hr` 名前空間に保存されているテーブルにアクセスすることを許可します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Jane"
            },
            "Action": [
                "s3tables:GetTableData",
                "s3tables:GetTableMetadataLocation"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/*",
            "Condition": {
                "StringLike": {
                    "s3tables:namespace": "hr"
                }
            }
        }
    ]
}
```

------

## 例 3: ユーザーがテーブルを削除できるようにするテーブルポリシー
<a name="table-bucket-policy-3"></a>

次の例は、IAM ロール `data steward` がテーブルを削除できるようにするテーブルポリシーです。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "DeleteTable",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/datasteward"
            },
            "Action": [
                "s3tables:DeleteTable",
                "s3tables:UpdateTableMetadataLocation",
                "s3tables:PutTableData",
                "s3tables:GetTableMetadataLocation"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/table/tableUUID"
        }
    ]
}
```

------