security - 亚马逊网络服务 : Setting S3 policy to allow putObject and getObject but deny listBucket

标签 security amazon-web-services amazon-s3

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

这样做的问题是 listBucket 意味着用户可以列出存储桶中的键,这呈现 安全威胁。

是否可以允许getObject和putObject而不允许listBucket? 或者有解决方法吗?

政策如下:

 {
 "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/*"
  ]
}
 ]
}

最佳答案

来自Get Object documentation :

You need the s3:GetObject permission for this operation. For more information, go to Specifying Permissions in a Policy in the Amazon Simple Storage Service Developer Guide. If the object you request does not exist, the error Amazon S3 returns depends on whether you also have the s3:ListBucket permission.

我已通过编辑与您的政策基本相同的政策来确认此行为。

无论我是否拥有 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 的预期响应。否则,它将按预期工作。

关于security - 亚马逊网络服务 : Setting S3 policy to allow putObject and getObject but deny listBucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624762/

相关文章:

ios - 数据保护功能是否也会在 Core Data 的幕后保护 sqlite 文件?

javascript - 使用 Javascript 客户端进行 REST 基本身份验证的安全缺陷是什么(如果有)?

php - 你如何让当前用户登录到 apache 领域?

node.js - 保证回调后执行aws lambda?

redirect - Amazon S3 重定向规则 - 缺少 GET 数据

amazon-web-services - 上传 CodeBuild 工件*如果*它们存在

java - 如何在 Amazon s3 Bucket 中压缩文件并获取其 URL

php - 如何防止 "leakage"来自 css 文件的 html 信息

amazon-s3 - 显示图像的 AWS S3 策略(只读)。请验证

用于 AWS S3 的 Python + Boto3 : Error - Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"