AWS S3存储桶策略限制GET到一组IP?

时间:2016-08-11 16:09:31

标签: amazon-web-services amazon-s3

我目前有一个名为mets-logos的存储桶。它目前有这个存储桶策略,允许任何人使用GetObjects。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mets-logos/*"
        }
    ]
}

我希望只允许来自IP白名单的GetObjects。这是我尝试过的,但它不起作用(在IP之外仍然可以得到对象)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mets-logos/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "100.77.17.80/32",
                        "100.77.26.210/32",
                    ]
                }
            }
        }
    ]
}

附带问题:如果我的存储桶策略正确,我是否需要等待AWS反映此更改,还是应立即反映?

2 个答案:

答案 0 :(得分:1)

尝试添加拒绝以及异常,如下所示:

{
    "Version":"2012-10-17",
    "Id":"S3PolicyId1",
    "Statement":
    [
        {
            "Sid"      : "IPAllow",
            "Effect"   : "Deny",
            "Principal": "*",
            "Action"   : "s3:GetObject",
            "Resource" : "arn:aws:s3:::mets-logos/*",
            "Condition": {
                "IpAddress"   : {
                    "aws:SourceIp": "0.0.0.0/0"
                },
                "NotIpAddress": {
                    "aws:SourceIp": "100.77.17.80/32"
                },
                "NotIpAddress": {
                    "aws:SourceIp": "100.77.26.210/32"
                }
            }
        }
    ]
}

这明确拒绝访问所有IP地址,但允许您列入白名单的两个地址执行GetObject

如果您在IAM凭据下访问S3但又希望在存储桶级别进一步控制访问,我可以看到这将如何有用。此策略中的Deny将覆盖现有的IAM用户策略。

要回答您的问题,政策更改会立即生效。

答案 1 :(得分:0)

对S3存储桶的访问受S3存储桶策略和连接到访问存储桶的主体的IAM访问策略的控制。

因此,IAM访问策略可能会覆盖"否则" S3存储桶策略。

你的S3存储桶策略说"如果IP是这样的那么就允许获取"。但是政策政策中没有任何内容可以说“不允许其他任何人”#34;

如果您的访问存储区的IAM用户/角色允许您的存储区s3:GetObject(或*),则该策略允许他们访问存储桶。

如果IAM用户/角色没有明确的"允许" for" s3:GetObject" (或" s3:*"),那么你的政策就可以了。

为了防止允许访问存储桶的用户/角色限制为IP地址,您需要将策略更改为"拒绝"任何人都不在允许的IP地址。一个明确的拒绝"在桶中政策将否决任何"允许"在IAM用户/角色的政策中。

尝试此政策。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAllButFromAllowedIp",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mets-logos/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "100.77.17.80/32",
                        "100.77.26.210/32",
                    ]
                }
            }
        }
    ]
}