

# S3 Tables のセキュリティ
<a name="s3-tables-security-overview"></a>

 Amazon S3 には、さまざまなセキュリティ機能とツールが用意されています。以下は、S3 Tables でサポートされている機能とツールのリストです。これらのツールを適切に適用すると、リソースが保護され、目的のユーザーのみがリソースにアクセスできるようにするために役立ちます。

**アイデンティティベースのポリシー**  
[アイデンティティベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)は、IAM ユーザー、グループ、ロールにアタッチされます。アイデンティティベースのポリシーを使用すると、テーブルバケットまたはテーブルへのアクセス許可を IAM アイデンティティに付与できます。デフォルトでは、ユーザーとロールには、テーブルとテーブルバケットを作成および変更するアクセス許可はありません。また、S3 コンソール、AWS CLI、または Amazon S3 REST API を使用してタスクを実行することはできません。アカウント内に IAM ユーザー、グループ、およびロールを作成し、これらにアクセスポリシーをアタッチできます。その後、リソースへのアクセスを許可できます。テーブルバケットとテーブルを作成してアクセスするには、IAM 管理者が AWS Identity and Access Management (IAM) ロールまたはユーザーに必要なアクセス許可を付与する必要があります。詳細については、「[Access management for S3 Tables](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-setting-up.html)」を参照してください。

**リソースベースのポリシー**  
[リソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)をリソースにアタッチします。テーブルバケットとテーブルのリソースベースのポリシーを作成できます。テーブルバケットポリシーを使用して、テーブルバケットと名前空間レベルの API アクセス許可を制御できます。テーブルバケットポリシーを使用して、バケット内の複数のテーブルに対するテーブルレベルの API アクセス許可を制御することもできます。ポリシー定義に応じて、バケットにアタッチされたアクセス許可は、バケット内のすべてのテーブルまたは特定のテーブルに適用できます。テーブルポリシーを使用して、バケット内の個々のテーブルにテーブルレベルの API アクセス許可を付与することもできます。

S3 Tables は、テーブルバケットオペレーションまたはテーブルオペレーションを実行するリクエストを受け取ると、まずリクエスタに必要なアクセス許可があることを確認します。リクエストを許可するかどうかを決定する際に、関連するすべてのアクセスポリシー、ユーザーポリシー、リソースベースのポリシー (IAM ユーザーポリシー、IAM ロールポリシー、テーブルバケットポリシー、テーブルポリシー) を評価します。テーブルバケットポリシーとテーブルポリシーを使用すると、リソースへのアクセスをパーソナライズして、承認された ID のみがリソースにアクセスしてアクションを実行できるようにすることができます。詳細については、「[Access management for S3 Tables](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-setting-up.html)」を参照してください。

**S3 Tables の AWS Organizations サービスコントロールポリシー (SCP)。**  
サービスコントロールポリシー (SCP) の Amazon S3 Tables を使用して、組織内のユーザーへのアクセス許可を管理できます。IAM およびリソースポリシーと同様に、すべてのテーブルおよびバケットレベルのアクションは、ポリシーの `s3tables` 名前空間の一部として参照されます。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー (SCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。

**Topics**
+ [暗号化による S3 テーブルデータの保護](s3-tables-encryption.md)
+ [S3 Tables のアクセス管理](s3-tables-setting-up.md)
+ [S3 Tables の VPC 接続](s3-tables-VPC.md)
+ [S3 Tables のセキュリティに関する考慮事項と制限事項](s3-tables-restrictions.md)

# 暗号化による S3 テーブルデータの保護
<a name="s3-tables-encryption"></a>

# テーブルバケットでの AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用
<a name="s3-tables-kms-encryption"></a>

**Topics**
+ [テーブルとテーブルバケットでの SSE-KMS の仕組み](#kms-tables-how)
+ [テーブルとテーブルバケットでの SSE-KMS の適用とスコープ設定](tables-require-kms.md)
+ [テーブルとテーブルバケットの SSE-KMS 暗号化のモニタリングと監査](#kms-tables-audit)
+ [S3 Tables の SSE-KMS 暗号化のアクセス許可要件](s3-tables-kms-permissions.md)
+ [テーブルバケットでの AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の指定](s3-tables-kms-specify.md)

すべてのテーブルバケットには、デフォルトの暗号化設定があり、テーブルは Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) を使用して自動的に暗号化されます。この暗号化は、S3 テーブルバケット内のすべてのテーブルに適用され、費用はかかりません。

キーローテーションやアクセスポリシー付与を管理するなど、暗号化キーをより細かく制御する必要がある場合は、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用するようにテーブルバケットを設定できます。AWS KMS のセキュリティ制御は、暗号化関連のコンプライアンス要件を満たすのに役立ちます。SSE-KMS に関する詳細は、「[AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](UsingKMSEncryption.md)」を参照してください。

## テーブルとテーブルバケットでの SSE-KMS の仕組み
<a name="kms-tables-how"></a>

ディレクトリバケットでの SSE-KMS は、以下の点で汎用バケットでの SSE-KMS とは異なります。
+ テーブルバケットと個々のテーブルの暗号化設定を指定できます。
+ SSE-KMS では、カスタマーマネージドキーのみを使用できます。AWS マネージドキーはサポートされていません。
+ AWS KMS キーにアクセスするには、特定のロールと AWS サービスプリンシパルにアクセス許可を付与する必要があります。詳細については、「[S3 Tables の SSE-KMS 暗号化のアクセス許可要件](s3-tables-kms-permissions.md)」を参照してください。これには、以下へのアクセスの許可が含まれます。
  + S3 メンテナンスプリンシパル – 暗号化されたテーブルでテーブルメンテナンスを実行
  + S3 Tables 統合ロール – AWS 分析サービスで暗号化されたテーブルを使用
  + クライアントアクセスロール – Apache Iceberg クライアントから暗号化されたテーブルに直接アクセス
  + S3 メタデータプリンシパル – 暗号化された S3 メタデータテーブルを更新
+ 暗号化されたテーブルは、テーブルレベルのキーを使用して AWS KMS へのリクエスト数を最小限に抑え、SSE-KMS で暗号化されたテーブルの操作をよりコスト効率の高いものにします。

**テーブルバケットの SSE-KMS 暗号化**  
テーブルバケットを作成するときは、デフォルトの暗号化タイプとして SSE-KMS を選択し、暗号化に使用する特定の KMS キーを指定できます。テーブルバケット内に作成したすべてのテーブルは、テーブルバケットから暗号化設定を自動的に継承します。テーブルバケットのデフォルトの暗号化設定は、AWS CLI、S3 API、または AWS SDK を使用していつでも変更または削除できます。テーブルバケットの暗号化設定を変更すると、変更後の設定はバケット内に作成した新しいテーブルにのみ適用されます。既存のテーブルの暗号化設定は変更されません。詳細については、「[テーブルバケットの暗号化の指定](s3-tables-kms-specify.md#specify-kms-table-bucket)」を参照してください。

**テーブルの SSE-KMS 暗号化**  
バケットのデフォルトの暗号化設定に関係なく、個別のテーブルを別の KMS キーで暗号化することもできます。個別のテーブルの暗号化を設定するには、目的の暗号化キーをテーブルの作成時に指定する必要があります。既存のテーブルの暗号化を変更する場合は、目的のキーを使用してテーブルを作成し、古いテーブルから新しいテーブルにデータをコピーする必要があります。詳細については、「[テーブルの暗号化の指定](s3-tables-kms-specify.md#specify-kms-table)」を参照してください。

AWS KMS 暗号化を使用する場合、S3 Tables は、テーブルレベルの一意のデータキーを自動的に作成して各テーブルに関連する新しいオブジェクトを暗号化します。これらのキーの使用期間は限定され、暗号化オペレーション中の追加の AWS KMS リクエストの必要性を最小限に抑え、暗号化のコストを削減します。これは [SSE−KMS の S3 バケットキー](bucket-key.md#bucket-key-overview) に似ています。

# テーブルとテーブルバケットでの SSE-KMS の適用とスコープ設定
<a name="tables-require-kms"></a>

S3 Tables のリソースベースのポリシー、KMS キーポリシー、IAM アイデンティティベースのポリシー、またはこれらの任意の組み合わせを使用して、S3 テーブルとテーブルバケットでの SSE-KMS の使用を設定できます。テーブルのアイデンティティおよびリソースポリシーの詳細については、「[S3 Tables のアクセス管理](s3-tables-setting-up.md)」を参照してください。キーポリシーの作成方法については、「*AWS Key Management Service Developer Guide*」の「[Key policies](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)」を参照してください。以下の例は、ポリシーを使用して SSE-KMS を適用する方法を示しています。

## テーブルバケットポリシーを使用してすべてのテーブルに SSE-KMS を適用する
<a name="w2aac20c35c15b3c11b5b1"></a>

このテーブルバケットポリシーの例では、ユーザーが特定の AWS KMS キーでテーブルを暗号化しない限り、特定のテーブルバケット内にテーブルを作成できないようにします。このポリシーを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceKMSEncryption",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "s3tables:CreateTable"
      ],
      "Resource": [
        "arn:aws:s3tables:us-west-2:111122223333:bucket/example-table-bucket/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "s3tables:sseAlgorithm": "aws:kms",
          "s3tables:kmsKeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
      }
    }
  ]
}
```

------

## IAM ポリシーで SSE-KMS 暗号化を使用するようにユーザーに要求する
<a name="w2aac20c35c15b3c11b7b1"></a>

この IAM ID ポリシーでは、S3 Tables リソースを作成または設定するときに、特定の AWS KMS キーを暗号化に使用することをユーザーに要求します。このポリシーを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "RequireKMSKeyOnTables",
      "Action": [
          "s3tables:CreateTableBucket",
          "s3tables:PutTableBucketEncryption",
          "s3tables:CreateTable"
      ]
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
            "s3tables:sseAlgorithm": "aws:kms",
            "s3tables:kmsKeyArn": "<key_arn>"
        }
      }
    }
  ]
}
```

## KMS キーポリシーを使用してキーの使用を特定のテーブルバケットに制限する
<a name="w2aac20c35c15b3c11b9b1"></a>

この KMS キーポリシーの例では、特定のテーブルバケットの暗号化オペレーションにのみキーを使用することを特定のユーザーに許可します。このタイプのポリシーは、クロスアカウントシナリオでキーへのアクセスを制限するのに役立ちます。このポリシーを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "Id",
  "Statement": [
    {
      "Sid": "AllowPermissionsToKMS",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:root"
      },
      "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "kms:EncryptionContext:aws:s3:arn": "<table-bucket-arn>/*"
        }
      }
    }
  ]
}
```

------

## テーブルとテーブルバケットの SSE-KMS 暗号化のモニタリングと監査
<a name="kms-tables-audit"></a>

SSE-KMS で暗号化されたデータの AWS KMS キーの使用状況を監査するには、AWS CloudTrail ログを使用します。`GenerateDataKey` や `Decrypt` などの[暗号化オペレーション](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)に関するインサイトを得ることができます。CloudTrail は、イベント名、ユーザー名、イベントソースなど、検索をフィルタリングするための多数の[属性値](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html)をサポートしています。

CloudTrail イベントを使用して、Amazon S3 のテーブルとテーブルバケットへの暗号化設定リクエストを追跡できます。CloudTrail ログでは、以下の API イベント名が使用されます。
+ `s3tables:PutTableBucketEncryption`
+ `s3tables:GetTableBucketEncryption`
+ `s3tables:DeleteTableBucketEncryption`
+ `s3tables:GetTableEncryption`
+ `s3tables:CreateTable`
+ `s3tables:CreateTableBucket`

**注記**  
EventBridge はテーブルバケットではサポートされていません。

# S3 Tables の SSE-KMS 暗号化のアクセス許可要件
<a name="s3-tables-kms-permissions"></a>

S3 テーブルバケット内のテーブルで AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用する場合は、アカウント内のさまざまな ID にアクセス許可を付与する必要があります。少なくとも、アクセスアイデンティティと S3 Tables メンテナンスプリンシパルには、キーへのアクセス権が必要です。ユースケースに応じて他のアクセス許可が必要になります。

**必要な許可**   
KMS キーで暗号化されたテーブルにアクセスするには、そのキーに対する以下のアクセス許可が必要です。  
+ `kms:GenerateDataKey`
+ `kms:Decrypt`
テーブルで SSE-KMS を使用する場合、Amazon S3 Tables メンテナンスサービスプリンシパル (`maintenance.s3tables.amazonaws.com`) には、キーへのアクセス許可として `kms:GenerateDataKey` と `kms:Decrypt` が必要です。

**追加のアクセス許可**  
ユースケースに応じて、以下の追加のアクセス許可が必要です。  
+ **AWS 分析サービス統合のアクセス許可** – AWS 分析サービスで SSE-KMS で暗号化されたテーブルを使用する場合、統合ロールには KMS キーを使用するアクセス許可が必要です。
+ **直接アクセスのアクセス許可** – Amazon S3 Tables の Iceberg REST エンドポイントまたは Apache Iceberg の Amazon S3 Tables カタログなどの方法で SSE-KMS で暗号化されたテーブルを直接使用する場合は、クライアントが使用する IAM ロールにキーへのアクセス許可が必要です。
+ **S3 メタデータテーブルのアクセス許可** – S3 メタデータテーブルで SSE-KMS 暗号化を使用する場合は、S3 メタデータサービスプリンシパル (`metadata.s3.amazonaws.com`) に KMS キーへのアクセス許可が必要です。これにより、S3 メタデータは暗号化されたテーブルを更新して、最新のデータ変更を反映できます。

**注記**  
クロスアカウント KMS キーの場合、IAM ロールには、キーポリシーでのキーアクセス許可と明示的な認可の両方が必要です。KMS キーのクロスアカウントアクセス許可の詳細については、「*AWS Key Management Service Service Developer Guide*」の「[Allowing external AWS accounts to use a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)」を参照してください。

**Topics**
+ [S3 Tables メンテナンスサービスプリンシパルに KMS キーへのアクセス許可を付与する](#tables-kms-maintenance-permissions)
+ [統合された AWS 分析サービスにおいて暗号化されたテーブルを使用するアクセス許可を IAM プリンシパルに付与する](#tables-kms-integration-permissions)
+ [暗号化されたテーブルを直接使用するアクセス許可を IAM プリンシパルに付与する](#tables-kms-direct-permissions)
+ [S3 メタデータサービスプリンシパルに KMS キーを使用するアクセス許可を付与する](#tables-kms-metadata-permissions)

## S3 Tables メンテナンスサービスプリンシパルに KMS キーへのアクセス許可を付与する
<a name="tables-kms-maintenance-permissions"></a>

このアクセス許可は、SSE-KMS で暗号化されたテーブルを作成して、暗号化されたテーブルに対する圧縮、スナップショット管理、参照されていないファイルの削除などの自動テーブルメンテナンスを許可するために必要です。

**注記**  
SSE-KMS で暗号化されたテーブルの作成をリクエストするたびに、S3 Tables は `maintenance.s3tables.amazonaws.com` プリンシパルが KMS キーにアクセスできることを確認します。この確認を行うために、テーブルバケットに 0 バイトのオブジェクトが一時的に作成されます。このオブジェクトは、[参照されていないファイルの削除](s3-table-buckets-maintenance.md#s3-table-bucket-maintenance-unreferenced)メンテナンスオペレーションによって自動的に削除されます。暗号化に指定した KMS キーにメンテナンスアクセス権がない場合、createTable オペレーションは失敗します。

SSE-KMS で暗号化されたテーブルへのメンテナンスアクセスを許可するには、次のキーポリシーの例を使用できます。このポリシーでは、`maintenance.s3tables.amazonaws.com` サービスプリンシパルに対して、特定のテーブルバケット内のテーブルを暗号化および復号するための特定の KMS キーを使用するアクセス許可が付与されます。ポリシーを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableKeyUsage",
            "Effect": "Allow",
            "Principal": {
                "Service": "maintenance.s3tables.amazonaws.com"            
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/key-id",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws:s3:arn":"<table-or-table-bucket-arn>/*"
                }
            }
        }
    ]
}
```

------

## 統合された AWS 分析サービスにおいて暗号化されたテーブルを使用するアクセス許可を IAM プリンシパルに付与する
<a name="tables-kms-integration-permissions"></a>

AWS 分析サービスで S3 テーブルを使用するには、テーブルバケットを Amazon SageMaker Lakehouse と統合します。この統合により、AWS 分析サービスはテーブルデータを自動的に検出してアクセスできるようになります。統合の詳細については、「[Amazon S3 Tables と AWS 分析サービスの統合](s3-tables-integrating-aws.md)」を参照してください。

これらのサービスで SSE-KMS で暗号化されたテーブルを使用する場合、使用するロールには、暗号化オペレーションで AWS KMS キーを使用するアクセス許可が必要です。これらのアクセス許可は、統合中に作成した `S3TablesRoleForLakeFormation` ロール、または独自の IAM ロールに適用できます。

次のインライン IAM ポリシーの例を使用して、アカウント内の特定の KMS キーを暗号化オペレーションに使用するアクセス許可を `S3TablesRoleForLakeFormation` サービスロールに付与できます。ポリシーを使用するには、*入力用プレースホルダー値*を独自の値に置き換えます。

```
{
  "Sid": "AllowTableRoleAccess",
  "Effect": "Allow",
  "Principal": {
	"AWS": "arn:aws:iam::111122223333:role/service-role/S3TablesRoleForLakeFormation"
  },
  "Action": [
      "kms:GenerateDataKey", 
      "kms:Decrypt"
  ],
  "Resource": "<kms-key-arn>"
}
```

## 暗号化されたテーブルを直接使用するアクセス許可を IAM プリンシパルに付与する
<a name="tables-kms-direct-permissions"></a>

サードパーティーまたは直接アクセス方式を使用して暗号化されたテーブルを使用する場合は、使用するロールに対して KMS キーへのアクセスを許可する必要があります。以下の例は、IAM ポリシーまたは KMS キーポリシーを通じてアクセスを許可する方法を示しています。

------
#### [ IAM policy ]

このインラインポリシーを IAM ロールにアタッチして、KMS キーへのアクセスを許可します。このポリシーを使用するには、*入力用プレースホルダ値*を独自の KMS キー arn に置き換えます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowKMSKeyUsage",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ]
}
```

------

------
#### [ KMS key policy ]

このインラインポリシーを KMS キーにアタッチして、指定した AWS KMS ロールに対してキーの使用を許可します。このポリシーを使用するには、*入力用プレースホルダー値*を独自の IAM ロールに置き換えます。

```
{
    "Sid": "Allow use of the key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::<catalog-account-id>:role/<role-name>"
        ]
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
    ],
    "Resource": "*"
}
```

------

## S3 メタデータサービスプリンシパルに KMS キーを使用するアクセス許可を付与する
<a name="tables-kms-metadata-permissions"></a>

Amazon S3 に対して SSE-KMS で暗号化されたメタデータテーブルを更新し、これらのメタデータテーブルのメンテナンスを実行することを許可するには、次のキーポリシーの例を使用できます。このポリシーでは、`metadata.s3.amazonaws.com` および `maintenance.s3tables.amazonaws.com` サービスプリンシパルに対して、特定のキーを使用して特定のテーブルバケット内のテーブルを暗号化および復号することを許可します。ポリシーを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "EnableKeyUsage",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "maintenance.s3tables.amazonaws.com",
                    "metadata.s3.amazonaws.com"
                ]           
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "Condition": {
                "StringLike": {
                    "kms:EncryptionContext:aws:s3:arn":"<table-or-table-bucket-arn>/*"
                }
            }
        }
    ]
}
```

------

# テーブルバケットでの AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の指定
<a name="s3-tables-kms-specify"></a>

すべての Amazon S3 テーブルバケットにはデフォルトで暗号化が設定され、テーブルバケットに作成したすべての新しいテーブルは保管中に自動的に暗号化されます。Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) は、すべてのディレクトリバケットのデフォルトの暗号化設定です。別の暗号化タイプを指定する場合は、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用できます。

 `CreateTableBucket` または `CreateTable` リクエストで SSE-KMS 暗号化を指定することも、`PutTableBucketEncryption` リクエストでテーブルバケットのデフォルトの暗号化設定を指定することもできます。

**重要**  
SSE-KMS で暗号化したテーブルとテーブルバケットの自動メンテナンスを許可するには、KMS キーを使用するアクセス許可を maintenance.s3tables.amazonaws.com サービスプリンシパルに付与する必要があります。詳細については、「[S3 Tables の SSE-KMS 暗号化のアクセス許可要件](s3-tables-kms-permissions.md)」を参照してください。

## テーブルバケットの暗号化の指定
<a name="specify-kms-table-bucket"></a>

新しいテーブルバケットを作成するときに、デフォルトの暗号化タイプとして SSE-KMS を指定できます。例については、「[テーブルバケットの作成](s3-tables-buckets-create.md)」を参照してください。テーブルバケットを作成したら、REST API オペレーション、AWS SDK、AWS Command Line Interface (AWS CLI) を使用して、デフォルトの暗号化設定として SSE-KMS の使用を指定できます。

**注記**  
 デフォルトの暗号化タイプとして SSE-KMS を指定する場合、暗号化に使用するキーは S3 Tables のメンテナンスサービスプリンシパルに対してアクセスを許可する必要があります。メンテナンスサービスプリンシパルにアクセス権がない場合、そのテーブルバケットにテーブルを作成することはできません。詳細については、「[S3 Tables メンテナンスサービスプリンシパルに KMS キーへのアクセス許可を付与する](s3-tables-kms-permissions.md#tables-kms-maintenance-permissions)」を参照してください。

### AWS CLI の使用
<a name="w2aac20c35c15b3c17b9b9b1"></a>

次の AWS CLI コマンド例を使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

```
aws s3tables put-table-bucket-encryption \
    --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket; \
    --encryption-configuration '{
        "sseAlgorithm": "aws:kms",
        "kmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    }' \
    --region us-east-1
```

テーブルバケットのデフォルトの暗号化設定を削除するには、[DeleteTableBucketEncryption](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3TableBuckets_DeleteTableBucketEncryption.html) API オペレーションを使用できます。暗号化設定を削除すると、テーブルバケットに作成した新しいテーブルでは、デフォルトの SSE-S3 暗号化が使用されます。

## テーブルの暗号化の指定
<a name="specify-kms-table"></a>

SSE-KMS 暗号化は、クエリエンジン、REST API オペレーション、AWS SDK、AWS Command Line Interface (AWS CLI) を使用して新しいテーブルを作成するときに適用できます。テーブルの作成時に指定した暗号化設定は、テーブルバケットのデフォルトの暗号化設定よりも優先されます。

**注記**  
テーブルに SSE-KMS 暗号化を使用する場合、暗号化に使用するキーでは、S3 Tables メンテナンスサービスプリンシパルにアクセスを許可する必要があります。メンテナンスサービスプリンシパルにアクセス権がない場合、テーブルを作成することはできません。詳細については、「[S3 Tables メンテナンスサービスプリンシパルに KMS キーへのアクセス許可を付与する](s3-tables-kms-permissions.md#tables-kms-maintenance-permissions)」を参照してください。

****必要な アクセス許可****

暗号化されたテーブルを作成するには、以下のアクセス許可が必要です。
+ `s3tables:CreateTable`
+ `s3tables:PutTableEncryption`

## の使用AWS CLI
<a name="w2aac20c35c15b3c17c13b1"></a>

次の AWS CLI の例では、基本スキーマを使用して新しいテーブルを作成し、カスタマーマネージド AWS KMS キーを使用してテーブルを暗号化します。このコマンドを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

```
aws s3tables create-table \
  --table-bucket-arn "arn:aws:s3tables:Region:ownerAccountId:bucket/amzn-s3-demo-table-bucket" \
  --namespace "mydataset" \
  --name "orders" \
  --format "ICEBERG" \
  --encryption-configuration '{
    "sseAlgorithm": "aws:kms",
    "kmsKeyArn": "arn:aws:kms:Region:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
  }' \
  --metadata '{
    "iceberg": {
      "schema": {
        "fields": [
          {
            "name": "order_id",
            "type": "string",
            "required": true
          },
          {
            "name": "order_date",
            "type": "timestamp",
            "required": true
          },
          {
            "name": "total_amount",
            "type": "decimal(10,2)",
            "required": true
          }
        ]
      }
    }
  }'
```

データ保護とは、転送中 (Amazon S3 とのデータの送受信) と保管中 (Amazon S3 データセンター内のディスクへの保存) のデータを保護することを指します。S3 Tables は、HTTPS 経由で Transport Layer Security (1.2 以降) を使用して、転送中のデータを常に保護します。S3 テーブルバケットに保管中のデータを保護するには、以下のオプションを使用できます。

**Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)**  
すべての Amazon S3 テーブルバケットには、デフォルトで暗号化が設定されます。サーバー側の暗号化のデフォルトのオプションは、Amazon S3 マネージド キー (SSE-S3) を使用しています。この暗号化は、別の暗号化形式を指定しない限り、S3 テーブルバケット内のすべてのテーブルに無料で適用されます。一意のキーで各オブジェクトを暗号化します。追加の保護措置として、SSE-S3 は定期的にローテーションされるルートキーを使ってキーそのものを暗号化します。SSE-S3 は、利用可能な最強のブロック暗号の 1 つである 256 ビットの 高度暗号化規格 (AES-256) を使用して、データを暗号化します。

**AWS KMS キーによるサーバー側の暗号化 (SSE-KMS)**  
AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用するようにテーブルバケットまたはテーブルを設定することもできます。AWS KMS のセキュリティ制御は、暗号化関連のコンプライアンス要件を満たすのに役立ちます。SSE-KMS では、以下の操作が可能であり、暗号化キーをより細かく制御できます。  
+ KMS キーの作成、表示、編集、モニタリング、有効化または無効化、更新、削除のスケジュールを行う。
+ KMS キーの使用方法および使用者を制御するポリシーを定義する。
+ キーの使用状況を AWS CloudTrail で追跡して、KMS キーが適切に使用されていることを確認する。
S3 Tables は、SSE-KMS でのカスタマーマネージドキーを使用したテーブルの暗号化をサポートしています。AWS マネージドキーはサポートされていません。S3 テーブルとテーブルバケットで SSE-KMS を使用する方法の詳細については、「[テーブルバケットでの AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](s3-tables-kms-encryption.md)」を参照してください。

# S3 Tables のアクセス管理
<a name="s3-tables-setting-up"></a>

S3 Tables リソースには、テーブルバケットとそれらに含まれるテーブルが含まれます。リソースを作成した AWS アカウントのルートユーザー (リソース所有者) と、必要なアクセス許可を持つそのアカウント内の AWS Identity and Access Management (IAM) ユーザーは、作成したリソースにアクセスできます。リソース所有者は、リソースにアクセスできる他のユーザーと、ユーザーがリソースに対して実行できるアクションを指定します。Amazon S3 には、S3 リソースへのアクセスを他のユーザーに許可するために使用できるさまざまなアクセス管理ツールがあります。テーブルを AWS Amazon SageMaker Lakehouse と統合している場合は、Lake Formation を使用してテーブルと名前空間へのきめ細かなアクセスを管理することもできます。以下のトピックでは、S3 Tables のリソース、IAM アクション、条件キーの概要について説明します。また、S3 Tables のリソースベースポリシーとアイデンティティベースのポリシーの両方の例も示します。

**Topics**
+ [リソース](#s3-tables-resources)
+ [S3 Tables のアクション](#s3-tables-actions)
+ [S3 Tables の条件キー](#s3-tables-conditionkeys)
+ [S3 Tables の IAM アイデンティティベースのポリシー](s3-tables-identity-based-policies.md)
+ [S3 Tables 用のリソースベースのポリシー](s3-tables-resource-based-policies.md)
+ [S3 Tables の AWS マネージドポリシー](s3-tables-security-iam-awsmanpol.md)
+ [SQL セマンティクスを使用したアクセス権の付与](s3-tables-sql.md)
+ [Lake Formation を使用したテーブルまたはデータベースへのアクセスの管理](grant-permissions-tables.md)

## リソース
<a name="s3-tables-resources"></a>

S3 Tables リソースには、テーブルバケットとそれらに含まれるテーブルが含まれます。
+ テーブルバケット – テーブルバケットは、汎用 S3 バケットのセルフマネージドテーブルと比較して、テーブルとプロバイダーの 1 秒あたりのトランザクション (TPS) が高く、クエリスループットが向上するように特別に設計されています。テーブルバケットは、Amazon S3 汎用バケットと同じ耐久性、可用性、スケーラビリティ、パフォーマンス特性を提供します。
+ テーブル – テーブルバケット内のテーブルは Apache Iceberg 形式で保存されます。これらのテーブルは、Iceberg をサポートするクエリエンジンで標準 SQL を使用してクエリできます。

テーブルとテーブルバケットの Amazon リソースネーム (ARN) には、`s3tables` 名前空間、AWS リージョン、AWS アカウント ID、バケット名が含まれます。テーブルとテーブルバケットにアクセスしてアクションを実行するには、次の ARN 形式を使用する必要があります。
+ テーブル ARN 形式:

  `arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-bucket/table/demo-tableID`

## S3 Tables のアクション
<a name="s3-tables-actions"></a>

アイデンティティベースのポリシーまたはリソースベースのポリシーで、特定の IAM プリンシパルに対して、どの S3 Tables アクションを許可または拒否するかを定義します。テーブルアクションは、バケットおよびテーブルレベルの API オペレーションに対応しています。すべてのアクションは、一意の IAM 名前空間 `s3tables` の一部です。

ポリシーでアクションを使用する場合は、通常、同じ名前の API オペレーションまたは CLI コマンドへのアクセスを許可または拒否します。ただし、単独のアクションが複数のオペレーションへのアクセスを制御する場合もあります。例えば、`s3tables:GetTableData` アクションには、`GetObject`、`ListParts`、`ListMultiparts` API オペレーションのアクセス許可が含まれます。

テーブルバケットでサポートされているアクションは次のとおりです。IAM ポリシーまたはリソースポリシーの `Action` エレメントでは、以下のアクションを指定できます。


| アクション | 説明 | アクセスレベル | クロスアカウントアクセス | 
| --- | --- | --- | --- | 
| s3tables:CreateTableBucket | 新しいバケットを作成するアクセス許可を付与 | Write | いいえ | 
| s3tables:GetTableBucket | テーブルバケット ARN、テーブルバケット名、作成日を取得するアクセス許可を付与 | Write | はい | 
| s3tables:ListTableBuckets | このアカウント内のすべてのテーブルバケットを一覧表示するアクセス許可を付与 | Read | いいえ | 
| s3tables:CreateNamespace | テーブルバケットに名前空間を作成するアクセス許可を付与 | Write | はい | 
| s3tables:GetNamespace | 名前空間の詳細を取得するアクセス許可を付与 | Read | はい | 
| s3tables:ListNamespaces | テーブルバケット上のすべての名前空間を一覧表示するアクセス許可を付与 | Read | はい | 
| s3tables:DeleteNamespace | テーブルバケット内の名前空間を削除するアクセス許可を付与 | Write | はい | 
| s3tables:DeleteTableBucket | バケットを削除するアクセス許可を付与  | Write | はい  | 
| s3tables:PutTableBucketPolicy | バケットポリシーを追加または置き換えるアクセス許可を付与 | Permissions Management | いいえ | 
| s3tables:GetTableBucketPolicy | バケットポリシーを取得するアクセス許可を付与 | Read | いいえ | 
| s3tables:DeleteTableBucketPolicy | バケットポリシーを削除するアクセス許可を付与 | Permissions Management | いいえ | 
| s3tables:GetTableBucketMaintenanceConfiguration | テーブルバケットのメンテナンス設定を取得するアクセス許可を付与 | Read | はい  | 
| s3tables:PutTableBucketMaintenanceConfiguration | テーブルバケットのメンテナンス設定を追加または置き換えるアクセス許可を付与 | Write | はい | 
| s3tables:PutTableBucketEncryption | テーブルバケットのメンテナンス設定を追加または置換するアクセス許可を付与 | Write | いいえ | 
| s3tables:GetTableBucketEncryption | テーブルバケットの暗号化設定を取得するアクセス許可を付与 | Read | いいえ | 
| s3tables:DeleteTableBucketEncryption | テーブルバケットの暗号化設定を削除するアクセス許可を付与 | Write | いいえ | 

デーブルでは次のアクションがサポートされています。


| アクション | 説明 | アクセスレベル | クロスアカウントアクセス | 
| --- | --- | --- | --- | 
| s3tables:GetTableMaintenanceConfiguration | テーブルのメンテナンス設定を取得するアクセス許可を付与 | Read | はい | 
| s3tables:PutTableMaintenanceConfiguration |  テーブルのメンテナンス設定を追加または置き換えるアクセス許可を付与 | Write | はい | 
| s3tables:PutTablePolicy | テーブルポリシーを追加または置き換えるアクセス許可を付与 | Permissions Management | いいえ | 
| s3tables:GetTablePolicy | テーブルポリシーを取得するアクセス許可を付与 | Read | いいえ | 
| s3tables:DeleteTablePolicy | テーブルポリシーを削除するアクセス許可を付与 | Permissions management | いいえ | 
| s3tables:CreateTable | テーブルバケットのテーブルを作成するアクセス許可を付与 | Write | はい | 
| s3tables:GetTable | テーブル情報を取得するアクセス許可を付与 | Read | はい | 
| s3tables:GetTableMetadataLocation | テーブルルートポインタ (メタデータファイル) を取得するアクセス許可を付与 | Read | はい  | 
| s3tables:ListTables | テーブルバケット内のすべてのテーブルを一覧表示するアクセス許可を付与 | Read | はい  | 
| s3tables:RenameTable | テーブルの名前を変更するアクセス許可を付与 | Write | はい  | 
| s3tables:UpdateTableMetadataLocation | テーブルルートポインタ (メタデータファイル) を更新するアクセス許可を付与 | Write | はい  | 
| s3tables:GetTableData | テーブルバケットに保存されているテーブルメタデータとデータオブジェクトを読み取るアクセス許可を付与 | Read | はい | 
| s3tables:PutTableData | テーブルバケットに保存されているテーブルメタデータとデータオブジェクトを書き込むアクセス許可を付与 | Write | はい | 
| s3tables:GetTableEncryption  | テーブルの暗号化設定を取得するアクセス許可を付与 | Write | いいえ | 
| s3tables:PutTableEncryption  | テーブルに暗号化を追加するアクセス許可を付与 | Write | いいえ | 
| s3tables:DeleteTable | テーブルバケットからデータを削除するアクセス許可を付与 | Write | はい | 

テーブルレベルの読み取りおよび書き込みアクションを実行するために、S3 Tables は `GetObject` や `PutObject` などの Amazon S3 API オペレーションをサポートしています。次の表に、オブジェクトレベルのアクションのリストを示します。テーブルに読み取りおよび書き込みアクセス許可を付与する場合は、次のアクションを使用します。


| Action | S3 オブジェクト API | 
| --- | --- | 
| s3tables:GetTableData | GetObject, ListParts, HeadObject | 
| s3tables:PutTableData | PutObject, CreateMultipartUpload, CompleteMultipartUpload,  UploadPart, AbortMultipartUpload | 

例えば、ユーザーが `GetTableData` アクセス許可を持っている場合、メタデータファイル、マニフェスト、マニフェストリストファイル、parquet データファイルなど、テーブルに関連付けられているすべてのファイルを読み取ることができます。

## S3 Tables の条件キー
<a name="s3-tables-conditionkeys"></a>

S3 Tables は、[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_condition-keys.html)をサポートしています。

さらに、S3 Tables では、アクセスポリシーで使用できる以下の条件キーを定義します。


| 条件キー | 説明 | タイプ | 
| --- | --- | --- | 
|  s3tables:tableName |  テーブルバケット内のテーブルの名前でアクセスをフィルタリングします。`s3tables:tableName` 条件キーを使用して、この名前条件を満たすテーブルのみにユーザーまたはアプリケーションのアクセスを制限する IAM またはテーブルバケットポリシーを記述できます。  `s3tables:tableName` 条件キーを使用してアクセスを制御すると、テーブル名の変更がこれらのポリシーに影響を与える可能性があることに注意してください。 値の例: "s3tables:tableName":"department\$1"  | String | 
|  s3tables:namespace |  テーブルバケットで作成された名前空間でアクセスをフィルタリングします。 `s3tables:namespace` 条件キーを使用して、特定の名前空間の一部であるテーブルへのユーザーまたはアプリケーションのアクセスを制限する IAM、テーブル、またはテーブルバケットポリシーを記述できます。*値の例:* `"s3tables:namespace":"hr" `  `s3tables:namespace` 条件キーを使用してアクセスを制御すると、名前空間の変更がこれらのポリシーに影響を与える可能性があることに注意してください。  | String | 
|  s3tables:SSEAlgorithm |  テーブルの暗号化に使用するサーバー側の暗号化アルゴリズムでアクセスをフィルタリングします。 `s3tables:SSEAlgorithm` 条件キーを使用して、特定の暗号化タイプで暗号化されたテーブルにユーザーまたはアプリケーションのアクセスを制限する IAM、テーブル、またはテーブルバケットポリシーを記述できます。*値の例:* `"s3tables:SSEAlgorithm":"aws:kms" `  `s3tables:SSEAlgorithm` 条件キーを使用してアクセスを制御する場合、暗号化の変更がこれらのポリシーに影響を与える可能性がある点に注意することが重要です。  | String | 
|  s3tables:KMSKeyArn |  テーブルの暗号化に使用するキーの AWS KMS キー ARN でアクセスをフィルタリングする `s3tables:KMSKeyArn` 条件キーを使用して、特定の KMS キーで暗号化したテーブルにユーザーまたはアプリケーションのアクセスを制限する IAM、テーブル、またはテーブルバケットポリシーを記述できます。 `s3tables:KMSKeyArn` 条件キーを使用してアクセスを制御する場合、KMS キーの変更がこれらのポリシーに影響を与える可能性がある点に注意することが重要です。  | ARN | 

# S3 Tables の IAM アイデンティティベースのポリシー
<a name="s3-tables-identity-based-policies"></a>

デフォルトでは、ユーザーおよびロールにはテーブルとテーブルバケットを作成または変更するアクセス許可はありません。また、S3 コンソール、AWS Command Line Interface (AWS CLI)、または Amazon S3 REST API を使用してタスクを実行しません。テーブルバケットとテーブルを作成してアクセスするには、AWS Identity and Access Management (IAM) 管理者が IAM ロールまたはユーザーに必要なアクセス許可を付与する必要があります。これらサンプルの JSON ポリシードキュメントを使用して、IAM アイデンティティベースのポリシーを作成する方法については、『*IAM ユーザーガイド*』の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

次のトピックでは、IAM アイデンティティベースのポリシーの例を示します。次のポリシー例を使用する際は、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

**Topics**
+ [例 1: テーブルバケットの作成と使用のためのアクセスを許可する](#example-1-s3-tables-identity-based-policies)
+ [例 2: テーブルバケット内のテーブルを作成および使用するためのアクセスを許可する](#example-2-s3-tables-identity-based-policies)

## 例 1: テーブルバケットの作成と使用のためのアクセスを許可する
<a name="example-1-s3-tables-identity-based-policies"></a>

**.**

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowBucketActions",
            "Effect": "Allow",
            "Action": [
                "s3tables:CreateTableBucket",
                "s3tables:PutTableBucketPolicy",
                "s3tables:GetTableBucketPolicy",
                "s3tables:ListTableBuckets",
                "s3tables:GetTableBucket"
            ],
            "Resource": "arn:aws:s3tables:us-east-1:111122223333:bucket/*"
        }
    ]
}
```

------

## 例 2: テーブルバケット内のテーブルを作成および使用するためのアクセスを許可する
<a name="example-2-s3-tables-identity-based-policies"></a>

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowBucketActions",
            "Effect": "Allow",
            "Action": [
                "s3tables:GetTableBucket",
                "s3tables:ListTables",
                "s3tables:CreateTable",
                "s3tables:PutTableData",
                "s3tables:GetTableData",
                "s3tables:GetTable",
                "s3tables:GetTableMetadataLocation",
                "s3tables:UpdateTableMetadataLocation",
                "s3tables:GetNamespace",
                "s3tables:CreateNamespace",
                "s3tables:ListNamespaces"
            ],
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/table/*"
            ]
        }
    ]
}
```

------

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

------

# S3 Tables の AWS マネージドポリシー
<a name="s3-tables-security-iam-awsmanpol"></a>

AWS マネージドポリシーは、AWS が作成および管理するスタンドアロンポリシーです。AWS マネージドポリシーは、多くの一般的なユースケースに対してアクセス許可を提供するように設計されているため、ユーザー、グループ、ロールへのアクセス許可の割り当てを開始できます。

AWS マネージドポリシーは、ご利用の特定のユースケースに対して最小特権のアクセス許可を付与しない場合があることにご注意ください。これは、すべての AWS ユーザーが使用できるようになるのを避けるためです。ユースケースに固有の[カスタマー管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)を定義して、アクセス許可を絞り込むことをお勧めします。

AWS マネージドポリシーで定義されたアクセス許可は変更できません。AWS が AWS マネージドポリシーに定義されているアクセス許可を更新すると、更新はポリシーがアタッチされているすべてのプリンシパルアイデンティティ (ユーザー、グループ、ロール) に影響します。新しい AWS のサービス を起動するか、既存のサービスで新しい API オペレーションが使用可能になると、AWS が AWS マネージドポリシーを更新する可能性が最も高くなります。

詳細については、「*IAM ユーザーガイド*」の「[AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)」を参照してください。

## AWS マネージドポリシー: AmazonS3TablesFullAccess
<a name="s3-tables-security-iam-awsmanpol-amazons3tablesfullaccess"></a>

`AmazonS3TablesFullAccess` ポリシーを IAM IDにアタッチできます。このポリシーは、Amazon S3 Tables への完全なアクセスを可能にするアクセス許可を付与します。このポリシーの詳細については、「[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesFullAccess.html)」を参照してください。

## AWS マネージドポリシー: AmazonS3TablesReadOnlyAccess
<a name="s3-tables-security-iam-awsmanpol-amazons3readonlyaccess"></a>

`AmazonS3TablesReadOnlyAccess` ポリシーを IAM IDにアタッチできます。このポリシーは、Amazon S3 Tables への読み取り専用アクセスを可能にするアクセス許可を付与します。このポリシーの詳細については、「[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesReadOnlyAccess.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesReadOnlyAccess.html)」を参照してください。

## AWS マネージドポリシー: AmazonS3TablesLakeFormationServiceRole
<a name="s3-tables-security-iam-awsmanpol-amazons3tableslakeformationservicerole"></a>

`AmazonS3TablesLakeFormationServiceRole` ポリシーを IAM IDにアタッチできます。このポリシーは、AWS Lake Formation サービスロールに S3 Tables へのアクセスを許可するアクセス許可を付与します。AWS KMS アクセス許可は、Lake Formation が暗号化されたテーブルにアクセスできるようにするために使用されます。このポリシーの詳細については、「[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesLakeFormationServiceRole.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonS3TablesLakeFormationServiceRole.html)」を参照してください。

## AWS マネージドポリシーに対する Amazon S3 Tables の更新
<a name="s3-tables-security-iam-awsmanpol-updates"></a>

Amazon S3 Tables の AWS マネージドポリシーの更新に関する詳細を、S3 Tables がこれらの変更の追跡を開始した以降の分について表示します。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  Amazon S3 Tables が `AmazonS3TablesFullAccess` を更新しました。  |  S3 Tables で、`AmazonS3TablesFullAccess` という AWS マネージドポリシーが更新されました。この更新により、S3 Tables レプリケーションサービスにロールを渡すアクセス許可が付与されます。  |  2025 年 12 月 2 日  | 
|  Amazon S3 Tables に `AmazonS3TablesLakeFormationServiceRole` が追加されました。  |  S3 Tables に、`AmazonS3TablesLakeFormationServiceRole` という新しい AWS 管理ポリシーが追加されました。このポリシーは、Lake Formation サービスロールに S3 Tables へのアクセスを許可するアクセス許可を付与します。  | 2025 年 5 月 19 日 | 
|  Amazon S3 Tables に `AmazonS3TablesFullAccess` が追加されました。  |  S3 Tables に、`AmazonS3TablesFullAccess` という新しい AWS 管理ポリシーが追加されました。このポリシーは、Amazon S3 Tables への完全なアクセスを可能にするアクセス許可を付与します。  | 2024 年 12 月 3 日 | 
|  Amazon S3 Tables に `AmazonS3TablesReadOnlyAccess` が追加されました。  |  S3 Tables に、`AmazonS3TablesReadOnlyAccess` という新しい AWS 管理ポリシーが追加されました。このポリシーは、Amazon S3 Tables への読み取り専用アクセスを可能にするアクセス許可を付与します。  | 2024 年 12 月 3 日 | 
|  Amazon S3 Tables で変更の追跡を開始しました。  |  Amazon S3 Tables が AWS マネージドポリシーの変更の追跡を開始しました。  | 2024 年 12 月 3 日 | 

# SQL セマンティクスを使用したアクセス権の付与
<a name="s3-tables-sql"></a>

テーブルおよびテーブルバケットポリシーで SQL セマンティクスを使用して、テーブルにアクセス許可を付与できます。使用できる SQL セマンティクスの例は、`CREATE`、`INSERT`、`DELETE`、`UPDATE`、`ALTER` です。次の表は、ユーザーにアクセス許可を付与するために使用できる SQL セマンティクスに関連付けられた API アクションのリストを示しています。

S3 Tables は、SQL セマンティクスを使用したアクセス許可を部分的にサポートしています。例えば、`CreateTable` API はテーブルバケットに空のテーブルのみを作成します。テーブルスキーマを設定するには、`UpdateTableMetadata`、`PutTableData`、`GetTableMetadataLocation` などの追加のアクセス許可が必要です。これらの追加のアクセス許可は、テーブルに行を挿入するためのアクセス権もユーザーに付与することを意味します。SQL セマンティクスのみに基づいてアクセスを管理する場合は、[AWS Lake Formation](https://docs.aws.amazon.com/lake-formation/latest/dg/what-is-lake-formation.html) または S3 Tables と統合されたサードパーティーソリューションを使用することをお勧めします。


| テーブルレベルのアクティビティ | IAM アクション | 
| --- | --- | 
| SELECT | s3tables:GetTableData, s3tables:GetTableMetadataLocation | 
| CREATE | s3tables:CreateTable, s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation,  | 
| INSERT | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation | 
| UPDATE | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation | 
| ALTER,RENAME | s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation, s3tables:RenameTable  | 
| DELETE,DROP | s3tables:DeleteTable, s3tables:UpdateTableMetadataLocation, s3tables:PutTableData, s3tables:GetTableMetadataLocation  | 

**注記**  
テーブルバケットからテーブルを削除するには、`s3tables:DeleteTable` アクセス許可が必要です。このアクセス許可により、テーブルとそれに関連するすべてのデータとメタデータを完全に削除できます。削除オペレーションは元に戻せないため、このアクセス許可を慎重に使用してください。

# Lake Formation を使用したテーブルまたはデータベースへのアクセスの管理
<a name="grant-permissions-tables"></a>

テーブルバケットが AWS 分析サービスと統合されると、Lake Formation はテーブルへのアクセスを管理し、各 IAM プリンシパル (ユーザーまたはロール) にアクションを実行する権限を付与する必要があります。Lake Formation は、データカタログリソースのきめ細かなアクセスコントロールを可能にする独自のアクセス許可モデル (Lake Formation 許可) を使用します。

詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Overview of Lake Formation permissions](https://docs.aws.amazon.com//lake-formation/latest/dg/lf-permissions-overview.html)」を参照してください。

AWS Lake Formation には、2 つの主な許可タイプがあります。

1. メタデータに対するアクセス許可は、データカタログ内でメタデータデータベースとテーブルを作成、読み取り、更新、削除できるかどうかを制御します。

1. 基になるデータに対するアクセス許可は、データカタログリソースの参照先となる Amazon S3 の場所にデータを読み書きできるかどうかを制御します。

Lake Formation では、独自のアクセス許可モデルと IAM アクセス許可モデルを組み合わせて使用して、データカタログリソースと基になるデータへのアクセスを制御します。
+ データカタログリソースまたは基になるデータへのアクセスリクエストが成功するには、そのリクエストが IAM と Lake Formation の両方によるアクセス許可のチェックに合格する必要があります。
+ IAM アクセス許可は Lake Formation へのアクセス、AWS Glue の API とリソースへのアクセスを制御し、Lake Formation 許可はデータカタログリソース、Amazon S3 ロケーション、基になるデータへのアクセスを制御します。

Lake Formation 許可は付与されたリージョン内でのみ適用されます。プリンシパルが Lake Formation 許可を付与されるには、データレイク管理者または必要なアクセス許可を持つ別のプリンシパルによって認可される必要があります。

**注記**  
テーブルバケット統合を実行したユーザーである場合は、テーブルに対する Lake Formation 許可が既に付与されています。テーブルにアクセスする唯一のプリンシパルである場合は、このステップをスキップできます。テーブルに対する Lake Formation 許可を他の IAM プリンシパルに付与するだけで済みます。これにより、クエリを実行するときに他のプリンシパルがテーブルにアクセスできるようになります。詳細については、「[テーブルまたはデータベースに対する Lake Formation アクセス許可の付与](#grant-lf-table)」を参照してください。

## テーブルまたはデータベースに対する Lake Formation アクセス許可の付与
<a name="grant-lf-table"></a>

Lake Formation コンソールまたは AWS CLI を通じて、テーブルバケット内のテーブルまたはデータベースに対する Lake Formation 許可をプリンシパルに付与できます。

**注記**  
データカタログリソースに対する Lake Formation のアクセス許可を外部アカウントに付与するか、または別のアカウントの IAM プリンシパルに直接付与する場合、Lake Formation は AWS Resource Access Manager (AWS RAM) サービスを使用してリソースを共有します。付与対象アカウントが付与する側のアカウントと同じ組織内にある場合、付与対象アカウントはその共有リソースをただちに使用できるようになります。付与対象アカウントが同じ組織内にない場合は、AWS RAM が付与対象アカウントに対して、リソース付与を受け入れる、または拒否するための招待を送信します。その後、共有リソースを利用可能にするために、付与対象アカウントのデータレイク管理者が AWS RAM コンソールまたは AWS CLI を使用して招待を承諾する必要があります。クロスアカウントデータ共有の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Lake Formation でのクロスアカウントデータ共有](https://docs.aws.amazon.com/lake-formation/latest/dg/cross-account-permissions.html)」を参照してください。

------
#### [ Console ]

1. [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で AWS Lake Formation コンソールを開き、データレイク管理者としてサインインします。データレイク管理者の作成方法の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[データレイク管理者を作成する](https://docs.aws.amazon.com/lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)」を参照してください。

1. ナビゲーションペインで、**[データアクセス許可]**、**[付与]** の順に選択します。

1. **[アクセス許可の付与]** ページの **[プリンシパル]** で、次のいずれかを実行します。
   + Amazon Athena または Amazon Redshift の場合は、**[IAM ユーザーとロール]** を選択し、さらにクエリに使用する IAM プリンシパルを選択します。
   + Amazon Data Firehose の場合は、**[IAM ユーザーとロール]** を選択した後、テーブルへのストリーミング用に作成したサービスロールを選択します。
   + Quick の場合は、**[SAML ユーザーとグループ]** を選択し、Quick 管理者ユーザーの Amazon リソースネーム (ARN) を入力します。
   + AWS Glue Iceberg REST エンドポイントアクセスの場合は、**[IAM ユーザーおよびロール]** を選択し、クライアント用に作成した IAM ロールを選択します。詳細については、[クライアント用の IAM ロールを作成する](s3-tables-integrating-glue-endpoint.md#glue-endpoint-create-iam-role)を参照してください。

1. **[LF タグまたはカタログリソース]** で、**[名前付きのデータカタログリソース]** を選択します。

1. **[カタログ]** で、テーブルバケットを統合したときに作成したサブカタログ (`account-id:s3tablescatalog/amzn-s3-demo-bucket` など) を選択します。

1. **[データベース]** で、作成した S3 テーブルバケット名前空間を選択します。

1. (オプション) **[テーブル]** で、テーブルバケットに作成した S3 テーブルを選択します。
**注記**  
Athena クエリエディタで新しいテーブルを作成する場合は、テーブルを選択しないでください。

1. 次のいずれかを行います。
   + 前のステップでテーブルを指定した場合は、**[テーブルのアクセス許可]** で **[Super]** を選択します。
   + 前のステップでテーブルを指定しなかった場合は、**[データベースのアクセス許可]** に進みます。クロスアカウントデータ共有の場合は、**[Super]** を選択して、データベースに対するすべてのアクセス許可を他のプリンシパルに付与することはできません。代わりに、**[Describe]** などのよりきめ細かなアクセス許可を選択します。

1. **[付与]** を選択します。

------
#### [ CLI ]

1. 次の AWS CLI コマンドをデータレイク管理者として実行していることを確認してください。詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[データレイク管理者を作成する](https://docs.aws.amazon.com//lake-formation/latest/dg/initial-lf-config.html#create-data-lake-admin)」を参照してください。

1. 次のコマンドを実行して、S3 テーブルバケットのテーブルに対する Lake Formation 許可を IAM プリンシパルに付与し、テーブルにアクセスします。この例を実行するには、*`user input placeholders`* をユーザー自身の情報に置き換えます。

   ```
   aws lakeformation grant-permissions \
   --region us-east-1 \
   --cli-input-json \
   '{
       "Principal": {
           "DataLakePrincipalIdentifier": "user or role ARN, for example, arn:aws:iam::account-id:role/example-role"
       },
       "Resource": {
           "Table": {
               "CatalogId": "account-id:s3tablescatalog/amzn-s3-demo-bucket",
               "DatabaseName": "S3 table bucket namespace, for example, test_namespace",
               "Name": "S3 table bucket table name, for example test_table"
           }
       },
       "Permissions": [
           "ALL"
       ]
   }'
   ```

------

# S3 Tables の VPC 接続
<a name="s3-tables-VPC"></a>

S3 Tables のすべてのテーブルは Apache Iceberg 形式で、2 種類の S3 オブジェクトで構成されます。これら 2 種類のオブジェクトは、異なる時点でデータファイルに関する情報を追跡するデータとメタデータファイルを保存するデータファイルです。すべてのテーブルバケット、名前空間、テーブルオペレーション (`CreateNamespace`、`CreateTable` など) は S3 Tables エンドポイント (`s3tables.region.amazonaws.com`) を介してルーティングされ、データとメタデータファイルを読み書きするすべてのオブジェクトレベルのオペレーションは引き続き S3 サービスエンドポイント (`s3.region.amazonaws.com`) を介してルーティングされます。

S3 Tables にアクセスするために、Amazon S3は AWS PrivateLink を使用して、ゲートウェイエンドポイントとインターフェイスエンドポイントの 2 つのタイプの VPC エンドポイントをサポートしています。ゲートウェイエンドポイントは、AWS ネットワーク経由で VPC から S3 にアクセスするために、ルートテーブルで指定するゲートウェイです。インターフェイスエンドポイントは、プライベート IP アドレスを使用して、VPC 内、オンプレミス、または VPC ピアリングや AWS Transit Gateway を使用する別の AWS リージョンにある VPC から Amazon S3 にリクエストをルーティングすることにより、ゲートウェイエンドポイントの機能を拡張します。

VPC から S3 Tables にアクセスするには、2 つの VPC エンドポイント (1 つは S3 用、もう 1 つは S3 Tables 用) を作成することをお勧めします。ファイル (オブジェクト) レベルのオペレーションを S3 にルーティングするゲートウェイまたはインターフェイスエンドポイント、およびバケットおよびテーブルレベルのオペレーションを S3 Tables にルーティングするインターフェイスエンドポイントを作成できます。S3 を使用して、ファイルレベルのリクエストに VPC エンドポイントを作成して使用できます。詳細については、「*AWS PrivateLink ユーザーガイド*」の「[Gateway endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html)」を参照してください。

AWS PrivateLink を使用して S3 Tables のエンドポイントを作成および操作する方法の詳細については、以下のトピックを参照してください。VPC インターフェイスエンドポイントを作成するには、*AWS PrivateLink ガイド*の「[VPC エンドポイントの作成](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)」を参照してください。

**Topics**
+ [S3 Tables の VPC エンドポイントの作成](#s3-tables-endpoints)
+ [AWS CLI を使用したエンドポイントを介するテーブルバケットとテーブルへのアクセス](#s3-tables-endpoints-cli-sdks)
+ [クエリエンジン使用時の VPC ネットワークの設定](#s3-tables-query-engine)
+ [デュアルスタックエンドポイントを使用したテーブルとテーブルバケットへのアクセス](#s3-tables-dual-stack-endpoints)
+ [VPC ネットワーク内の S3 Tables へのアクセスの制限](#s3-tables-VPC-policy)

## S3 Tables の VPC エンドポイントの作成
<a name="s3-tables-endpoints"></a>

VPC エンドポイントを作成すると、S3 Tables はエンドポイント固有の 2 つのタイプの DNS 名 (リージョンおよびゾーン) を生成します。
+ リージョン DNS 名は次の形式です。`VPCendpointID.s3tables.AWSregion.vpce.amazonaws.com`。例えば、VPC エンドポイント ID `vpce-1a2b3c4d` の場合、生成される DNS 名は `vpce-1a2b3c4d-5e6f.s3tables.us-east-1.vpce.amazonaws.com` に似ている場合があります。
+ ゾーン DNS 名は次の形式です。`VPCendpointID-AvailabilityZone.s3tables.AWSregion.vpce.amazonaws.com`。例えば、VPC エンドポイント ID `vpce-1a2b3c4d-5e6f.` の場合、生成される DNS 名は `vpce-1a2b3c4d-5e6f-us-east-1a.s3tables.us-east-1.vpce.amazonaws.com` に似ている場合があります。

   ゾーン DNS 名にはアベイラビリティーゾーンが含まれます。ゾーン DNS 名は、アーキテクチャがアベイラビリティーゾーンを分離する場合に使用できます。エンドポイント固有の S3 DNS 名は、S3 パブリック DNS ドメインから解決できます。

また、プライベート DNS オプションを使用すると、VPC エンドポイント経由の S3 トラフィックのルーティングが簡単になり、アプリケーションで使用できる最も低コストのネットワークパスを活用できます。プライベート DNS は、S3 Tables のパブリックエンドポイント、例えば `s3tables.region.amazonaws.com` を VPC のプライベート IP にマッピングします。プライベート DNS オプションを使用すると、インターフェイスエンドポイントのエンドポイント固有の DNS 名を使用するように S3 クライアントを更新することなく、Regional S3 トラフィックをルーティングできます。

## AWS CLI を使用したエンドポイントを介するテーブルバケットとテーブルへのアクセス
<a name="s3-tables-endpoints-cli-sdks"></a>

AWS Command Line Interface (AWS CLI) を使用して、インターフェイスエンドポイントを介してテーブルバケットとテーブルにアクセスできます。AWS CLI を使用すると、`aws s3` コマンドは Amazon S3 エンドポイントを介してトラフィックをルーティングします。`aws s3tables` AWS CLI コマンドは Amazon S3 Tables エンドポイントを使用します。

`s3tables` VPC エンドポイントの例は、`vpce-0123456afghjipljw-nmopsqea.s3tables.region.vpce.amazonaws.com` です。

`s3tables` VPC エンドポイントにはバケット名は含まれません。`aws s3tables` AWS CLI コマンドを使用して `s3tables` VPC エンドポイントにアクセスできます。

`s3` VPC エンドポイントの例は、`amzn-s3-demo-bucket.vpce-0123456afghjipljw-nmopsqea.s3.region.vpce.amazonaws.com` です。

`aws s3` AWS CLI コマンドを使用して `s3` VPC エンドポイントにアクセスできます。

### AWS CLI の使用
<a name="set-s3tables-vpc-cli"></a>

AWS CLI を使用してインターフェイスエンドポイントを介してテーブルバケットとテーブルにアクセスするには、`-region`- および `--endpoint-url` パラメータを使用します。テーブルバケットとテーブルレベルのアクションを実行するには、S3 Tables エンドポイント URL を使用します。オブジェクトレベルのアクションを実行するには、Amazon S3 エンドポイント URL を使用します。

次の例では、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。

**例 1: エンドポイント URL を使用したアカウント内のテーブルバケットのリスト化**

```
aws s3tables list-table-buckets --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com —region us-east-1
```

**例 2: エンドポイント URL を使用したバケット内のテーブルのリスト化**

```
aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789301:bucket/amzn-s3-demo-bucket --endpoint https://vpce-0123456afghjipljb-aac.s3tables.us-east-1.vpce.amazonaws.com --region us-east-1
```

## クエリエンジン使用時の VPC ネットワークの設定
<a name="s3-tables-query-engine"></a>

クエリエンジンを使用する場合は、次のステップに従って、VPC ネットワークを設定します。

1. 開始するには、VPC を作成または更新します。詳細については、「[Create a VPC](https://docs.aws.amazon.com//vpc/latest/userguide/create-vpc.html#create-vpc-and-other-resources) (VPC を作成する)」を参照してください。

1.  S3 Tables にルーティングするテーブルおよびテーブルバケットレベルのオペレーションの場合は、新しいインターフェイスエンドポイントを作成します。詳細については、「[インターフェイス VPC エンドポイントを使用して AWS サービスにアクセスする](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)」を参照してください。

1.  Amazon S3 にルーティングするすべてのオブジェクトレベルのオペレーションで、ゲートウェイエンドポイントまたはインターフェイスエンドポイントを作成します。ゲートウェイエンドポイントの詳細については、「[Create a gateway endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3)」を参照してください。

1.  次に、データリソースを設定し、Amazon EMR クラスターを起動します。詳細については、「[Amazon EMR の開始方法](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html)」を参照してください。

1. その後、VPC エンドポイントから DNS 名を選択して、追加の設定で Spark アプリケーションを送信できます。例えば、`spark.sql.catalog.ice_catalog.s3tables.endpoint` および `https://interface-endpoint.s3tables.us-east-1.vpce.amazonaws.com` です。詳細については、「[Submit work to your Amazon EMR cluster](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-gs.html#emr-getting-started-manage)」を参照してください。

## デュアルスタックエンドポイントを使用したテーブルとテーブルバケットへのアクセス
<a name="s3-tables-dual-stack-endpoints"></a>

S3 Tables は、AWS PrivateLink のデュアルスタック接続をサポートしています。デュアルスタックエンドポイントを使用すると、ネットワークがサポートする内容に応じて、IPv4 プロトコルに加えて Internet Protocol バージョン 6 (IPv6) を使用して S3 テーブルバケットにアクセスできます。次の命名規則を使用して、デュアルスタックエンドポイントを介して S3 バケットにアクセスできます。

```
s3tables.<region>.api.aws
```

VPC 内で IPv6 経由で S3 テーブルおよびテーブルバケットにアクセスを試行する前に、以下の点について知っておく必要があります。
+ テーブルへのアクセスに使用するクライアントと S3 クライアントの両方でデュアルスタックが有効になっている必要があります。
+ VPC セキュリティグループでは、IPv6 インバウンドはデフォルトで有効になっていません。IPv6 アクセスを許可するには、HTTPS (TCP ポート 443) を許可する新しいルールをセキュリティグループに追加する必要があります。詳細については、「*Amazon EC2 ユーザーガイド*」の「[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html#add-remove-security-group-rules](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/changing-security-group.html#add-remove-security-group-rules)」を参照してください。
+ VPC に IPv6 CIDR が割り当てられていない場合は、VPC に IPv6 CIDR ブロックを手動で追加する必要があります。詳細については、「*AWS PrivateLink ユーザーガイド*」の「[https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html)」を参照してください。
+ IP アドレスフィルタリング IAM ポリシーを使用する場合は、IPv6 アドレスを処理するように更新する必要があります。IAM でのアクセス許可管理の詳細については、「[Amazon S3 用 Identity and Access Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security-iam.html)」を参照してください。

S3 Tables のデュアルスタックエンドポイントを使用する新しい VPC エンドポイントを作成するには、CLI コマンドの例を使用します。

```
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-id \
  --service-name com.amazonaws.aws-region.s3tables \
  --subnet-ids subnet-1 subnet-2 \
  --vpc-endpoint-type Interface \
  --ip-address-type dualstack \
  --dns-options "DnsRecordIpType=dualstack" \
  --security-group-ids sg-id \
  --region aws-region
```

VPC エンドポイントの作成の詳細については、VPC ユーザーガイドの「[https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。

ネットワークが IPv6 をサポートしており、VPC を更新して IPv6 を有効にする場合は、次の CLI コマンドを使用できます。

```
aws ec2 modify-vpc-endpoint \
  --vpc-endpoint-id vpce-id \
  --ip-address-type dualstack \
  --dns-options "DnsRecordIpType=dualstack" \
  --region aws-region
```

## VPC ネットワーク内の S3 Tables へのアクセスの制限
<a name="s3-tables-VPC-policy"></a>

リソースベースのポリシーと同様に、テーブルとテーブルバケットへのアクセスを制御するエンドポイントポリシーを VPC エンドポイントにアタッチできます。次の例では、インターフェイスエンドポイントポリシーは特定のテーブルバケットのみへのアクセスを制限します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy141511512309",
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": "*",
            "Action": "s3tables:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket",
                "arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket/*"
            ]
        }
    ]
}
```

------

# S3 Tables のセキュリティに関する考慮事項と制限事項
<a name="s3-tables-restrictions"></a>

次のリストでは、S3 Tables でサポートされていない、または制限されているセキュリティおよびアクセスコントロールの機能について説明します。
+ パブリックアクセスポリシーはサポートされていません。ユーザーは、バケットポリシーまたはテーブルポリシーを変更して、パブリックアクセスを許可することはできません。
+ テーブルに関連付けられたオブジェクトにアクセスするための署名付き URL はサポートされていません。
+ HTTP 経由で行われたリクエストはサポートされていません。Amazon S3 は、HTTP 経由で行われたすべてのリクエストに対して HTTP リダイレクトで自動的に応答し、リクエストを HTTPS にアップグレードします。
+ REST API を使用してアクセスポイントへのリクエストを行う場合は、AWS Signature Version 4 を使用する必要があります。
+ インターネットプロトコルバージョン 6 (IPv6) を介したリクエストは、テーブルストレージエンドポイントを介したオブジェクトレベルのアクションでのみサポートされ、テーブルレベルおよびバケットレベルのアクションではサポートされません。
+ テーブルバケットとテーブルアクセスポリシーのサイズは 20 KB に制限されています。