Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

卸载加密数据文件

UNLOAD 会借助 AWS 托管的加密密钥 (SSE-S3) 自动创建使用 Amazon S3 服务器端加密的文件。您还可以指定利用 AWS Key Management Service 密钥进行服务器端加密 (SSE-KMS),或利用客户管理的密钥进行客户端加密 (CSE-CMK)。UNLOAD 不支持使用客户提供的密钥进行 Amazon S3 服务器端加密 (SSE-C)。有关更多信息,请参阅使用服务器端加密保护数据

要在卸载到 Amazon S3 时使用 AWS KMS 密钥进行服务器端加密,请如下例所示使用 KMS_KEY_ID 参数提供密钥 ID。

Copy
unload ('select venuename, venuecity from venue') to 's3://mybucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' KMS_KEY_ID '1234abcd-12ab-34cd-56ef-1234567890ab' encrypted;

如果您希望提供自己的加密密钥,则可以通过使用包含 ENCRYPTED 选项的 UNLOAD 命令在 Amazon S3 中创建客户端加密数据文件。UNLOAD 与 Amazon S3 客户端加密使用相同的信封加密过程。之后,您可以使用包含 ENCRYPTED 选项的 COPY 命令加载加密文件。

该过程的工作方式如下所示:

  1. 创建用作私有加密密钥(也称作主对称密钥)的 base64 编码的 256 位 AES 密钥。

  2. 发出包含主对称密钥及 ENCRYPTED 选项的 UNLOAD 命令。

  3. UNLOAD 生成用于加密您的数据的一次性对称密钥(称作信封对称密钥)和初始化向量 (IV)。

  4. UNLOAD 使用您的主对称密钥加密该信封对称密钥。

  5. 然后,UNLOAD 将加密数据文件存储在 Amazon S3 中,并将加密信封密钥和 IV 作为对象元数据随每个文件存储。加密信封密钥作为对象元数据 x-amz-meta-x-amz-key 存储,IV 作为对象元数据 x-amz-meta-x-amz-iv 存储。

有关信封加密过程的更多信息,请参阅 Client-Side Data Encryption with the AWS SDK for Java and Amazon S3 文章。

要卸载加密数据文件,请将主密钥值添加到凭证字符串并包括 ENCRYPTED 选项。如果您使用了 MANIFEST 选项,清单文件也将加密。

Copy
unload ('select venuename, venuecity from venue') to 's3://mybucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key '<master_key>' manifest encrypted;

要卸载经过 GZIP 压缩的加密数据文件,请包含 GZIP 选项及主密钥值和 ENCRYPTED 选项。

Copy
unload ('select venuename, venuecity from venue') to 's3://mybucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key '<master_key>' encrypted gzip;

要加载加密数据文件,请添加具有相同主密钥值的 MASTER_SYMMETRIC_KEY 参数,并包括 ENCRYPTED 选项。

Copy
copy venue from 's3://mybucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key '<master_key>' encrypted;