CDNETWORKSカスタムHTTPヘッダを使用してWEBサーバへのアクセスをCDNだけに制限するACL方法


はじめに

オブジェクトが CDNETWORKS CDNディストリビューションを介してのみアクセスできるように、WEBサーバへのアクセスを制限したいと思ったのですが、CDNプラットフォームが利用しているIP帯は全世界で使いまわしているらしく、もしIPベースで制限したいとなると400以上のCIDRレンジでの登録になると言われました!

そうなると流石にIPベースで制限するのも限度があって非現実的なので、他の制限方法を考えました。

  • .htaccessで全体アクセス制限
  • 認証のためのヘッダ名とValueを決めて.htaccessで許可する
  • CDNカスコンでソースサーバに対してのみ認証の為のヘッダ名とValue差込を設定

1. ヘッダによるアクセス制限を.htaccessで実施

ヘッダによるアクセス制限を.htaccessに先ずは下記の条件で書き入れました。

  • 全体としてアク禁: deny from all
  • 認証のためのヘッダ名とValueを決めて.htaccessで許可する:SetEnvIf x-cdn-acl "^cdnetworks-access-ok" chk_cdn
htaccess
# AccessControl CDN
SetEnvIf x-cdn-acl "^cdnetworks-access-ok" chk_cdn
SetEnvIf x-cdn-acl "^cdnetworks-access-iiyo" chk_cdn

order deny,allow
deny from all
allow from env=chk_cdn

 
確認の為まずはテストドメインに入れてみました。

ちゃんとアク禁になってますね!
これでCDNを経由したリクエストにのみ認証のためのヘッダ名とValueがあればおけですね。

2.CDNカスコンでソースサーバに対してのみ認証の為のヘッダ名とValue差込を設定

CDNカスコンからサーバ上流にのみ認証のために決めたヘッダ名とValueを差込します。

ヘッダ名:x-cdn-acl
Value:cdnetworks-access-ok

ここで注意点はBack to Source Requestにのみ付与するという点です。間違ってもClient Response側に付与したらダメですw認証内容がダダ洩れなるので

さて、実際アクセスできるようになったか確認してみます。

できますたーー

まとめ

Custom HTTP Headerを使用してWEBサーバ側へのアクセスを制限した後は、WAFやBOTを統合することで、セキュリティレベルを高めたサイト運用ができるかと思います。