在Amazon S3存储桶上返回403 Forbidden的IAM用户策略

时间:2015-02-25 11:16:02

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

我正在努力让AWS S3 IAM用户策略生效,这是我目前的IAM用户政策:

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "Stmt1424859689000",
        "Effect": "Allow",
        "Action": [
          "s3:DeleteObject",
          "s3:GetObject",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::vault-us/*"
        ]
      }
    ]
  }

当我在我的S3存储桶中创建新对象的帖子时,我收到403 Forbidden错误,但是当我使用托管策略时,称为AmazonS3FullAccess'一切都很好。

我想要做的是限制某些IAM用户上传/下载权限,但我很难让这个工作。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:10)

我设法弄清楚为了上传工作我需要包含动作“s3:PutObjectAcl”这里是我的IAM政策的示例:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetBucketLocation",
                    "s3:ListAllMyBuckets"
                ],
                "Resource": "arn:aws:s3:::*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket"
                ],
                "Resource": [
                    "arn:aws:s3:::vault-us"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:PutObjectAcl"
                ],
                "Resource": [
                    "arn:aws:s3:::vault-us/*"
                ]
            }
        ]
    }

答案 1 :(得分:2)

你可以做的第一件事就是弄清楚它的行为是错误还是资源范围,你可以一次一个这两个政策:

    "Action": [
      "s3:*"
    ],
    "Resource": [
      "arn:aws:s3:::vault-us/*"
    ]

    "Action": [
      "s3:DeleteObject",
      "s3:GetObject",
      "s3:PutObject"
    ],
    "Resource": [
      "*"
    ]

如果第一个工作正常而第二个工作失败,则您没有足够的权限来执行操作,例如:尝试添加listBucket或类似的(我倾向于添加所有可能的,并逐渐删除它们,直到它中断)。

如果第一个打破而第二个打破,那么您的资源声明是错误的,我发现最常见的解决方法是尝试添加:

    "Action": [
      "s3:DeleteObject",
      "s3:GetObject",
      "s3:PutObject"
    ],
    "Resource": [
      "arn:aws:s3:::vault-us/*",
      "arn:aws:s3:::vault-us"
    ]

如果两者都失败,那么你的行动和资源都是错误的。

祝你好运