首页 文章

如何限制CloudFront仅限访问我的网站?

提问于
浏览
0

我已经查看了下面的答案,但它讨论了私有内容和签名URL的Origin Access Identity . 我的内容不是私密的,它是公开的,但我不希望其他网站热链接到我的图像 . 换句话说,我的网站上的图片应该通过我的域名下的网址进行访问 .

Simple example to restrict access to Cloudfront(S3) files from some users but not others

我已经按照下面的文档在我的CloudFront分配上创建了OAI .
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html

在我的发行版上应用OAI后,发生了一些奇怪的事情 . 我可以访问一些图像,有些我不能 .
当从localhost工作时,我无法访问CloudFront图像 .

有没有办法可以指定哪些域可以访问我的资源,哪些域没有?像这样?

{
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "http://example.com/*",
                        "localhost:*"
                    ]
                }
            }
        }

1 回答

  • 0

    通过像您一样的策略进行的“阻止”操作必须在Cloudfront级别进行 . S3将不会考虑因素,除非在查询新内容时(这可能解释了为什么您在尝试访问图像时遇到了奇怪的问题) .

    如果您的问题基本上是试图阻止热链接,那么不幸的是,我认为通过AWS处理此问题的唯一方法是使用签名URL:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html

    这是一个关于这个主题的Stack线程:Preventing Amazon Cloudfront hotlinking

    只是为了给你一个更简单的选择,虽然偶尔需要手动更新,但这是我过去所做的 . 其核心是在您的Cloudfront发行版上添加CNAME,例如assets-1.yoursite.com . 几个月后,如果您发现自己被热链接,可以将CNAME更改为assets-2.yoursite.com,然后更新您的网站以使用新网址 . 如果您有一个控制站点CDN路径的变量,则可以快速解决此问题 .

    这里有详细解释:http://www.explainthatstuff.com/blocking-cloudfront-hotlinks.html

    然后,您可以使用AWS控制台中的Cloudfront“热门对象”和“热门推荐人”分析部分来监控来自其他网站的流量,以确定何时是切换CNAME的好时机 .

相关问题