为什么附加到IAM用户的此策略不起作用

时间:2018-12-23 01:11:39

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

希望您能提供帮助!

我创建了一个新的AWS测试账户。

我在S3中创建了一个新存储桶,未选择任何推荐的公共或私有设置。说,“对象可以是公共的”。

然后我创建了一个IAM用户,用于程序访问,下载的访问和密钥。

然后,我根据此AWS文章创建了以下策略以授予对所述存储桶的访问权限: https://aws.amazon.com/blogs/security/writing-iam-policies-how-to-grant-access-to-an-amazon-s3-bucket/

以下是政策(已删除存储桶名称):

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::test-bucket"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
        ],
        "Resource": [
            "arn:aws:s3:::test-bucket/*"
        ]
    }
]
}

然后我将此政策附加到该用户。

使用SDK或Policy Simulator时,确认我使用的是正确的密钥,但我不断收到“访问被拒绝”错误。

策略模拟器说:“被明确拒绝(没有匹配的语句)。

enter image description here 提前致谢。

1 个答案:

答案 0 :(得分:0)

您附加给用户的策略很好。只需在测试操作时确保您使用正确的存储桶名称并使用正确的访问密钥即可。

我使用相同的策略进行了测试,只是更改了存储桶名称。以下是输出

  1. 我已使用正确的访问键在本地计算机上设置了配置文件
  2. 以下是添加策略之前和之后的输出

enter image description here

或者,您可以使用以下存储桶策略。

将以下策略添加到您的存储桶策略中。相应地更改帐号,用户名和存储桶名称

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::01234567890:user/test-user"
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::bucketname"
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::01234567890:user/test-user"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::bucketname/*"
        }
    ]
}