S3オリジンからのAmazon CloudFront上のHSTS


11

S3オリジンからAmazon CloudFrontディストリビューションにHSTSヘッダーを設定することは可能ですか?

回答:



10

これに関する更新...

Lambda @ edge関数を介してHTTP応答ヘッダーをカスタマイズできるようになりました。ドキュメントについては、http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.htmlを参照してください。これを試すには、AWSコンソールで新しいラムダ関数を作成します。言語として「Edge Nodge.js 4.3」を選択し、cloudfront-modify-response-headerテンプレートを探します。これを行うと、Lambdaは関数を適用するCloudFrontディストリビューションとイベントを尋ねます。Cloudfrontの動作タブに移動することで、いつでもこれを編集または変更できることに注意してください。

ここにラムダ関数の例があります...

'use strict';
exports.handler = (event, context, callback) => {

    const response = event.Records[0].cf.response;
    response.headers['Strict-Transport-Security'] = 'max-age=2592000; includeSubDomains';

    callback(null, response);
};

1
すばらしい、試してみよう!
chrisvdb 2017

同じ記事を偶然見つけました...うまくいきましたか?@chrisvdb
Steverino

@Steverino実際にやってみたわけではありませんが、2番目の静的なWebサイトをセットアップしているだけなので、その恩恵を受けることができるので、このインスタンスで試してみるかもしれません。その場合は後で報告します。そうしてください。パフォーマンスへの影響を理解することも興味深いでしょう。
chrisvdb

1
更新-Lambda @ Edgeの現在のプレビューバージョンの100 TPS制限は、当社の(シンプルでトラフィックの少ない)Webサイトに確実にサービスを提供するには不十分であることがわかりました。一部のアセットは、ランダムに50x応答コードを生成します。
chrisvdb 2017年

1
response.headersのフォーマットが変更されました。上記はもう機能しません。
ハミッシュモファット2017

4

アンドリューの答えに追加するには:

私はこれといくつかのメモを試しました:特定のエッジnodejsランタイムはなくなりましたが、ラムダはバージニア北部リージョンで作成され、cloudfront origin-responseまたはviewer-responseによってトリガーされる必要があります。

箱から出したコードはもう機能していないようです。ERR_CONTENT_DECODING_FAILEDになります。

解決策は、json構文を次のように使用することです。

response.headers['Strict-Transport-Security'] = [ { key: 'Strict-Transport-Security', value: "max-age=31536000; includeSubdomains; preload" } ];
response.headers['X-Content-Type-Options']    = [ { key: 'X-Content-Type-Options', value: "nosniff" } ];

ヘッダーの詳細はこちら:infosec.mozilla.org/guidelines/web_security
Josh Habdas

1

正解です。Lambda@ Edgeは一般に利用可能であるため、バージニア北部に限定されており、ノード4.3ではなくノード6.10を選択する必要があります。

以下のコードの関連部分(この目的のため、これは常に302パーマネントリダイレクトになります):

'use strict';
exports.handler = (event, context, callback) => {

  var request = event.Records[0].cf.request;
  const response = {
    status: '302',
    statusDescription: '302 Found',
    httpVersion: request.httpVersion,
    headers: {
      Location: [
        {
            "key":"Location",
            "value":"someURL"
        }
      ],
      'Strict-Transport-Security': [
        {
          "key":"Strict-Transport-Security",
          "value":'max-age=63072000; includeSubDomains; preload'
        }
      ],
    },
  };
  callback(null, response);
};

CloudFrontで異なる動作を構成することにより、どのリクエストがLambda関数を呼び出すかを制限できます。


これは、Adam Maschekの投稿への応答を意味していた...
chrisvdb '18
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.