保留预签名URL或IP地址拒绝的存储分区策略?

时间:2016-03-11 20:59:45

标签: amazon-s3

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

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

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

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

  1. 首先检查有效的预签名网址,并在请求有效时提供该文件

  2. 如果无效,请回退到IP地址限制以防止进一步访问?

  3. 我有一个正在运行的IP限制存储分区策略,但是它会阻止预签名访问...删除存储桶策略会修复预先签名的访问权限,但文件是公开的。

2 个答案:

答案 0 :(得分:7)

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

  • 每个对象的ACL(主要用于授予公共访问权限)
  • Bucket Policy,带有规则,用于定义在哪种情况下允许哪些API调用(例如,仅从给定的IP地址范围)
  • IAM策略 - 类似于Bucket Policy,但可以应用于特定用户或组
  • 授予对象限时访问权限的预签名网址

尝试访问Amazon S3中的内容时,只要上述任何允许访问,就会授予访问权限。无法通过其他方法拒绝访问 - 例如,如果通过预先签名的URL授予访问权限,则Bucket Policy不会导致该访问被拒绝。

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

你说IP限制"踩踏预先签名的访问权限是非常奇怪的。 - 那是不可能的。

答案 1 :(得分:0)

问题解决了 - 这就是我最终的结果。我意识到我正在使用" deny"对于IP地址部分(看到某个地方发布的代码,这些代码在其上运行)它确实覆盖任何允许,所以我需要翻转它。

我还确保我也没有对存储桶中的对象拥有任何匿名权限。

{
"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"
                ]
            }
        }
    }
]