首页 > 解决方案 > 如何向应用程序的用户授予对 S3 资源的有限访问权限?

问题描述

每个用户都有保存在 S3 中的唯一数据。此资源应仅对该特定用户可见。传统的方法是在后端获取这些东西并将其传递给用户。确保在应用程序逻辑中只有用户有资格获得它。但是,当我可以将密钥/令牌提供给我希望能够访问 S3 存储桶的用户时,为什么要通过我的应用程序传递这些额外的数据。因此他们可以从中检索数据并保存到其中。

标签: node.jsamazon-web-servicesamazon-s3

解决方案


传统的方法是在后端获取这些东西并将其传递给用户。

不,不是。没有人应该这样做。

但是,当我可以将密钥/令牌提供给用户时,为什么要通过我的应用程序传递这些额外的数据......

你在这里是正确的方向。幸运的是,S3 定义了一个更好的方法,这也是通常的方法。

您无需提供密钥,而是对 URL 进行加密签名。密钥/秘密保留在服务器端,对最终用户隐藏。您创建一个 URL 来指示要下载的资源以及其他参数,例如该 URL 的到期日期。然后,您使用只有拥有密钥/秘密的人才能计算的计算值“签名”它。生成的 URL 可以通过 API 响应或您想要的任何方法直接提供给您的客户端。

然后,客户端使用此 URL 请求资源,并直接从 S3 提供。S3 验证签名,知道它来自您,并提供适当的响应。

一个示例,假设您使用的是 S3 JS SDK:

s3.getSignedUrl('getObject', {
  Bucket: 'bucket',
  Key: 'path/to/object'
});

另请参阅: https ://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property


推荐阅读