如何使用CLI使用服务器端加密和客户提供的密钥上传到S3

时间:2016-05-30 13:49:04

标签: amazon-web-services encryption amazon-s3 aws-cli

我无法将S3对象上传到S3存储桶。我使用了以下命令:

  

aws s3api put-object --bucket = opsops --key = Cloudformation_upload.csv --body = Cloudformation.csv --sse-customer-algorithm = AES256 --sse-customer-key = MTIzNDU2Nzg5MGFiY2Rl --customer-key -md5 = NTgwMWMzMzJiNGU1YmE5YzBhMjk3ZDYwYmI1MWNjNzI ="

但是当我上传对象时会出现这个错误:

注意:客户密钥和客户密钥-MD5值的编码值为64位。请帮我解决此问题。

  

调用PutObject操作时发生客户端错误(InvalidArgument):计算出的密钥的MD5哈希值与提供的哈希值不匹配

1 个答案:

答案 0 :(得分:1)

将密钥存储为二进制文件(不是十六进制或base64编码),并在命令行中使用fileb://。 CLI将自动计算正确的MD5。

在您的示例中,您使用的是base-64编码的MD5哈希,但MD5只生成16个字节。对于AES256,您的密钥长度应为32个字节。使用SHA256哈希密码将产生正确大小的密钥。

示例:

echo -n 1234567890abcde | openssl dgst -sha256 -binary > sse.key
aws s3api put-object \
    --bucket=opsops \
    --key=Cloudformation_upload.csv \
    --body=Cloudformation.csv \
    --sse-customer-algorithm=AES256 \
    --sse-customer-key=fileb://sse.key