

# 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 分析サービスまたは S3 テーブルに直接アクセスするサードパーティーエンジンを介して SSE-KMS 暗号化テーブルを使用する場合、使用する IAM ロールには KMS キーを使用するためのアクセス許可が必要です。
+ **Lake Formation が有効になっているアクセス許可** – アクセスコントロールのために AWS Lake Formation にオプトインしている場合、Lake Formation サービスロールには KMS キーを使用するためのアクセス許可が必要です。
+ **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)
+ [Lake Formation が有効になっている場合に、暗号化されたテーブルを使用するアクセス許可を IAM プリンシパルに付与する](#tables-kms-lf-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 テーブルを使用するには、テーブルバケットを AWS Glue Data Catalog と統合します。この統合により、AWS 分析サービスはテーブルデータを自動的に検出してアクセスできるようになります。統合の詳細については、「[Amazon S3 Tables と AWS 分析サービスの統合](s3-tables-integrating-aws.md)」を参照してください。

AWS 分析サービス、または S3 テーブルに直接アクセスするサードパーティーおよびオープンソースエンジンを介して SSE-KMS 暗号化テーブルを使用する場合、使用する IAM ロールには、暗号化オペレーションに AWS KMS キーを使用するためのアクセス許可が必要です。

ロールにアタッチされた IAM ポリシーまたは KMS キーポリシーを使用して、KMS キーアクセスを許可できます。

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

このインラインポリシーをクエリに使用する IAM ロールにアタッチして、KMS キーへのアクセスを許可します。KMS キー ARN を自身のものに置き換えます。

```
{
    "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 キーポリシーにアタッチして、指定された IAM ロールに対してキーの使用を許可します。ロール ARN を、クエリに使用する 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": "*"
}
```

------

## Lake Formation が有効になっている場合に、暗号化されたテーブルを使用するアクセス許可を IAM プリンシパルに付与する
<a name="tables-kms-lf-permissions"></a>

S3 Tables 統合のアクセスコントロールを AWS Lake Formation にオプトインしている場合、Lake Formation サービスロールには暗号化オペレーションに AWS KMS キーを使用するためのアクセス許可が必要です。Lake Formation はこのロールを使用して、テーブルにアクセスするプリンシパルに代わって認証情報を提供します。

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

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

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

------