繁体   English   中英

有没有办法在 AWS S3 中允许 GetObjectAttributes 但不允许 GetObject?

[英]Is there a way to allow GetObjectAttributes but not GetObject in AWS S3?

我的项目允许用户编写自己的内容。 每个人的内容都是私密的,不应被他人看到。 但是,有一个来自客户端的轮询逻辑,我使用 AWS S3 SDK(Web JavaScript)等待 object(S3 中的文件)存在。 关键是,我想要“这个 object 是否存在?”的信息。 公开,但“这个对象的数据到底是什么?” 是私人的。 但是,仅通过允许GetObjectAttributes权限,这不允许 HeadObject function 工作。 因此,为了允许从客户端获取,我还必须启用与我的目标相矛盾的GetObject 那么有没有办法实现这一点?

尽管如此,如果没有好的方法可以做到这一点,我计划创建另一个 lambda function 来执行具有管理员访问权限和基本客户端授权的 HeadObject。 缺点是:它更复杂,由于 lambda 的开销,它(逻辑上可能)更耗时,而且它会更昂贵(即使它只是一个“爱好”规模,但这相当于额外的因素)。

我认为当前的解决方案是(痛苦地)允许GetObject ,但密钥(文件名)附加了加密随机字符串。 (这对我来说仍然不是可接受的方式)。

对此案的任何解决方案将不胜感激。

您可以使用listObjects api 来查看存储桶中是否存在 object。

请参阅: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html

随每个请求返回存储桶中的部分或全部(最多 1,000 个)对象。 您可以使用请求参数作为选择标准来返回存储桶中的对象子集。 200 OK 响应可以包含有效或无效的 XML。 确保将您的应用程序设计为解析响应的内容并适当地处理它。 返回的对象按列表中各个键名的升序排序。 有关列出对象的更多信息,请参阅以编程方式列出 object 密钥

要使用此操作,您必须对存储桶具有 READ 访问权限。

要在 AWS Identity and Access Management (IAM) 策略中使用此操作,您必须有权执行 s3:ListBucket 操作。 存储桶拥有者默认拥有该权限,并且可以将该权限授予其他人。 有关权限的更多信息,请参阅与存储桶子资源操作相关的权限和管理对您的 Amazon S3 资源的访问权限。

所以他们可以看到存储桶中的对象列表,但看不到实际的对象。

另请注意,从代码的角度来看,您可以使用 API 的prefix参数来仅过滤用户上传的内容。 当然,假设存在基于用户的前缀/路径模式。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM