เป็นไปได้ไหมที่จะตั้งค่าส่วนหัว HSTS บนการกระจาย Amazon CloudFront จากจุดเริ่มต้น S3
เป็นไปได้ไหมที่จะตั้งค่าส่วนหัว HSTS บนการกระจาย Amazon CloudFront จากจุดเริ่มต้น S3
คำตอบ:
ไม่สามารถทำได้ในปัจจุบันโปรดดูhttps://forums.aws.amazon.com/thread.jspa?threadID=162252สำหรับการสนทนาเกี่ยวกับเรื่องนี้
แก้ไข: Lambda @ Edge ทำให้เป็นไปได้ดูด้านล่าง
อัปเดตเกี่ยวกับสิ่งนี้ ...
ตอนนี้ส่วนหัวการตอบสนอง HTTP สามารถปรับแต่งได้ผ่านฟังก์ชั่น Lambda @ edge โปรดดูhttp://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.htmlสำหรับเอกสาร ในการลองนี้ให้สร้างฟังก์ชั่นแลมบ์ดาใหม่ในคอนโซล AWS เลือก 'Edge Nodge.js 4.3' สำหรับภาษาและมองหาเทมเพลต cloudfront-modified-response-header หากคุณทำสิ่งนี้แลมบ์ดาจะถามคุณว่าการจัดจำหน่ายและกิจกรรมของ 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);
};
วิธีเพิ่มคำตอบของ Andrew:
ฉันได้พยายามเพียงแค่นี้และคู่ของบันทึก: มีรันไทม์ไม่มีอีกต่อไปโดยเฉพาะขอบ nodejs แต่ความต้องการแลมบ์ดาที่จะสร้างขึ้นในภูมิภาค N เวอร์จิเนียและเรียกโดย CloudFront กำเนิดการตอบสนองหรือโปรแกรมดูการตอบสนอง
รหัสออกจากกล่องดูเหมือนจะไม่ทำงานอีกต่อไป มันให้ 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" } ];
ถูกต้องเนื่องจากแลมบ์ดาเอดจ์มีให้ใช้โดยทั่วไปพวกเขา จำกัด ไว้ที่ N Virginia และต้องเลือก Node 6.10 แทนที่จะเป็น Node 4.3
ส่วนที่เกี่ยวข้องของรหัสของเราด้านล่าง (เพื่อจุดประสงค์ของเรานี่จะเป็นการเปลี่ยนเส้นทางถาวร 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