[英]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.