卸载加密的数据文件 - Amazon Redshift

卸载加密的数据文件

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

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

unload ('select venuename, venuecity from venue') to 's3://amzn-s3-demo-bucket/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 存储。

有关信封加密过程的更多信息,请参阅使用 AWS SDK for Java 和 Amazon S3 进行客户端数据加密一文。

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

unload ('select venuename, venuecity from venue') to 's3://amzn-s3-demo-bucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key '<root_key>' manifest encrypted;

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

unload ('select venuename, venuecity from venue') to 's3://amzn-s3-demo-bucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key '<root_key>' encrypted gzip;

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

copy venue from 's3://amzn-s3-demo-bucket/encrypted/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' master_symmetric_key '<root_key>' encrypted;