0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CloudFront+Apacheでのオリジンアクセスコントロール

Posted at

CloudFront+S3の場合、オリジンアクセスコントロールを行おうと思うとAWSコンソール上で作業が完結するのですが、ApacheサーバをEC2上に建ててCloudFrontを使っている場合、Apache側でアクセス制御を実施する必要があります。

このケースについてのまとまった情報があまり見つからなかったので備忘録として残しておきます。

仕様

以下のようなアクセス制御を実現します。

  • CloudFrontからのオリジンアクセス時にカスタムヘッダーを設定
  • Apacheではカスタムヘッダーを確認し、存在しない場合は403エラーを返す
  • 403エラーの場合は.htaccessでCloudFrontのキャッシュページ(トップページ)を返す

設定方法

CloudFrontのディストリビューションにカスタムヘッダーを設定

ディストリビューション作成時に以下の設定項目があるのでここに適当な名前でカスタムヘッダーを設定します。
すでに作成済みの場合は、
対象ディストリビューションを選択→「オリジン」のタブをクリック→対象のオリジンを選択→「編集」で修正可能です。

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

今回はorigin-access-tokenという名前で値はランダムな文字列を設定しました。

Apacheの設定ファイルでカスタムヘッダーをチェック

Apacheサーバの設定ファイル(*.conf)に以下の記述を行います。

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]

status 403が返ってくるはずです

カスタムヘッダーありでのチェック

# curl -H "origin-access-token:[設定文字列]" -I [オリジンURL]

status 200が返ってくるはずです

.htaccessで403エラー時に返すページを指定する

この設定はなくても構いませんが、ユーザに403の無機質なエラーページを見せたくない場合は.htaccessに設定してください。

.htaccess
ErrorDocument 403 [リダイレクト先ページ]

補足

カスタムヘッダーをChrome上で設定できるプラグインもあるので、管理者はこれを使えばブラウザからオリジンにアクセスできるようにもできます。

まとめ

うまくオリジンアクセス制御ができるようになりました。
セキュリティ的にあまり強固な方法とはいえない気がしますが、無尽蔵なオリジンアクセスをブロックするためにはやっておいた方がいい対策かなと思います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?