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

나는 같은 기사를 우연히 발견했다. @ chrisvdb
Steverino

@Steverino 실제로 시도해 보지는 않았지만 이점을 얻을 수있는 두 번째 정적 웹 사이트를 설정하고 있으므로이 인스턴스에서 시도해 볼 수 있습니다. 이 경우 다시 알려 드리겠습니다. 성능 영향도 이해하는 것이 흥미로울 것입니다.
chrisvdb

1
업데이트-Lambda @ Edge의 현재 미리보기 버전에서 100 TPS 제한이 단순하고 트래픽이 적은 웹 사이트를 안정적으로 제공하기에 충분하지 않습니다. 일부 자산은 임의로 50x 응답 코드를 생성합니다.
chrisvdb

1
response.headers의 형식이 변경되었습니다. 위의 내용은 더 이상 작동하지 않습니다.
Hamish Moffatt

4

Andrew의 답변에 추가하려면 다음을 수행하십시오.

방금 이것과 몇 가지 메모를 시도했습니다. 더 이상 특정 edge nodejs 런타임이 없지만 람다는 N Virginia 지역에서 생성되어 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
조쉬 Habdas

1

Lambda @ Edge는 일반적으로 사용 가능하기 때문에 N Virginia로 제한했으며 Node 4.3 대신 Node 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.