【问题标题】:How to get Amazon s3 Encrypted object with signed URL?如何获取带有签名 URL 的 Amazon s3 加密对象?
【发布时间】:2018-11-04 19:47:46
【问题描述】:

我为我的 s3 对象创建了一个签名 URL。

使用“使用客户提供的加密密钥的服务器端加密”存储对象。

现在,当我的客户浏览到签名的 URL 时,他会得到:

对象是使用一种服务器端加密形式存储的。必须提供正确的参数才能检索对象

我需要以某种方式让我的客户端在到达 URL 之前发送“x-amz-server-side-encryption-customer-algorithm”和“x-amz-server-side-encryption-customer-key”标头。

知道如何实现吗?

【问题讨论】:

  • 该方法看起来需要将您的密钥作为 URL 的一部分提供。你真的希望这是访问方法吗?如果您使用服务器端加密(没有客户提供密钥的版本),Amazon S3 将自动解密文件而无需提供密钥。这要容易得多!
  • 谢谢约翰,我需要在客户端生成密钥(出于安全原因)。而且,我通过配置我的 s3 Cors 和 CloudFront 允许的方法解决了我的问题。
  • 请参考这个答案:stackoverflow.com/a/43752154/2609095

标签: php amazon-web-services encryption amazon-s3


【解决方案1】:

"x-amz-server-side-encryption-customer-algorithm" 和 "x-amz-server-side-encryption-customer-key" 应该在服务器端使用签名 URL 而客户端不要需要在请求中添加任何标头。

我不知道 PHP 语法,但在 Java SDK 中它是这样工作的:

 generatePresignedUrlRequest = new GeneratePresignedUrlRequest(BUCKET_NAME, TOKEN)
 .withSSEAlgorithm(SSEAlgorithm.KMS.getAlgorithm())
 .withKmsCmkId("YOUR_KMS_KEY_ID");

 generatePresignedUrlRequest.addRequestParameter("x-amz-server-side-encryption", "aws:kms");
 generatePresignedUrlRequest.addRequestParameter("x-amz-server-side-encryption-aws-kms-key-id", "YOUR_KMS_KEY_ID");

在使用 GET 方法签名时,您不应该做任何特殊的事情。

有关更多信息,您可以查看本指南:Generating Amazon S3 Pre-signed URLs with SSE

拉兹

【讨论】:

  • 非常有用的答案,但它给了我 https://{bucketname}.s3.amazonaws.com URL,这给了我浏览器中的隐私错误有没有办法生成s3.amazonaws.com URL
猜你喜欢
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2021-11-27
  • 2016-06-17
  • 2018-12-27
  • 1970-01-01
  • 2018-09-24
  • 2017-09-07
相关资源
最近更新 更多