【问题标题】:Amazon S3 SSE-C encryption of file already on S3已在 S3 上的文件的 Amazon S3 SSE-C 加密
【发布时间】:2018-09-01 07:37:06
【问题描述】:

我有一个应用程序运行了很多次,它在 S3 存储上上传文件(图像)。

现在我被要求更新此应用程序并使用 SSE-C 加密(使用客户提供的密钥进行服务器端加密)上传文件。所以我做到了。

我还可以使用 aws cli 上传 SSE-C 加密文件。

我现在需要的是,这里是我的问题,是找到一种方法,将 SSE-C 加密应用于 S3 上没有 SSE-C 加密的早期文件。

谁能解释我是否以及如何实现这一点,或者将我指向一些文档或支持页面以找到解决方案?

我发现的一种(可能效率低下)方法是对每个文件执行以下操作:

  1. 将文件名复制到 filename.encrypted 应用 SSE-C 加密
  2. 将 filename.encrypted 移至文件名

这是唯一的方法还是有更好的方法?

注意事项:

  • 由于我有很多文件,我显然排除了下载文件然后使用 SSE-C 加密再次上传的选项,因为它太慢而且太贵。
  • 我正在寻找一种解决方案,它可以应用 SSE-C 而无需从 S3 传输数据并返回到 S3。

非常感谢您对此的任何反馈。

【问题讨论】:

  • 旁注:Amazon S3 中没有“移动”或“重命名”命令。您需要复制一个对象,然后删除原始对象。

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


【解决方案1】:

您可以通过简单地将对象复制到自身之上来对已存在的对象应用加密:

aws s3 cp s3://bucket/foo.txt s3://bucket/foo.txt --sse-c --sse-c-key fileb://key.bin

只要某些东西(例如加密)发生变化,它就可以工作。

我从 How to supply a key on the command line that's not Base 64 encoded 获得了 --sse-c 语法

【讨论】:

  • 嗨@john-rotenstein,感谢您的反馈。我必须使用 aws s3api 命令来完成此操作: aws s3api copy-object --copy-source bucketname/file.jpg --key file.jpg --bucket bucketname --sse-customer-algorithm AES256 --sse-customer- key fileb:///absolute/path/to/key/file 使用 aws s3 命​​令最终会出现以下错误: aws s3 cp --sse-c --sse-c-key fileb:///absolute/path/ to/key/file s3://bucketname/file.jpg s3://bucketname/file.jpg 参数验证失败:参数输入的类型无效,值:b'...[somebyteshere]...',输入: ,有效类型:
  • 仔细检查您是否可以解密文件。您遇到的这个问题是由使用二进制文件而不是具有 32 个十六进制字符的文件引起的。我认为这是一个真正的问题,因为 AWS 没有清楚地记录什么是密钥(二进制数据、32 个十六进制字符等,在每个使用它的地方)使用一种格式会导致使用不同的格式进行加密钥匙比你认为你正在使用。稍后您将竭尽全力试图找出解密失败的原因。
猜你喜欢
  • 1970-01-01
  • 2016-07-24
  • 2017-04-01
  • 2021-06-16
  • 2019-09-22
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 2011-03-18
相关资源
最近更新 更多