

# 在表存储桶中指定具有 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 加密的表和表存储桶进行自动维护，您必须向 maintenance.s3tables.amazonaws.com 服务主体授予使用 KMS 密钥的权限。有关更多信息，请参阅 [S3 表类数据存储服务 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 表类数据存储服务维护服务主体。如果维护服务主体没有访问权限，您将无法在该表存储桶中创建表。有关更多信息，请参阅 [向 S3 表类数据存储服务维护服务主体授予对 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>

在使用查询引擎、REST API 操作、AWS SDK 和 AWS Command Line Interface（AWS CLI）创建新表时，可以对该表应用 SSE-KMS 加密。您在创建表时指定的加密设置优先于表存储桶的默认加密设置。

**注意**  
对表使用 SSE-KMS 加密时，用于加密的密钥必须支持 S3 表类数据存储服务维护服务主体访问该表。如果维护服务主体没有访问权限，您将无法创建表。有关更多信息，请参阅 [向 S3 表类数据存储服务维护服务主体授予对 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
          }
        ]
      }
    }
  }'
```