Zig*_*rth 5 security amazon-s3 amazon-web-services
我在Amazon S3上使用getObject和putObject请求,并在创建访问存储桶的策略时发现,如果我不允许listBucket,则会出现“访问被拒绝”错误。
问题是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/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
从获取对象文档:
您需要
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>
Run Code Online (Sandbox Code Playgroud)
对同一不存在对象的有效请求的响应,其中 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>
Run Code Online (Sandbox Code Playgroud)
因此,对于实际不存在的对象,“访问被拒绝”是没有s3:ListBucket. 否则,它将按预期工作。
| 归档时间: |
|
| 查看次数: |
1960 次 |
| 最近记录: |