S3 IAM 策略在模拟器中有效,但在现实生活中无效

问题描述 投票:0回答:1

我有一个客户,我希望他能够上传文件,但不能在我的 S3 存储桶中自由导航。我已为他们创建了一个 IAM 用户帐户,并应用了以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1416387009000",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "Stmt1416387127000",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::progress"
            ]
        },
        {
            "Sid": "Stmt1416387056000",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::progress/*"
            ]
        }
    ]
}

共有三种说法:

  1. 能够列出所有存储桶(否则他们登录时在 S3 控制台中看不到任何内容)
  2. 能够列出progress存储桶的内容
  3. 能够将对象放入进度桶中

用户可以使用其用户名和密码(以及我的自定义账户 URL,即 https://account.signin.aws.amazon.com/console)登录 AWS 控制台。他们可以转到控制台的 S3 部分,并查看我所有存储桶的列表。但是,如果他们单击progress,那么他们只会收到以下错误消息:

对不起!您被拒绝执行此操作。

我已使用 IAM 策略模拟器检查用户是否对存储桶的 ARN (

ListBucket
) 具有
arn:aws:s3:::progress
权限,并且策略模拟器表示应允许该用户。

我已经以目标用户身份注销并再次登录,以防策略仅在注销时刷新,但仍然不高兴。

我做错了什么?我是不是错过了什么?

amazon-web-services amazon-s3 amazon-iam
1个回答
5
投票

我的猜测是,当使用 AWS 控制台时,会进行另一个调用来获取存储桶位置,然后才能列出该存储桶中的对象,并且用户无权进行该调用。您还需要授予他对

GetBucketLocation
的帐户访问权限。 文档

中的相关文本

当您使用 Amazon S3 控制台时,请注意,当您单击存储桶时, 控制台首先发送 GET Bucket location 请求来查找 部署存储桶的 AWS 区域。然后控制台使用 用于发送 GET Bucket 的存储桶的特定于区域的端点(列表 对象)请求。因此,如果用户要使用控制台, 您必须授予 s3:GetBucketLocation 操作权限,如图所示 在以下政策声明中:

{
   "Sid": "RequiredByS3Console",
   "Action": ["s3:GetBucketLocation"],
   "Effect": "Allow",
   "Resource": ["arn:aws:s3:::*"]
}
© www.soinside.com 2019 - 2024. All rights reserved.