

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 亚马逊 Redshift 的使用方式 AWS KMS
<a name="services-redshift"></a>

本主题讨论 Amazon Redshift AWS KMS 如何使用加密数据。

**Topics**
+ [Amazon Redshift 加密](#rs-encryption)
+ [加密上下文](#rs-encryptioncontext)

## Amazon Redshift 加密
<a name="rs-encryption"></a>

Amazon Redshift 数据仓库是一个由称作节点的各种计算资源构成的集合，这些节点已整理到名为集群的组中。每个集群运行一个 Amazon Redshift 引擎并包含一个或多个数据库。

Amazon Redshift 使用基于密钥的四层架构来进行加密。此架构包括数据加密密钥、数据库密钥、群集密钥和根密钥。您可以使用 AWS KMS key 作为根密钥。

数据加密密钥对群集中的数据块进行加密。每个数据块分配有一个随机生成的 AES-256 密钥。这些密钥使用群集的数据库密钥进行加密。

数据库密钥对群集中的数据加密密钥进行加密。数据库密钥是随机生成的 AES-256 密钥。它存储在独立于 Amazon Redshift 集群的网络中的磁盘上，并跨安全通道传递到集群中。

群集密钥对 Amazon Redshift 群集的数据库密钥进行加密。您可以使用 AWS KMS AWS CloudHSM、或外部硬件安全模块 (HSM) 来管理集群密钥。有关更多详细信息，请参阅 [Amazon Redshift 数据库加密](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html)文档。

您可以通过选中 Amazon Redshift 控制台中相应的框请求加密。您可以从加密框下方显示的列表中选择，指定一个[客户托管密钥](concepts.md#customer-mgn-key)。如果您不指定客户托管的密钥，则 Amazon Redshift 将 [AWS 托管式密钥](concepts.md#aws-managed-key) 用于您账户下的 Amazon Redshift。

**重要**  
Amazon Redshift 仅支持对称加密 KMS 密钥。您不能在 Amazon Redshift 加密工作流中使用非对称 KMS 密钥。要获取确定 KMS 密钥是对称还是非对称的帮助，请参阅 [识别不同的密钥类型](identify-key-types.md)。

## 加密上下文
<a name="rs-encryptioncontext"></a>

与之集成的每项服务在请求数据密钥、[加密和解密时都 AWS KMS 指定了加密上下文](encrypt_context.md)。加密上下文是用于检查数据完整性的其他经过身份验证的数据 (AAD)。 AWS KMS 也就是说，在为加密操作指定加密上下文时，该服务还要为解密操作指定同一加密上下文，否则解密会失败。Amazon Redshift 使用加密上下文的集群 ID 和创建时间。在 CloudTrail 日志文件`requestParameters`字段中，加密上下文将与之类似。

```
"encryptionContext": {
    "aws:redshift:arn": "arn:aws:redshift:region:account_ID:cluster:cluster_name",
    "aws:redshift:createtime": "20150206T1832Z"
},
```

 您可以在 CloudTrail 日志中搜索集群名称，以了解使用 AWS KMS key （KMS 密钥）执行了哪些操作。这些操作包括集群加密、集群解密以及生成数据密钥。