AWS CloudFrontでのCSPヘッダーの設定について

環境・プラットフォーム

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 > ビヘイビア > レスポンスヘッダーポリシー

CSP header policyの編集箇所

このレスポンスヘッダーポリシーを新規作成し「CloudFront > ビヘイビア」へ適用し「オリジンのオーバーライド」オプションを有効にすることでアプリケーション側でCSPを返却していたとしても上書きする事ができます。

他にも「レスポンスヘッダーポリシー」では様々なセキュリティに関わるレスポンスヘッダが設定可能となっております。CloudFrontを利用するとレスポンスキャッシュの設定はもちろんセキュリティヘッダの設定など、ALBだけを利用する場合と比べて自由度を上げることができます。

以下設定例を添付しておきます。



オフショア開発ならCRAID!

オフショア開発とは、システム開発業務などを海外の開発会社や海外子会社に委託することです。

CRAIDは東証プライム上場のフリービット株式会社の子会社です。CRAIDのオフショア開発拠点「フルスピードテクノロジーズ」は、当初は月間3000億ものリクエスト処理にも対応できる自社システム開発を行うためのオフショア開発部門として始まりました。各グループ会社の開発やクライアント様の受託開発やラボ型開発も多く手掛けております。

CRAIDやオフショア開発に関して、お気軽にお問い合わせください。

この記事を書いた人

社内経歴としては、社内システムの開発・保守から始まり、セブ開発拠点の立ち上げメンバーとしてフィリピン駐在、その後日本に帰国し受託開発やオフショア開発事業に参画し、様々な開発プロジェクトに参加しております。

taroshinをフォローする
環境・プラットフォーム
CRAID オフショア開発ブログ
タイトルとURLをコピーしました