Apakah mungkin untuk menetapkan header HSTS pada distribusi Amazon CloudFront dari sumber S3?
sumber
Apakah mungkin untuk menetapkan header HSTS pada distribusi Amazon CloudFront dari sumber S3?
Saat ini tidak memungkinkan, lihat https://forums.aws.amazon.com/thread.jspa?threadID=162252 untuk diskusi tentang hal itu.
Sunting: Lambda @ Edge telah memungkinkan, lihat di bawah.
Pembaruan tentang ini ...
Header respons HTTP sekarang dapat dikustomisasi melalui fungsi Lambda @ edge. Silakan lihat http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html untuk dokumentasi. Untuk mencoba ini, buat fungsi lambda baru di konsol AWS. Pilih 'Edge Nodge.js 4.3' untuk bahasa ini dan cari templat header-ubah-respons-muka cloudfront. Jika Anda melakukan ini, Lambda akan menanyakan kepada Anda distribusi dan acara CloudFront mana untuk menerapkan fungsinya. Perhatikan bahwa Anda dapat mengedit atau mengubah ini kapan saja dengan masuk ke tab perilaku Cloudfront.
Berikut ini contoh fungsi lambda ...
'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);
};
Untuk menambah jawaban Andrew:
Saya baru saja mencoba ini dan beberapa catatan: Tidak ada lagi edge nodejs runtime yang spesifik, tetapi lambda perlu dibuat di wilayah N Virginia dan dipicu oleh respons asal-usul cloudfront atau respons penampil .
Kode di luar kotak sepertinya tidak berfungsi lagi. Itu memberi ERR_CONTENT_DECODING_FAILED.
Solusinya adalah menggunakan sintaks json sebagai berikut:
sumber
Benar, karena Lambda @ Edge tersedia secara umum, mereka membatasi untuk N Virginia dan kita harus memilih Node 6.10 daripada Node 4.3.
Bagian yang relevan dari kode kami di bawah ini (untuk tujuan kami ini akan selalu menjadi 302 redirect permanen):
Dengan mengkonfigurasi berbagai perilaku di CloudFront, Anda dapat membatasi permintaan mana yang akan memanggil fungsi Lambda.
sumber