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

时间:2014-12-23 16:59:17

标签: security amazon-web-services amazon-s3

我在Amazon S3上使用getObject和putObject请求,并在创建访问存储桶的策略时发现,如果我不允许listBucket,我会被拒绝访问#39;错误。

这个问题是listBucket意味着用户可以列出存储桶中的密钥并显示 安全威胁。

是否可以在不允许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 个答案:

答案 0 :(得分:4)

来自Get Object documentation

  

此操作需要s3:GetObject权限。有关更多信息,请转到Amazon Simple Storage Service开发人员指南中的在策略中指定权限。如果您请求的对象不存在,则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>

因此,对于实际上不存在的对象,&#34;访问被拒绝&#34;是没有s3:ListBucket的预期回复。否则,它按预期工作。

相关问题