解密Amazon Redshift CSV转储

时间:2015-06-10 15:36:35

标签: openssl amazon-redshift

我想在本地解密Amazon Redshift表的CSV转储。 我使用dev命令和客户端加密,因为数据包含敏感信息。

我使用的命令是这样的:

unload

生成master_key我使用了以下命令:

unload ('select * from testtable.test')
to 's3://unload'
credentials 'aws_access_key_id=<AWS_KEY_ID>;aws_secret_access_key=<AWS_SECRET_KEY_ID>;master_symmetric_key=<MASTER_KEY>'
delimiter as ','
addquotes
escape
encrypted
ALLOWOVERWRITE

输出:

openssl enc -aes-256-cbc -pass pass:<mypass> -P -nosalt -base64

我使用key=.... iv =.... 作为`master_symmetric_key。

我在本地复制s3数据并尝试解密,如下所示:

key

但是得到:

openssl enc -aes-256-cbc -d -nosalt -base64 -in 0000_part_00 -out temps.csv

如何解密Amazon Redshift CSV转储?

2 个答案:

答案 0 :(得分:1)

密钥存储为元数据,可在x-amz-meta-x-amz-key中使用,IV存储为元数据,可在x-amz-meta-x-amz-iv中使用。来自Redshift documentation

  

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

获得S3对象后,您还将获得这些元数据字段。以下是S3 GET-Object示例的一些示例:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

答案 1 :(得分:0)

因此,Redshift使用信封加密的方式与AWS开发工具包使用信封加密的方式一样,将文件存储在S3上。因此,为了解密文件,您应该:

  1. 从S3对象元数据(分别为x-amz-meta-x-amz-key和x-amz-meta-x-amz-iv)中获取加密的数据密钥和iv
  2. 使用AES256 ECB模式使用对称密钥解密该x-amz-meta-x-amz-key值
  3. 然后使用AES256 CBC模式解密“ 0000_part_00”,将iv从步骤1设置为iv,并将密钥设置为步骤2的结果。
  4. 删除填充。

如果发现这些步骤很麻烦,可以将MANIFEST添加到UNLOAD中,这将添加清单文件。然后,您可以使用redshift-manifest-tools来检索清单文件中提到的文件并为您执行解密。

命令,例如:

redshift-manifest-tools --action retrieve-files --manifest-s3url 's3://<your-bucket>/path/to.manifest' --dest /tmp/ --symmetric-key '<base64-master-key>'

将下载文件,解密文件并将纯文本版本存储在/ tmp /中。