有没有一种方法可以在AWS S3中允许GetObjectAttributes而不允许GetObject



我的项目允许用户编写自己的内容。每个人的内容都是私人的,不应该被其他人看到。然而,在客户端有一个轮询逻辑,我使用AWS S3 SDK(Web JavaScript(来等待对象(S3中的文件(的存在。重点是,我想要信息";这个对象是否存在"公开,但";这个对象的数据究竟是什么"隐私。但是,通过单独允许GetObjectAttributes权限,这不允许HeadObject函数工作。因此,为了允许从客户端获取,我还必须启用GetObject,这与我的目标相矛盾。那么,有办法实现这一点吗?

尽管如此,如果没有好的方法,我计划创建另一个lambda函数,通过管理员访问和基本的客户端授权来执行HeadObject。缺点是:它更复杂,(从逻辑上讲,可能(由于lambda的开销而更耗时,而且成本更高(尽管这只是一个"爱好"规模,但这将是一个额外的因素(。

在我看来,目前的解决方案是(痛苦地(允许GetObject,但密钥(文件名(附加加密随机字符串。(这对我来说仍然不是一种可以接受的方式(。

对这种情况的任何解决方案都将不胜感激。

您可以使用listObjectsapi来查看bucket中是否存在对象。

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

返回bucket中的部分或全部(最多1000个(对象要求您可以使用请求参数作为选择条件返回bucket中对象的子集。200 OK响应可以包含有效或无效的XML。确保将应用程序设计为解析响应的内容并进行适当的处理。返回的对象按各自的升序排序列表中的关键字名称。有关列出对象的详细信息,请参见以编程方式列出对象密钥

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

在AWS身份和访问管理(IAM(中使用此操作策略,您必须具有执行s3:ListBucket操作的权限。bucket所有者默认具有此权限,并且可以授予允许他人使用。有关权限的详细信息,请参阅与Bucket子资源操作和管理相关的权限访问您的AmazonS3资源的权限。

所以他们可以看到bucket中的对象列表,但不能看到实际的对象。

还要注意的是,从代码的角度来看,您可以使用API的prefix参数来只过滤用户已经上传的内容。当然,假设有一种基于用户的前缀/路径模式。

希望这能有所帮助!