如何将 IP 限制添加到已经有用户限制的 s3 存储桶(在存储桶策略中)

Posted

技术标签:

【中文标题】如何将 IP 限制添加到已经有用户限制的 s3 存储桶(在存储桶策略中)【英文标题】:How can I add IP restrictions to s3 bucket(in the bucket Policy) already having a User restriction 【发布时间】:2020-06-02 13:20:02 【问题描述】:

我有几个 s3 存储桶,我只向特定的 IAM 用户授予了访问权限。我通过设置以下存储桶策略来做到这一点:

    Effect : "Deny" NotPrincipal : "AWS " : "<My_IAM_User>"

我只能从 IAM 用户访问存储桶,因此该策略按预期工作,但我还想将存储桶访问限制为仅特定 IP。这个 IP 是我的服务器运行的 ec2 IP 地址。我使用的策略值如下:

"Condition": 
  "NotIpAddress": 
    "aws:SourceIp": [
       "<My_EC2_Server_IP_Address>"
    ]
  

我希望上述策略只允许我的 EC2 服务器访问 s3 存储桶对象,但如果我从任何其他 IP 进行调用(例如:在我的本地计算机上运行服务器并尝试访问存储桶) . ) 它仍然响应存储桶中的有效对象。 上述政策似乎没有阻止任何访问存储桶的请求来自其他随机 IP 地址。

我的整个存储桶策略如下所示:


    "Version": "<Version_value>",
    "Statement": [
        
            "Sid": "<Sid_value>",
            "Effect": "Deny",
            "NotPrincipal": 
                "AWS": "<My_IAM_User>"
            ,
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::<My_Bucket_name>/*",
            "Condition": 
                "NotIpAddress": 
                    "aws:SourceIp": "<My_EC2_Server_IP_Address>"
                
            
        
    ]

我的参考资料: 1.https://aws.amazon.com/premiumsupport/knowledge-center/block-s3-traffic-vpc-ip/ 2.https://medium.com/@devopslearning/100-days-of-devops-day-11-restricting-s3-bucket-access-to-specific-ip-addresses-a46c659b30e2

【问题讨论】:

您应该包含整个策略(屏蔽任何敏感数据,例如 IP、IAM 用户 ARN 和存储桶名称)。 当然@jarmod,我已经添加了我的整个存储桶策略。长期以来一直坚持这一点,如果我能找到解决方案,那将非常有帮助。提前致谢。 【参考方案1】:

如果您的意图是拒绝除给定 IAM 用户之外的所有 AWS 凭证并拒绝给定 IP 之外的所有 IP 地址,那么我会将该策略编写为两个独立的拒绝语句。

类似这样的:


    "Version": "<Version_value>",
    "Statement": [
        
            "Sid": "deny1",
            "Effect": "Deny",
            "NotPrincipal": 
                "AWS": "<My_IAM_User>"
            ,
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::<My_Bucket_name>/*"
        ,
        
            "Sid": "deny2",
            "Effect": "Deny",
            "Principal": 
                "AWS": "*"
            ,
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::<My_Bucket_name>/*",
            "Condition": 
                "NotIpAddress": 
                    "aws:SourceIp": "<My_EC2_Server_IP_Address>"
                
            
        
    ]

注意 IP 地址条件。除非您使用弹性 IP,否则您的 EC2 实例的 IP 可以更改,例如如果停止,则重新启动实例。

另请注意:您不应在 EC2 实例上使用 IAM 用户凭证。相反,您应该使用 IAM 角色。

【讨论】:

以上是关于如何将 IP 限制添加到已经有用户限制的 s3 存储桶(在存储桶策略中)的主要内容,如果未能解决你的问题,请参考以下文章

Discourse 如何限制存储到 S3 的备份文件数量

Discourse 如何限制存储到 S3 的备份文件数量

AWS:将 IAM 用户限制在 S3 存储桶中的特定文件夹

在不将 ip 列入白名单的情况下限制对 S3 托管网站的访问

限制对 S3 中对象的访问

s3直接上传限制文件大小和类型