amazon web services—AWS S3桶策略限制get到一组ip



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

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

我希望只允许来自ip白名单的geobject。这是我尝试过的,但它不起作用(外部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反映这个更改,还是应该立即反映?

尝试添加一个Deny,以及例外,像这样:

{
    "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用户策略。


回答你的附加问题,政策变化立即生效。

对S3桶的访问由S3桶策略和附加到访问桶的主体上的IAM访问策略控制。

所以IAM访问策略可能会"否决"S3桶策略。

您的S3桶策略说"如果IP是某某,允许获取"。但是桶策略中没有任何内容说"不允许其他任何人"。

如果访问桶的IAM用户/角色允许桶上的s3:GetObject(或*),那么该策略允许他们访问桶。

如果IAM用户/角色没有明确的"允许"s3:GetObject"(或"s3:*"),那么您的策略将工作。

为了防止允许访问桶的用户/角色被限制到IP地址,那么你需要改变你的策略为"拒绝"任何不在允许的IP地址中的人。桶策略中的显式"deny"将否决IAM用户/角色策略中的任何"allow"。

试试这个策略。

{
    "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",
                    ]
                }
            }
        }
    ]
}

最新更新