如何允许从特定IP访问Amazon S3

时间:2018-05-03 05:41:37

标签: amazon-web-services amazon-s3

我正在尝试此策略以允许用户仅使用特定IP(56.160.12.114)放置和列出对象访问权限,而其余所有其他应该只具有Get访问权限。但是这个政策对我不起作用:

{
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPDeny",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-wicked-awesome-bucket/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "56.160.12.114/28"
                }
            }
        }
    ]
}

1 个答案:

答案 0 :(得分:2)

此政策说:拒绝任何未使用此IP地址范围的人

没关系,但您还需要一个允许访问的策略,因为默认行为是拒绝。因此,您正在拒绝默认情况下已被拒绝的人。

更好的方法是:

  • 具有默认拒绝访问权限(自动发生)
  • 允许基于IP的访问

这样的事情:

{
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-wicked-awesome-bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "56.160.12.114/28"
                }
            }
        }
    ]
}

但请注意,这将授予s3:*对来自该IP地址范围的任何系统的访问权限(包括连接到该网络范围的任何内容)。确保你没关系。

<强>更新

如果您只想授予用户放置和列出对象的权限,请使用:

{
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::jstack-b",
                "arn:aws:s3:::jstack-b/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "56.160.12.114/28"
                }
            }
        }
    ]
}