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

时间:2015-07-16 21:08:27

标签: amazon-web-services amazon-s3 amazon-cloudfront hotlinking

我已经查看了以下答案,但它讨论了私有内容和签名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 :(得分:0)

"块"通过像您必须在Cloudfront级别执行的策略执行操作。除了查询新内容时,S3不会考虑因素(这可能解释了为什么你在尝试访问图像时出现了奇怪的问题)。

如果你的问题主要是试图阻止热链接,那么不幸的是,我认为通过AWS处理这个问题的唯一方法是使用签名网址: 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

然后,您可以使用Cloudfront' Popular Objects'和#'热门推荐人' AWS控制台中的分析部分,用于监控来自其他站点的流量,以确定何时是切换CNAME的好时机。