【问题标题】:How can I upload to S3 with CLI using server side encryption with customer provided key如何使用 CLI 使用服务器端加密和客户提供的密钥上传到 S3
【发布时间】:2016-05-31 00:20:37
【问题描述】:

我无法将 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="

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

注意:Customer-key 和 customer-key-MD5 值是用 64 位值编码的。请帮我解决这个问题。

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

【问题讨论】:

  • 我为此执行的命令... 命令是“aws s3api put-object --bucket=opsops --key=Cloudformation_upload.csv --body=Cloudformation.csv --sse-customer-算法=AES256 --sse-customer-key=MTIzNDU2Nzg5MGFiY2Rl --customer-key-md5=NTgwMWMzMzJiNGU1YmE5YzBhMjk3ZDYwYmI1MWNjNzI="

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


【解决方案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

【讨论】:

  • 上传这个对象(Cloudformation_upload.csv)后,我执行了这个给定的命令并检查了S3存储桶。但它没有加密。
  • 使用客户密钥时,控制台可能不会在详细信息下的属性选项卡中将其显示为加密。尝试从控制台下载文件。如果已加密,它将失败并显示 HTTP 400 状态代码和消息“对象是使用服务器端加密形式存储的。必须提供正确的参数才能检索对象。”
  • 要正确下载文件,您需要使用相同的客户密钥调用 get-object api。
猜你喜欢
  • 1970-01-01
  • 2020-12-04
  • 2016-05-27
  • 2017-02-03
  • 2020-01-19
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多