

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

------