当前位置: 首页 > 知识库问答 >
问题:

Amazon Web Services:设置S3策略以允许putObject和getObject但拒绝listBucket

常宸
2023-03-14

我在Amazon S3上使用getObject和putObject请求,在创建访问bucket的策略时,我发现如果我不允许listBucket,就会出现“拒绝访问”错误。

问题是listBucket意味着用户可以列出bucket中的密钥,这会带来安全威胁。

是否可以在不允许listBucket的情况下允许getObject和putObject?或者有解决方法吗?

以下是政策:

 {
 "Version": "2012-10-17",
"Statement": [
{
  "Sid": "Stmt##",
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket"
  ],
  "Resource": [
    "arn:aws:s3:::myBucket"
  ]
},
{
  "Sid": "Stmt##",
  "Effect": "Allow",
  "Action": [
    "s3:GetObject",
    "s3:PutObject"
  ],
  "Resource": [
    "arn:aws:s3:::myBucket/*"
  ]
}
 ]
}

共有1个答案

汝才良
2023-03-14

从获取对象留档:

此操作需要s3:GetObject的权限。有关更多信息,请转至《Amazon Simple Storage Service Developer Guide》中的“在策略中指定权限”。如果您请求的对象不存在,Amazon S3返回的错误取决于您是否还具有S3:ListBucket权限。

我已经通过编辑一个与您的基本相同的策略来证实这种行为。

无论我是否具有s3:ListBucket特权,只要我具有s3:GetObject特权,我都能够轻松获取现有对象。

只有当我没有s3:ListBucket特权,并且请求一个不存在的对象时,行为才会改变。在这种情况下,S3不会向我承认该对象是否存在——我被拒绝访问有关该对象存在的知识,因为我无权查看该列表。

对不存在的对象的有效请求的响应,没有s3:ListBucket:

<Error>
 <Code>AccessDenied</Code>
 <Message>Access Denied</Message>
 <RequestId>xxxx</RequestId>
 <HostId>xxxx</HostId>
</Error>

对相同不存在对象的有效请求的响应,带有s3:ListBucket:

<Error>
 <Code>NoSuchKey</Code>
 <Message>The specified key does not exist.</Message>
 <Key>fakefile.txt</Key>
 <RequestId>xxxx</RequestId>
 <HostId>xxxx</HostId>
</Error>

因此,在实际不存在的对象上,“拒绝访问”是没有s3:ListBucket的预期响应。否则,它将按预期工作。

 类似资料:
  • 我想设置IAM策略以允许用户发布到SNS以发送SMS并发布到特定的SNS arn。 我找到了一种允许短信发布而不允许任何SNS发布的方法:使用亚马逊SNS客户端发送短信时的授权 但是这个策略明确拒绝所有其他SNS发布,所以我不能添加允许特定SNS发布的策略。 问题是SMS发布没有特定的arn。 所以我正在寻找一种方法来限制只允许发布短信的条件。但是具体的短信参数(phone number cf h

  • Meteor 的安全系统不需要我们在每次修改数据的时候,在各自的函数里面进行手动检查。 例如,对于一个博客系统,我们常常需要做很多操作,往新帖子上添加属性,当发布帖子的时候进行特定检查。这些操作都是围绕帖子(post)这个对象进行的,所以我们应该为帖子设置一个专门的函数进行安全检查。 但在另一方面,我们又不希望为修改帖子或删除帖子这些简单的操作编写特定的函数。我们只需要在这些操作之前,检查用户是否

  • 我面临着一个关于S3 bucket策略的谜,它阻止了我的一个PHPS3Client的putobject。im得到的错误是: 在“https://s3.amazonaws.com/reusable-system-dev/b1e42024e33d62b852d3c94c85f68c72.jpeg”上执行“putObject”时出错;AWS HTTP错误:客户端错误响应[url]https://s3.a

  • 以下是我所做的: 提前致谢

  • 我已将以下策略附加到IAM用户: 现在,有了附加了上述策略的IAM用户的访问凭据,我试图运行以下命令: 其中,文件policy.json的内容为: 我得到了一个 调用PutBucket策略操作时发生错误(AccessDended):拒绝访问 现在我想知道为什么? 用户的策略语句允许对资源执行: 这就是我试图用我的上述政策所做的。那么,为什么访问被拒绝?

  • 我在Lambda函数上收到来自S3 AWS服务的acccess denied错误。 这是代码: 这是CloudWatch上的错误: 这是堆栈错误: 没有关于S3的任何其他描述或信息,桶权限允许每个人、放置、列表和删除。 我可以做什么来访问S3桶? PS:在Lambda事件属性上,主体是正确的,并且具有管理特权。