タダです.
CloudFront でホスティングしているサイトのレスポンスにセキュリティヘッダーをつける対応を行ったので,その備忘録を残しておきます.
CloudFront のセキュリティヘッダーとは
CloudFront では以下のようなセキュリティヘッダーを加えてレスポンスができる機能です.この機能が登場以前は Lambda@Edge などでレスポンスヘッダーを追加して上げる必要があったと思いますが,CloudFront の機能だけでレスポンスヘッダーへの追加が完結するのはいいことですね.
- HTTP Strict Transport Security (HSTS)
- X-XSS-Protection
- X-Content-Type-Options
- X-Frame-Options
- Referrer-Policy
- Content-Security-Policy
セキュリティヘッダーを追加してみる
それでは CloudFront - S3 でコンテンツを返す設定をしているディストリビューションにセキュリティヘッダーを追加してみます.この記事では HSTS のみを有効化し,前後のレスポンスヘッダーの状態を確認してみます.まずは設定変更前が以下のような状態で当然ですが,セキュリティヘッダーが返ってきません.
セキュリティヘッダー追加前
$ curl -I https://www.hoge.com HTTP/2 200 content-type: text/html content-length: 8 date: Sat, 03 Dec 2022 07:43:12 GMT last-modified: Sat, 03 Dec 2022 07:33:59 GMT etag: "1313058fad6daf581fdcfea2e76ac3b1" accept-ranges: bytes server: AmazonS3 x-cache: Miss from cloudfront via: 1.1 964dcea2ce9513bdb853e662b2030b0a.cloudfront.net (CloudFront) x-amz-cf-pop: NRT51-P2 x-amz-cf-id: LBSFP4KsgFReRH730JOKqCvdF00yFzs8Oc6cN9Z6NOwvAriMYI8bDQ==
セキュリティヘッダーのポリシー作成と適用
セキュリティヘッダーを追加してみます.CloudFront > ポリシー > レスポンスヘッダー
の順に遷移してレスポンスヘッダーポリシーを作成から作っていきます.ご覧のようにバーを有効化してセキュリティヘッダーの最大経過時間を指定し保存すれば,ポリシー作成は完了です.
次にポリシーをディストリビューションに適用していきます.この後,再度サイトにアクセスすると,strict-transport-security
という HSTS のヘッダーが返ってきました.
$ curl -I https://www.hoge.com HTTP/2 200 content-type: text/html content-length: 8 date: Sat, 03 Dec 2022 07:53:18 GMT last-modified: Sat, 03 Dec 2022 07:33:59 GMT etag: "1313058fad6daf581fdcfea2e76ac3b1" accept-ranges: bytes server: AmazonS3 x-cache: Miss from cloudfront via: 1.1 d063c80c78a8368d53c4a98089af352a.cloudfront.net (CloudFront) x-amz-cf-pop: KIX56-C2 x-amz-cf-id: nF3_Nk4D25L5-t2FzjWLKnqFirsq6419T_DekwhFbp7ucpmY2maqJw== strict-transport-security: max-age=600
まとめ
CloudFront のセキュリティヘッダー機能を使ったのでまとめました.有効化が非常に簡単で,使う機会があればサクッと試せる機能だと思いました.