IAM用户策略在Amazon S3存储桶上返回403禁止访问错误

5

我正在努力使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存储桶中进行创建新对象的post操作时,我遇到了403 Forbidden错误。但是,当我使用名为“AmazonS3FullAccess”的托管策略时,一切都可以正常运行。
我的目标是限制特定IAM用户的上传/下载权限,但我正在努力使其正常工作。
如果有任何建议,将不胜感激!
2个回答

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

2

首先,您可以确定是操作有误还是资源范围有误,您可以逐个使用这两个策略:

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

and

    "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"
    ]

如果两者都失败了,那么很可能是您的操作和资源都有问题。
祝好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接