WEBシステムにおいてセキュリティを考慮することは必須だと思いますが、
そのうちのCSPヘッダーについて、AWS(CloudFront)における設定方法を記録しておきます。
CSPヘッダーとは?
引用:コンテンツセキュリティポリシー (CSP) は、クロスサイトスクリプティング (Cross-site_scripting) やデータインジェクション攻撃などのような、特定の種類の攻撃を検知し、影響を軽減するために追加できるセキュリティレイヤーです。 これらの攻撃はデータの窃取からサイトの改ざん、マルウェアの拡散に至るまで、様々な目的に用いられます。
コンテンツセキュリティポリシー (CSP)
具体的に説明すると、WEBアプリケーション開発において、HTTPレスポンスヘッダー内の「Content-Security-Policy」セクションを設定することでブラウザに対して命令を送ることでブラウザの挙動を制御します、例えば許可していない外部のjavascript(以下js)を読み込ませない、または、実行しないように制限させることができます。
外部 js を読み込んでいて、そのjs内で悪意のあるコードが潜在していた場合、例えばお問合せフォームなどで入力されたユーザー情報を「別のサーバー」に送信してしまうようなプログラムが書かれていた場合、予期せず個人情報の漏洩を幇助することになってしまいます。
CDNによる外部 js の読み込みなども、導入が簡単で読み込みが早いメリットがある一方で、CDN側がウィルス感染などして悪意のあるコードが埋め込まれる場合もあることを考えておく必要があります。
下記のようにCSPヘッダを使用することで javascriptは自サーバーの js とGoogle Tag Managerしか読み込ませないように制限することができます。
| Content-Security-Policy: script-src ‘self’ http://www.googletagmanager.com |
※Google Tag Managerのjsに悪意のあるコードが埋め込まれていた場合はOUTですが。。 ^^;
この状態で<script>タグで外部jsを読み込もうとすると、下記のようにDeveloper Toolでエラーが検出され読み込みに失敗します。
| Refused to load the script ‘https://code.foo-cdn.com/bar.js’; because it violates the following Content Security Policy directive: “script-src ‘self’ http://www.googletagmanager.com”. Note that ‘script-src-elem’ was not explicitly set, so ‘script-src’ is used as a fallback. |
また、これはjsに限らずiframe、画像、CSSなども制限可能で、それぞれframe-ancestors, img-src, style-srcで制限ができます。(これはCSPヘッダの設定項目のほんの一例)
AWSでのCSPヘッダーの設定方法
CSPヘッダをブラウザに返却するには、アプリケーション側(PHP, Java, etc.)で設定する方法とAWSを利用している場合はCloudFrontの下記の箇所で設定することができます。
CloudFront > ビヘイビア > レスポンスヘッダーポリシー

このレスポンスヘッダーポリシーを新規作成し「CloudFront > ビヘイビア」へ適用し「オリジンのオーバーライド」オプションを有効にすることでアプリケーション側でCSPを返却していたとしても上書きする事ができます。
他にも「レスポンスヘッダーポリシー」では様々なセキュリティに関わるレスポンスヘッダが設定可能となっております。CloudFrontを利用するとレスポンスキャッシュの設定はもちろんセキュリティヘッダの設定など、ALBだけを利用する場合と比べて自由度を上げることができます。
以下設定例を添付しておきます。







