【问题标题】:Presigned S3 URL with client side encryption带有客户端加密的预签名 S3 URL
【发布时间】:2021-11-27 11:52:54
【问题描述】:

我已经搜索了很长时间,但没有人有以下情况,如果有人可以提供帮助,非常感谢。

我们想使用 S3 预签名 URL 下载大文件,但出于安全原因,我们正在使用使用 KMS 的客户端加密来上传文件。

其中一个选项是使用 AWS 加密 SDK 在浏览器中加密文件,上传到后端的 S3,然后在从预签名 URL 获取文件后在浏览器中解密。但我担心用户浏览器中的凭据暴露。在 AWS 文档中https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/js-examples.html()

首先向浏览器提供您的凭据。适用于 JavaScript 的 AWS 加密开发工具包示例使用 webpack.DefinePlugin,它将凭证常量替换为您的实际凭证。但是您可以使用任何方法来提供您的凭据。然后,使用凭证创建 AWS KMS 客户端。

  1. 你有什么解决办法吗?
  2. 如果使用 AWS SDK,如果用户使用 F12,无论如何要避免凭据暴露?

【问题讨论】:

    标签: javascript amazon-s3 encryption pre-signed-url


    【解决方案1】:

    但我担心用户浏览器中的凭据暴露。

    使用客户端加密,假设加密的秘密是随机的并且是唯一的/特定于内容(使用信封加密)。

    因此,如果客户端有权获得内容(要下载),则可以为客户端提供解密内容的密钥(您可以将密钥视为内容的一部分)。密钥(数据密钥)不得用于解密其他任何内容。

    【讨论】:

    • 是的,看看这个文档:docs.aws.amazon.com/encryption-sdk/latest/developer-guide/…,你知道为什么 AWS 有办法——使用 KMS 加密吗?他们不担心秘密/访问密钥会被泄露吗?
    • @futurexv 取决于.. 我的意思是 - 在处理加密货币时需要非常小心发送给客户端的内容。客户端需要内容的数据加密密钥。事实上,我会担心,在示例中使用了临时会话凭据。当凭证仅限于特定操作(例如解密加密密钥)和临时(在承担角色或身份之后)时,它可能是安全的
    • 是的,凭据仅限于特定操作。但关键是我不知道为什么 AWS 建议在 JS 中公开秘密/访问密钥的方式,如果用户尝试在 uglified/minified JS 中找到它,用户可以看到它
    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 2015-05-08
    • 2015-12-04
    相关资源
    最近更新 更多