使用CloudFront和Apache进行源访问控制
如果使用CloudFront+S3,想要进行源访问控制,需要在AWS控制台上完成操作。但是,如果使用EC2上的Apache服务器并使用CloudFront,则需要在Apache端实施访问控制。
由于找不到关于这个案例的详细信息,所以我将其留作备忘录。
规格
实现以下访问控制。
-
- CloudFrontからのオリジンアクセス時にカスタムヘッダーを設定
-
- Apacheではカスタムヘッダーを確認し、存在しない場合は403エラーを返す
- 403エラーの場合は.htaccessでCloudFrontのキャッシュページ(トップページ)を返す
设定步骤
在CloudFront的分发中设置自定义的头信息。
在创建分发时,需要设置以下配置项,您可以使用合适的名称来设置自定义标头。
如果已经创建了分发,
可以选择目标分发→点击“源”标签→选择目标源→通过点击“编辑”进行修改。

这次我们将其命名为origin-access-token,并设置了一个随机字符串作为值。
在Apache的配置文件中检查自定义标题。
在Apache服务器的配置文件(*.conf)中进行以下描述。
<Directory [アクセス制御をしたいディレクトリ]>
order deny,allow
deny from all
SetEnvIf origin-access-token "CloudFrontに設定した文字列" origin-access
allow from env=origin-access
</Directory>
请重启Apache以应用设置。
根据前面的操作,您应该无法通过浏览器访问到该起点。
用curl确认
不使用自定义标题的检查
$ curl -I [オリジンURL]
应该返回状态码403。
在使用自定义标题选项时进行检查。
# curl -H "origin-access-token:[設定文字列]" -I [オリジンURL]
应该会返回状态码200。
在.htaccess中指定返回403错误时的页面
如果不需要这个设定也可以,但如果不想让用户看到403无机错误页面,请在.htaccess中设置。
ErrorDocument 403 [リダイレクト先ページ]
补充
有一些Chrome上的插件可以设置自定义标头,因此管理员可以使用它来从浏览器访问原始内容。
总结
我已经可以成功进行源访问控制了。虽然从安全角度来说并不是非常牢固的方法,但我认为为了阻止无穷无尽的源访问,采取这个措施还是比较好的。