amazon-s3 - 如何实现对 S3 存储桶中单个对象的访问控制?
问题描述
我有一个默认为私有的 S3 存储桶。现在我想对这个桶的对象实现访问控制。
例如,如果存储桶包含三个对象 A、B、C,则对象 A、B 可以是公共的,而对象 C 可以是私有的。
应该可以将公共对象设为私有,反之亦然。私有对象只能由选定的应用程序用户访问,公共对象将可供所有人访问。有没有办法实现它?
到目前为止,我已经研究了对象标记。但我不完全确定它是否适用于我的情况。
解决方案
您是正确的,Amazon S3 中的对象默认是私有的。
然后,您可以通过多种方法授予访问权限:
- 在单个对象上设置访问控制列表 (ACL)以使其公开(或将其设置回私有)
- 创建存储桶策略以授予对整个存储桶或存储桶内路径的访问权限
- 向IAM 用户添加策略以允许该用户访问所有/部分 Amazon S3 存储桶
- 创建预签名 URL以授予对私有对象的限时访问权限
因此,您当然可以将特定对象设为 Public,然后使用 ACL 将它们更改为 Private。
要使特定用户可以访问特定对象,您应该使用预签名 URL。它们的工作方式如下:
- 用户对您的应用程序进行身份验证
- 当用户希望访问私有对象时,应用程序负责确定是否允许他们访问它
- 如果是这样,那么应用程序会生成一个预签名的 URL。它只需要几行代码,并且不需要对 S3 的 API 调用。
- 然后,应用程序像任何其他链接一样提供预签名 URL,例如将其放入
<a>
标签或<img>
标签中。与 Internet 上的任何其他资源一样,该对象将在有限的时间内可访问。 - 持续时间到期后,URL 将不再有效(拒绝访问)
这样,您的应用程序可以完全控制谁可以访问哪些对象以及授权用户可以直接从 Amazon S3 访问这些对象。此外,应用程序用户不需要特定于 AWS 的登录;他们将对您的应用程序进行身份验证。
推荐阅读
- list - 如何将列表分解为多个熊猫数据框
- sql-server - Valid MSSQL query returning no rows
- c++ - Why auto specifier deduce "top and low" level const from an &pointer?
- node.js - Ping an open Node connection without sending data
- python - python脚本打开Windows命令提示符并打印一些字符串
- angular - 将默认值设置为Angular 4中FormArray内Formcontrol中新添加的选择选项控件
- javascript - Zend Framework 3:如何使用和(推送)更新进度条?
- php - 调用类:方法而不是回调函数phpslim3
- arrays - 将项目从子数组列表分发到其他子数组/有时会随机出错
- javascript - 选择框背景颜色html