【问题标题】:Is it safe to use an Amazon S3 SignedURL to PUT a file from a browser client?使用 Amazon S3 SignedURL 从浏览器客户端 PUT 文件是否安全?
【发布时间】:2021-07-04 06:13:13
【问题描述】:

我的后端是一个 nodejs 应用程序,我希望用户将图像上传到 Amazon S3 存储桶。

从我正在运行的服务器:

const s3 = new AWS.S3({
  params: {
    Bucket: bucket
  }
});

app.get('/api/images/signed-url', authMiddleware, (req, res) => {
  s3.getSignedUrl('putObject', 
    { ContentType: 'image/jpeg', Key: uuid() + '.jpeg' }, 
    (_err, url) => res.send({ signedUrl })
})

然后从我的浏览器客户端上传到那个端点

网址如下:

https://my-s3-bucket.s3.ap-southeast-2.amazonaws.com/0050db00-c64c-419a-83c2-e8615120f458.jpeg?AWSAccessKeyId=MY_ACCESS_KEY&Content-Type=image%2Fjpeg&Expires=1625365030&Signature=1ebnshTgeMKoLMAH%2Bi2FLletsAU%3D

鉴于此 URL 包含我的MY_ACCESS_KEY_ID,与客户共享是否安全?我不分享我的秘密(显然),但它是等式的一半。

【问题讨论】:

  • 发布了解决方案有帮助吗?

标签: amazon-web-services amazon-s3 pre-signed-url


【解决方案1】:

Aws 编程密钥具有 access key ID and secret key

将 ID 视为计算机的用户名,将密钥视为密码。 请注意,在 URL 中它是访问密钥 ID,而不是密钥。 因此人们可以看到您的用户名。

access-key-id must be specified so the service knows who's making the request.

即使您担心暴露您的访问密钥 ID,您也应该记住概念上的 `s3preSignedURL 是基于时间的,它仅在特定时间有效,不会超过此时间

如果您担心该网址是否在可接受的有效时间范围内与其他人共享,请微调您的权限,因为

预签名 URL 允许您访问 URL 中标识的对象,前提是预签名 URL 的创建者有权访问该对象。也就是说,如果您收到用于上传对象的预签名 URL,则只有在预签名 URL 的创建者具有上传该对象所需的权限时,您才能上传该对象。

这些是一些详细讨论此问题的帖子post 1post 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 2011-01-01
    • 1970-01-01
    • 2016-05-03
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多