S3 IAM策略在模拟器中工作,但在现实生活中不起作用

时间:2014-11-19 09:11:51

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

我有一个客户,我希望能够上传文件,但不能在我的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. 能够列出进度存储桶
  3. 的内容
  4. 能够将对象放入进度存储区
  5. 用户可以使用他们的用户名和密码(以及我的自定义帐户网址,即https://account.signin.aws.amazon.com/console)登录AWS控制台。他们可以转到控制台的S3部分,查看我所有存储桶的列表。但是,如果他们点击进度,则会收到以下错误消息:

      

    抱歉!您被拒绝访问。

    我已经使用IAM策略模拟器检查了用户是否对存储桶的ARN(ListBucket)具有arn:aws:s3:::progress权限,而策略模拟器表示应该允许用户使用。

    我已经注销并再次作为目标用户,以防注销时只刷新政策,但仍然没有快乐。

    我做错了什么?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

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

的相关文字
  

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

{
   "Sid": "RequiredByS3Console",
   "Action": ["s3:GetBucketLocation"],
   "Effect": "Allow",
   "Resource": ["arn:aws:s3:::*"]
}