S3 AccessDenied与策略不匹配

时间:2016-11-30 15:51:55

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

我有以下政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StmtXXX",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::MYBUCKET"
            ]
        }
    ]
}

(是的,我打算在我开始工作的时候回顾s3:*

以下列表存储桶操作正常:

$ aws s3 ls s3://MYBUCKET/test --profile MYPROFILE --region eu-west-1
2016-11-30 15:21:13   16712119 test

但PUT无法正常工作

$ aws s3 cp /tmp/test2 s3://MYBUCKET/test2 --profile MYPROFILE --region eu-west-1
upload failed: ../../../../tmp/test2 to s3://MYBUCKET/test2
A client error (AccessDenied) occurred when calling the CreateMultipartUpload operation: Access Denied


Parameter validation failed:
Invalid type for parameter UploadId, value: None, type: <type 'NoneType'>, valid types: <type 'basestring'>

我在IAM策略模拟器中尝试了这个,看起来应该可行。我已经确认密钥对应于正确的用户。

(我也尝试使用自己的凭据并且操作正常,所以我认为这不是语法错误)

这应该有用吗?任何想法为什么不是?

2 个答案:

答案 0 :(得分:0)

答案似乎是IAM策略可能需要一些时间才能传播。这从不工作,到间歇,再到工作。

所以如果你面临一个莫名其妙的情况,请等几分钟。

答案 1 :(得分:0)

如果要在同一语句中指定存储桶和对象操作,则需要将存储桶内容作为资源与存储桶本身分开输入

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "StmtXXX",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::MYBUCKET",
                "arn:aws:s3:::MYBUCKET/*"
            ]
        }
    ]
}