Amazon s3 遵守预签名URL或IP地址拒绝的Bucket策略?

Amazon s3 遵守预签名URL或IP地址拒绝的Bucket策略?,amazon-s3,Amazon S3,我希望能够以多种方式限制对S3存储桶中文件的访问。这是因为存储的文件可以以不同的方式访问。我们这样做是因为我们有TBs的文件,所以我们不想复制bucket 一种访问方法是通过使用S3 bucket作为源的标记化CDN交付。为了可以提取文件,我设置了文件的权限,允许每个人下载。使用bucket策略,我可以限制可以获取bucket中文件的IP地址。因此,我将它们限制在CDN IP块中,那些IP地址之外的任何人都无法获取该文件 另一种是访问方法,即使用我们的存储系统直接下载,该存储系统生成S3时间到期

我希望能够以多种方式限制对S3存储桶中文件的访问。这是因为存储的文件可以以不同的方式访问。我们这样做是因为我们有TBs的文件,所以我们不想复制bucket

一种访问方法是通过使用S3 bucket作为源的标记化CDN交付。为了可以提取文件,我设置了文件的权限,允许每个人下载。使用bucket策略,我可以限制可以获取bucket中文件的IP地址。因此,我将它们限制在CDN IP块中,那些IP地址之外的任何人都无法获取该文件

另一种是访问方法,即使用我们的存储系统直接下载,该存储系统生成S3时间到期的预签名URL

由于CDN拉取有效地需要文件公开可读,有没有办法:

  • 首先检查有效的预签名URL,如果请求有效,则提供文件

  • 如果无效,返回IP地址限制以防止进一步访问


  • 我有一个有效的IP限制bucket策略,但它会阻止预签名访问…删除bucket策略会修复预签名访问,但文件是公共的。

    默认情况下Amazon S3中的对象是私有的。然后可以通过以下任何方法授予访问权限:

    • 每对象ACL(主要用于授予公共访问权限)
    • 具有规则的Bucket策略,用于定义在何种情况下允许哪些API调用(例如仅从给定的IP地址范围)
    • IAM策略——类似于Bucket策略,但可以应用于特定的用户或组
    • 一个预先签名的URL,允许对对象进行有时间限制的访问
    当尝试访问AmazonS3中的内容时,只要上述任何一项允许访问,那么访问就被授予。不可能通过其他方法拒绝访问—例如,如果通过预签名URL授予访问权限,则Bucket策略不能导致拒绝该访问

    因此,系统会自动执行您希望的操作。。。如果预签名的URL有效,则授予访问权限。如果IP地址来自所需范围,则授予访问权限。它应该能正常工作


    非常奇怪的是,你说IP限制“扼杀了预先签署的访问”——这应该是不可能的。

    问题解决了——以下是我的结论。我意识到我对IP地址部分使用了一个“拒绝”(看到代码发布在某个地方,它自己工作)来覆盖任何允许,所以我需要翻转它

    我还确保我对bucket中的对象没有任何匿名权限

    {
    "Version": "2012-10-17",
    "Id": "S3PolicyId2",
    "Statement": [
        {
            "Sid": "Allow our access key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789:user/myuser"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::mybucket/*"
        },
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.168.0.1/27",
                        "186.168.0.1//32",
                        "185.168.0.1/26"
                    ]
                }
            }
        }
    ]
    

    如果删除IP限制策略允许下载所有文件,那么签名的URL将无法正常工作,因为听起来各个对象都是公共的。他们不应该这样。如果操作正确,只需允许来自白名单IP的匿名访问,而不是拒绝来自“非”白名单IP的访问。您能否澄清您的CDN是CloudFront,还是其他什么?原因是CloudFront支持一个对象访问标识,可以专门允许CloudFront访问S3存储桶。很奇怪,你说IP限制“阻止预签名访问”——这应该是不可能的。你能提供你创建的策略的(修订)副本吗?我在IP地址中使用了拒绝的事实是问题所在…谢谢你对这方面的见解,Michael。我在下面列出了我的最终代码,以供将来遇到这种情况的人使用。非常感谢您——这篇文章和另一篇文章对我帮助很大。我的问题是,我正在使用拒绝来拒绝策略中未列出的任何IP地址。拒绝总是覆盖允许,所以这就是发生的情况。将我的代码调整到上面的位置可以修复这种情况。