Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket
Posted
技术标签:
【中文标题】Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket【英文标题】:Amazon Web Services : Setting S3 policy to allow putObject and getObject but deny listBucket 【发布时间】:2015-02-21 20:31:34 【问题描述】:我在 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/*"
]
]
【问题讨论】:
【参考方案1】:来自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>
对相同不存在对象的有效请求的响应,with 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
的预期响应。否则,它会按预期工作。
【讨论】:
确实如此。谢谢以上是关于Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket的主要内容,如果未能解决你的问题,请参考以下文章
text 如何使用Apache,PHP,MySQL设置Amazon Web Services EC2实例
com.amazonaws.services.s3.model.AmazonS3Exception:禁止(服务:Amazon S3;状态代码:403;错误代码:403 Forbidden;请求 ID:
对于 Amazon Web Services 上极短的流量峰值,正确的 Cloudwatch/Autoscale 设置是啥?