Amazon CloudFront'ta S3 kaynaklı HSTS


Yanıtlar:



10

Bu konuda bir güncelleme ...

HTTP yanıt başlıkları artık Lambda @ edge işlevleri ile özelleştirilebilir. Belgeler için lütfen http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html adresine bakın . Bunu denemek için AWS konsolunda yeni bir lambda işlevi oluşturun. Dil için 'Edge Nodge.js 4.3'ü seçin ve cloudfront-change-response-header şablonunu arayın. Bunu yaparsanız, Lambda işlevi hangi CloudFront dağıtımının ve etkinliğinin uygulanacağını soracaktır. Cloudfront davranış sekmesine giderek bunu istediğiniz zaman düzenleyebileceğinizi veya değiştirebileceğinizi unutmayın.

İşte bir lambda işlevi örneği ...

'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
Harika, deneyeceğim!
17'de chrisvdb

Aynı makaleye rastladım ... senin için çalıştı mı? @chrisvdb
Steverino

@Steverino Aslında denemeye gelmedik, ancak sadece bundan yararlanabilecek ikinci bir statik web sitesi oluştururken, bu örnekte deneyebiliriz. Bu durumda rapor vereceğim, lütfen bunu da yapın. Performans etkisini de anlamak ilginç olurdu.
chrisvdb

1
Güncelleme - Lambda @ Edge'in mevcut önizleme sürümündeki 100 TPS sınırının (basit ve düşük trafikli) web sitemize güvenilir bir şekilde hizmet etmek için yeterli olmadığı ortaya çıkıyor. Bazı varlıklar rastgele 50x yanıt kodu verir.
chrisvdb

1
Response.headers biçimi değişti. Yukarıdakiler artık çalışmıyor.
Hamish Moffatt

4

Andrew'un cevabına eklemek için:

Bunu ve birkaç notu denedim: Artık belirli kenar nodejs çalışma zamanı yok, ancak lambda'nın N Virginia bölgesinde oluşturulması ve bulut kökenine yanıt veya görüntüleyici yanıtı tarafından tetiklenmesi gerekiyor .

Kutunun dışında kod artık çalışmıyor gibi görünüyor. ERR_CONTENT_DECODING_FAILED verir.

Çözüm json sözdizimini aşağıdaki gibi kullanmaktır:

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" } ];

Başlıklar hakkında daha fazla bilgi için: infosec.mozilla.org/guidelines/web_security
Josh Habdas

1

Doğru, Lambda @ Edge genel olarak mevcut olduğundan, onu N Virginia ile sınırladılar ve Düğüm 4.3 yerine Düğüm 6.10'u seçmek zorundalar.

Aşağıdaki kodumuzun ilgili kısmı (amacımız için bu her zaman 302 kalıcı bir yönlendirme olacaktır):

'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 üzerinde farklı davranışlar yapılandırarak, hangi isteklerin Lambda işlevini çağıracağını sınırlayabilirsiniz.


Bu Adam Maschek'in gönderisine yanıt olarak ifade edildi ...
chrisvdb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.