AWSをうまく使って、HTTPヘッダに任意のHTTPヘッダを付与したい!
セキュリティにうるさい現場だと、HTTPヘッダにセキュリティ対策がされていないとごちゃごちゃ言われます。
ということで今回は、AWS Lambdaを利用したHTTPセキュリティヘッダ付与方法を解説します!
前提
- AWSアカウントを持っていること
- CloudFront×S3でアプリを配信していること
公式サイト
システム構成はこんな感じ
今回は、アプリをS3に格納し、アクセスはCloudFrontを経由する構成になります。
で、「S3⇒CloudFront」のレスポンス時にHTTPヘッダを付与します。
↓の⑥になります。
⑥の部分は「オリジンレスポンス」と呼ばれます。
AWS Lambdaを利用したHTTPセキュリティヘッダ付与方法
AWS Lambdaのソースコード
公式サイトにも記載されていますが、ソースコード自体は非常にシンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 |
'use strict'; exports.handler = (event, context, callback) => { // レスポンス取得 const response = event.Records[0].cf.response; const headers = response.headers; // HTTPセキュリティヘッダ取得 headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; // レスポンス返却 callback(null, response); }; |
今回は、クリックジャッキング対策で付与する「X-Frame-Options」のみ付与してみます。
AWS Lambdaの設定
では、AWS Lambdaの設定をしましょう。
AWS Lambdaを選択し、「関数」→「関数の作成」→「一から作成」を選択します。
関数名は何でもOKです。
ランタイムは「Node.js 6.10」、もしくは「Node.js 8.10」を選択してください。それ以外はどうやらダメなようです。
LambdaにCloudFrontを設定します。
トリガーの追加から「CloudFront」を選択するだけです。
Lambda@Edgeのデプロイをします。
デフォルトでOKですが、CloudFrontイベントは「オリジンレスポンス」を選択します。
画面上部の「アクション」→「新しいバージョンを発行」からバージョンを発行します。
先ほど作成したソースコードを設定します。
ソースコードはコピペでいいので貼り付けたら、画面右上の保存ボタンをクリックします。これで完了!
実際に画面を確認してみる
実際に画面を確認してみます。
開発者ツールで確認すると正しく設定されているのが分かります。
「curl -D – https://〇〇〇〇〇」
まとめ
もはや開発者もAWSやインフラに詳しくないと生きていけない時代になりました。
HTTPヘッダなんて今までゴリゴリコード書いてきましたが、それもインフラ周りで設定ができてしまうんですな。
AWSサービスで何がどこまでできるのかをしっかり理解しないといけないのは大変ですね。
ではまた!