使用IAM用户正确(最佳)配置S3 Bucket Policy

时间:2015-07-16 10:50:07

标签: amazon-web-services amazon-s3

我对S3存储桶策略有一些经验,但最近我开始尝试使用IAM用户/组和S3存储区ACL。困扰我的是我无法理解他们如何一起工作。谁覆盖了什么?我想要完成的是拥有特定的IAM用户(带有凭据),用于在我的应用程序中上传。我已将IAM政策附加到它上面,如下所示:

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

此政策已附加到IAM用户。然后我在S3 Bucket上创建了以下策略:

{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Sid": "DefaultPrivate",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "*",
        "Resource": "arn:aws:s3:::xxxxx-xxxxxx-xxxx/*"
    },
    {
        "Sid": "ThumbnailAndGaleryReadOnly",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": [ 
            "arn:aws:s3:::xxxx-xxx-xxxx-xxxx/*/xxxxx/*",
            "arn:aws:s3:::xxxxx-xxxxx-xxxxx/*/xxxxxxx/*"
        ]
    },
    {
        "Sid": "S3UploaderWrite",
        "Effect": "Allow",
        "Principal": {"AWS":"arn:aws:iam::xxxxxxxxxx:user/xxxxxxxx"},
        "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"
        ],
        "Resource": "arn:aws:s3:::xxxxxxxxxxxx/*"
    }
    ]
}

不幸的是,只要S3策略中存在“拒绝”阻止 - 它就不允许我的S3用户上传文件。是否有可能我不能“覆盖”具有“允许”块的特定用户的拒绝(IAM标识符是正确的 - 我已经双重检查)。删除“拒绝”块让它工作,但......这不是重点。

有关此问题的任何评论?如何明确拒绝所有内容,然后仅允许某些IAM用户/组/角色的某些操作?

感谢。

1 个答案:

答案 0 :(得分:0)

你可以删除拒绝委托人*。你可以指定被拒绝的用户或角色,例如" Principal":{" AWS":" arn:aws:iam :: xxxxxxxxxx:user / xxxxxxxx"}。它解决了你的问题。