AWS S3存储桶策略白名单

时间:2018-11-21 21:55:58

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

我有一个存储桶策略,该策略将我的IP范围列入AWS的白名单。我有一台运行Packer构建作业的EC2服务器,该服务器试图从我的存储桶中拉出一个对象,并且出现403 Forbidden错误,即使运行该作业的EC2服务器的IP显然在白名单范围内。即使从wget范围内的计算机运行CIDR,我也会遇到相同的错误。我很困惑为什么会这样。该政策似乎还不错。以下是我的存储桶策略,服务器的IP和错误:

Bucket Policy:

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::xxxxxxx",
                "arn:aws:s3:::xxxxxxx/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "10.x.x.x/12"
                    ]
                }
            }
        }
    ]
}

Server IP:

10.x.x.x/32

Error:

ui,message,    amazon-ebs:     "msg": "Error downloading 
https://s3.amazonaws.com/xxxxx/yyyy.zip to C:\\temp\\xxx.zip Exception 
calling \"DownloadFile\" with \"2\" argument(s): \"The remote server 
returned an error: (403) Forbidden.\""

2 个答案:

答案 0 :(得分:3)

Amazon S3位于Internet上。

因此,当与S3通信时,您的系统将使用公共IP地址

但是,您的策略仅包含私有IP地址。这就是为什么它不起作用。

您的选择是:

  • 修改策略以使用实例的公共IP地址,或者如果您的实例位于专用子网 OR 中,则使用NAT网关的公共IP地址
  • 创建一个Gateway VPC Endpoint,将VPC直接连接到Amazon S3。然后,您可以配置存储桶策略,该策略仅通过VPC端点接受流量。

答案 1 :(得分:1)

aws:sourceIp需要一个 public IP地址。根据定义,专用地址是不明确的,并且10.x.x.x/12是专用(RFC-1918)地址,因此它永远不会匹配。

如果您不使用S3 VPC端点,则可以将NAT网关的公共IP地址列入白名单(假设所有有权访问该网关的实例都可以访问该存储桶)。

如果使用的是S3 VPC端点,则无法按IP列入白名单:

  

您不能在IAM策略中使用aws:SourceIp条件通过VPC终端节点向Amazon S3发出请求。这适用于用户和角色的IAM策略以及所有存储桶策略。如果语句包含aws:SourceIp条件,则该值无法匹配任何提供的IP地址或范围。

     

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html

还有,这是

  

注意:最好不要使用aws:SourceIp条件键。

     

https://aws.amazon.com/premiumsupport/knowledge-center/iam-restrict-calls-ip-addresses/