

# AWS マネージドテーブルバケットの使用
<a name="s3-tables-aws-managed-buckets"></a>

AWS マネージドテーブルバケットは、[S3 Metadata](metadata-tables-overview.md) ジャーナルテーブルやライブインベントリテーブルなどの AWS マネージドテーブルを保存するように設計された特殊な Amazon S3 テーブルバケットです。直接作成して管理するカスタマー管理のテーブルバケットとは異なり、AWS マネージドテーブルバケットは、AWS マネージドテーブルを必要とする機能を設定すると、AWS により自動的にプロビジョニングされます。マネージドテーブルが作成されると、ソースバケットの名前に基づいて事前定義された名前空間に属します。この事前定義された名前空間は変更できません。

各 AWS アカウントには、命名規則 `aws-s3` に従って、リージョンごとに 1 つの AWS マネージドテーブルバケットがあります。このバケットは、そのリージョンのアカウントのリソースに関連付けられたすべてのマネージドテーブルの一元的な場所として機能します。

次の表は、AWS マネージドテーブルバケットとカスタマーマネージドテーブルバケットを比較したものです。


| **機能** | **AWS マネージドテーブルバケット** | **カスタマーマネージドテーブルバケット** | 
| --- | --- | --- | 
| 作成 | AWS のサービスによって自動的に作成される | これらを手動で作成する | 
| 命名 | 標準の命名規則を使用する (aws-s3) | 独自の名前を定義する | 
| テーブルの作成 | テーブルを作成できるのは AWS のサービスのみです | ユーザーはテーブルを作成できる | 
| 名前空間コントロール | 名前空間を作成または削除することはできない (すべてのテーブルは固定名前空間に属します) | ユーザーは名前空間を作成および削除できる | 
| アクセス | 読み取り専用アクセス | フルアクセス | 
| 暗号化 | デフォルトの暗号化 (SSE-S3) 設定を変更できるのは、カスタマーマネージド AWS Key Management Service (AWS KMS) キーで最初のテーブルを暗号化した場合のみ | バケットレベルのデフォルトの暗号化を設定し、いつでも変更できる | 
| メンテナンス | AWS のサービスによって管理されます | 自動メンテナンスはバケットレベルでカスタマイズできる | 

## AWS マネージドテーブルバケットを操作し、テーブルをクエリするためのアクセス許可
<a name="aws-managed-buckets-permissions"></a>

AWS マネージドテーブルバケットを使用するには、AWS マネージドテーブルバケットとテーブルを作成するアクセス許可、および AWS マネージドテーブルの暗号化設定を指定するためのアクセス許可が必要です。AWS マネージドテーブルバケット内のテーブルをクエリするためのアクセス許可も必要です。

以下のポリシーの例を使用すると、S3 Metadata 設定を通じて AWS マネージドテーブルバケットを作成できます。

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"PermissionsToWorkWithMetadataTables",
         "Effect":"Allow",
         "Action":[
             "s3:CreateBucketMetadataTableConfiguration",
             "s3tables:CreateTableBucket",
             "s3tables:CreateNamespace",
             "s3tables:CreateTable",
             "s3tables:GetTable",
             "s3tables:PutTablePolicy"
             "s3tables:PutTableEncryption",
             "kms:DescribeKey"
         ],
         "Resource":[
            "arn:aws:s3:::bucket/amzn-s3-demo-source-bucket",
            "arn:aws:s3tables:us-east-1:111122223333:bucket/aws-s3",
            "arn:aws:s3tables:us-east-1:111122223333:bucket/aws-s3/table/*",
            "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
         ]
       }
    ]
}
```

以下のポリシー例を使用すると、AWS マネージドテーブルバケット内のテーブルをクエリできます。

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"PermissionsToQueryMetadataTables",
         "Effect":"Allow",
         "Action":[
             "s3tables:GetTable",
             "s3tables:GetTableData",
             "s3tables:GetTableMetadataLocation",
             "kms:Decrypt"
         ],
         "Resource":[
            "arn:aws:s3tables:us-east-1:111122223333:bucket/aws-s3",
            "arn:aws:s3tables:us-east-1:111122223333:bucket/aws-s3/table/*",
            "arn:aws:kms:us-east-1:111122223333:key/01234567-89ab-cdef-0123-456789abcdef"
         ]
       }
    ]
}
```

## AWS マネージドテーブルバケットのテーブルのクエリ
<a name="querying-tables-in-aws-managed-table-buckets"></a>

S3 Tables でサポートされているアクセス方法とエンジンを使用して、AWS マネージドテーブルバケット内の AWS マネージドテーブルをクエリできます。次にクエリの例を示します。

------
#### [ Using standard SQL ]

次の例は、標準の SQL 構文を使用して AWS マネージドテーブルをクエリする方法を示しています。

```
SELECT *
FROM "s3tablescatalog/aws-s3"."b_amzn-s3-demo-source-bucket"."inventory"
LIMIT 10;
```

次の例は、AWS マネージドテーブルを独自のテーブルに結合する方法を示しています。

```
SELECT *
FROM "s3tablescatalog/aws-s3"."b_amzn-s3-demo-source-bucket"."inventory" a
JOIN "s3tablescatalog/amzn-s3-demo-table-bucket"."my_namespace"."my_table" b
ON a.key = b.key
LIMIT 10;
```

------
#### [ Using Spark ]

次のコード例は、Spark でテーブルをクエリする方法を示しています。

```
spark.sql("""
    SELECT *
    FROM ice_catalog.inventory a
    JOIN ice_catalog.my_table b
    ON a.key = b.key
""").show(10, true)
```

次の例は、AWS マネージドテーブルを別のテーブルに結合する方法を示しています。

```
SELECT *
FROM inventory a
JOIN my_table b
ON a.key = b.key
LIMIT 10;
```

------

## AWS マネージドテーブルバケットの暗号化
<a name="aws-managed-buckets-encryption"></a>

デフォルトでは、AWS マネージドテーブルバケットは、Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) を使用して暗号化されます。AWS マネージドテーブルバケットが作成された後、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_PutTableBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_PutTableBucketEncryption.html) を使用して、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用するようにバケットのデフォルトの暗号化設定を設定できます。

AWS マネージドテーブルの作成中に、SSE-KMS で暗号化することを選択できます。SSE-KMS を使用する場合は、AWS マネージドテーブルバケットと同じリージョンにカスタマーマネージド KMS キーを指定する必要があります。AWS マネージドテーブルの暗号化タイプは、テーブルの作成中にのみ設定できます。AWS マネージドテーブルの作成後は、暗号化設定を変更することはできません。

AWS マネージドテーブルバケットとそこに保存されているテーブルで同じ KMS キーを使用する場合は、テーブルの暗号化に使用したのと同じ KMS キーを使用して、作成後にテーブルバケットを暗号化してください。SSE-KMS を使用するようにテーブルバケットのデフォルトの暗号化設定を変更すると、それらの暗号化設定はそれ以後バケットに作成されるテーブルに使用されます。