Openssl 解密Amazon红移CSV转储

Openssl 解密Amazon红移CSV转储,openssl,amazon-redshift,Openssl,Amazon Redshift,我想在本地解密Amazon红移表的CSV转储。 我正在使用unload命令和客户端加密,因为数据包含敏感信息 我使用的命令如下所示: 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=<MAS

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

我使用的命令如下所示:

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 -d -nosalt -base64 -in 0000_part_00 -out temps.csv
我使用
作为“主对称”键

我在本地复制s3数据,并尝试按如下方式解密:

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 -d -nosalt -base64 -in 0000_part_00 -out temps.csv
但是你可以得到:

bad decrypt 6038:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex: wrong
final block length:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/crypto/evp/evp_enc.c:323

如何解密Amazon Redshift CSV转储?

密钥存储为元数据,可在
x-amz-meta-x-amz-Key
中使用,IV存储为元数据,可在
x-amz-meta-x-amz-IV
中使用。从:

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


当您获得S3对象时,您还将获得这些元数据字段。下面是一些S3 GET对象示例:

因此,红移使用信封加密的方式与AWS SDK使用信封加密在S3上存储文件的方式相同。因此,为了解密文件,您应该:

  • 从S3对象元数据中获取加密的数据密钥和iv(分别为x-amz-meta-x-amz-key和x-amz-meta-x-amz-iv)
  • 使用AES256 ECB模式使用对称密钥解密该x-amz-meta-x-amz-key值
  • 然后使用AES256 CBC模式解密“0000_part_00”,并将步骤1中的iv设置为iv,将密钥设置为步骤2的结果
  • 移除填充物
  • 如果您发现这些步骤很麻烦,您可以做的是将清单添加到卸载中,这将添加清单文件。然后您可以使用它来检索清单文件中提到的文件并为您执行解密

    命令如下:

    redshift-manifest-tools --action retrieve-files --manifest-s3url 's3://<your-bucket>/path/to.manifest' --dest /tmp/ --symmetric-key '<base64-master-key>'
    
    redshift清单工具--操作检索文件--manifest-s3url's3:///path/to.manifest'--dest/tmp/--对称密钥“”
    
    将下载文件,对其进行解密,并将明文版本存储在/tmp/中