s3 策略允许在同一语句中使用多个 IP

Posted

技术标签:

【中文标题】s3 策略允许在同一语句中使用多个 IP【英文标题】:s3 policy allow multiple IPs at the same statement 【发布时间】:2016-08-05 17:21:01 【问题描述】:

我正在尝试允许从 3 个指定的 IP 地址连接到存储桶。当我以这种方式添加它们时:


    "Version": "2008-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        
            "Sid": "IPDeny",
            "Effect": "Deny",
            "Principal": 
                "AWS": "*"
            ,
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": 
                "NotIpAddress": 
                    "aws:SourceIp": "ip1",
                    "aws:SourceIp": "ip2",
                    "aws:SourceIp": "ip3"
                
            
        
    ]

保存后,三行中的一行将被保留,因此我只能设置一个 IP。知道如何在不长时间添加新语句和解决方法的情况下做到这一点吗?

【问题讨论】:

【参考方案1】:

    "Version": "2008-10-17",
    "Id": "testPolicy",
    "Statement": [

        
            "Sid": "1",
            "Effect": "Allow",
            "Principal": 
                "AWS": "*"
            ,
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucketname/subfolder/subfolder2/*",
            "Condition": 
                "IpAddress": 
                    "aws:SourceIp": [
                        "xxx.xxx.xxx.xxx/32",
                        "xxx.xxx.xxx.xxx/32"
                    ]
                
            
        

]

【讨论】:

【参考方案2】:

您必须以子网的形式提供 IP,例如 错误:1.2.3.4 右:1.2.3.4/32

【讨论】:

【参考方案3】:

不必为特定 IP 地址应用路由前缀。根据official AWS Documentation,

如果您指定的 IP 地址没有关联的路由前缀,IAM 将使用默认前缀值 /32。

我已经对其进行了测试,即使在 IP 地址后未指定 /32 后它也能正常工作。

【讨论】:

以上是关于s3 策略允许在同一语句中使用多个 IP的主要内容,如果未能解决你的问题,请参考以下文章

允许 lambda 函数访问 S3 存储桶但阻止外部 IP

用于多个账户的跨账户访问的通用 S3 存储桶策略

AWS S3仅允许来自存储桶的映像显示在特定IP地址上

jQuery同一标签多个相同事件 return语句 表单提交实例

如何在 psycopg2 中链接多个语句?

尝试使用基于S3资源的策略允许Lambda访问S3,为什么它不起作用?