使用CloudFront和Apache进行源访问控制

如果使用CloudFront+S3,想要进行源访问控制,需要在AWS控制台上完成操作。但是,如果使用EC2上的Apache服务器并使用CloudFront,则需要在Apache端实施访问控制。

由于找不到关于这个案例的详细信息,所以我将其留作备忘录。

规格

实现以下访问控制。

    • CloudFrontからのオリジンアクセス時にカスタムヘッダーを設定

 

    • Apacheではカスタムヘッダーを確認し、存在しない場合は403エラーを返す

 

    403エラーの場合は.htaccessでCloudFrontのキャッシュページ(トップページ)を返す

设定步骤

在CloudFront的分发中设置自定义的头信息。

在创建分发时,需要设置以下配置项,您可以使用合适的名称来设置自定义标头。
如果已经创建了分发,
可以选择目标分发→点击“源”标签→选择目标源→通过点击“编辑”进行修改。

スクリーンショット 2023-07-13 12.39.38.png

这次我们将其命名为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上的插件可以设置自定义标头,因此管理员可以使用它来从浏览器访问原始内容。

 

总结

我已经可以成功进行源访问控制了。虽然从安全角度来说并不是非常牢固的方法,但我认为为了阻止无穷无尽的源访问,采取这个措施还是比较好的。

广告
将在 10 秒后关闭
bannerAds