HSTS บน Amazon CloudFront จากจุดเริ่มต้น S3


คำตอบ:



10

อัปเดตเกี่ยวกับสิ่งนี้ ...

ตอนนี้ส่วนหัวการตอบสนอง 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);
};

1
เยี่ยมมากจะลอง!
chrisvdb

ฉันเจอบทความเดียวกัน ... มันเหมาะกับคุณไหม? @chrisvdb
Steverino

@Steverino ยังไม่ได้ลอง แต่จริงๆแล้วเนื่องจากเราเพิ่งสร้างเว็บไซต์แบบคงที่ที่สองซึ่งสามารถได้รับประโยชน์จากมันเราอาจลองใช้มันในกรณีนี้ ฉันจะรายงานกลับในกรณีนั้นโปรดทำเช่นนั้น คงจะน่าสนใจที่จะเข้าใจถึงผลกระทบต่อประสิทธิภาพเช่นกัน
chrisvdb

1
อัปเดต - ปรากฎว่าขีด จำกัด 100 TPS ในรุ่นตัวอย่างปัจจุบันของ Lambda @ Edge นั้นไม่เพียงพอที่จะให้บริการเว็บไซต์ (ที่เรียบง่ายและมีอัตราการเข้าชมต่ำ) ได้อย่างน่าเชื่อถือ เนื้อหาบางรายการจะสุ่มรหัสการตอบกลับ 50x
chrisvdb

1
รูปแบบของ response.headers มีการเปลี่ยนแปลง ข้างต้นใช้งานไม่ได้อีกต่อไป
Hamish Moffatt

4

วิธีเพิ่มคำตอบของ 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" } ];

ข้อมูลเพิ่มเติมเกี่ยวกับส่วนหัวที่นี่: infosec.mozilla.org/guidelines/web_security
Josh Habdas

1

ถูกต้องเนื่องจากแลมบ์ดาเอดจ์มีให้ใช้โดยทั่วไปพวกเขา จำกัด ไว้ที่ 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


นี่คือความหมายเป็นคำตอบที่โพสต์อดัม Maschek ของ ...
chrisvdb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.