내용으로 건너뛰기

Lambda 프록시 또는 비프록시 통합을 위해 API Gateway를 통해 사용자 지정 보안 헤더를 전송하려면 어떻게 해야 합니까?

3분 분량
0

AWS Lambda 프록시 또는 비프록시 통합을 위해 Amazon API Gateway를 통해 사용자 지정 보안 헤더를 전송하려고 합니다.

해결 방법

API Gateway 응답에 사용자 지정 보안 헤더를 추가하려면 통합 유형에 해당하는 메서드를 따르십시오.

참고: 다음 해결 방법은 API Gateway REST API에만 적용됩니다. HTTP API는 메서드 응답 또는 통합 응답 매핑을 지원하지 않습니다.

Lambda 프록시 통합

Lambda 프록시 통합의 경우 API Gateway가 클라이언트와 통합된 Lambda 함수 간에 요청 및 응답을 수정 없이 전송합니다. API Gateway API에서 Lambda 함수로 사용자 지정 보안 헤더를 전송하려면 함수 소스 코드를 수정해야 합니다.

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.

  2. 탐색 창에서 API를 선택한 다음 REST API를 선택합니다.

  3. 메서드 만들기를 선택합니다.

  4. 메서드 만들기 창에서 다음 작업을 수행합니다.
    메서드 유형에서 메서드 유형을 선택합니다.
    통합 유형에서 Lambda 함수를 선택합니다.
    Lambda 프록시 통합을 활성화했는지 확인합니다.
    Lambda 함수에서 Lambda 함수를 선택합니다.
    메서드 만들기를 선택합니다.

  5. 통합 요청 창에서 Lambda 함수를 선택합니다.

  6. 코드 소스에서 함수의 코드를 Code Editor의 다음 Python 코드 또는 Node.js 코드로 바꿉니다.
    Python 3.14 이후 버전:

    def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'headers': {
            "Strict-Transport-Security": "max-age=100000",
            "X-Frame-Options": "DENY",
            "X-Content-Type-Options": "nosniff",
            "Content-Security-Policy": "default-src 'self'"
         },
        'body': json.dumps("Hello from Lambda with security headers!")
    }

    Node.js 14 이후 버전:

    exports.handler = async (event) => {
        const response = {
            statusCode: 200,
            headers: {
                'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
                'Content-Security-Policy': "default-src 'self'",
                'X-Frame-Options': 'DENY',
                'X-Content-Type-Options': 'nosniff'
            },
            body: JSON.stringify('Hello from Lambda with security headers!')
        };
        return response;
    };
  7. 배포를 선택합니다.

비프록시 통합

AWS 서비스 및 HTTP 통합 유형과 같은 비프록시, 즉 사용자 지정 통합을 통해 사용자 지정 보안 헤더를 보내려면 매핑 템플릿 또는 메서드 응답을 만듭니다.

매핑 템플릿 만들기

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.

  2. 탐색 창에서 API를 선택한 다음 REST API를 선택합니다.

  3. 메서드 만들기 창에서 메서드 유형 및 통합 유형을 입력하고 메서드 만들기를 선택합니다.

  4. 통합 요청 창에서 편집을 선택합니다.

  5. 매핑 템플릿을 확장한 다음, 매핑 템플릿 추가를 선택합니다.

  6. 콘텐츠 유형에 콘텐츠 유형을 입력합니다. 예를 들어 application/json을 입력합니다.

  7. 템플릿 본문 편집기에서 다음 매핑 템플릿을 입력하니다.

    #set($headersToReturn = {  
      "Strict-Transport-Security": "max-age=31536000; includeSubDomains"  
    })#foreach($header in $headersToReturn.keySet())  #set($context.responseOverride.header[$header] = $headersToReturn[$header])#end
  8. 저장을 선택합니다.

  9. API 배포를 선택합니다.

메서드 응답 만들기

다음 단계를 완료하십시오.

  1. API Gateway 콘솔을 엽니다.
  2. 탐색 창에서 APIs를 선택한 다음 REST API를 선택합니다.
  3. 메서드 응답 창에서 편집을 선택합니다.
  4. 헤더 이름에서 헤더 추가를 선택합니다.
  5. 반환하려는 사용자 지정 헤더의 이름(예: Strict-Transport-Security)을 입력합니다.
  6. 헤더 추가를 선택하여 반환하려는 헤더를 하나 더 추가합니다(예: Content-Security-Policy).
  7. 저장을 선택합니다.
  8. 통합 요청 창에서 편집을 선택합니다.
  9. 헤더 매핑에서 헤더의 매핑 값(예: max-age=100000 및 self)을 입력합니다.
  10. 저장을 선택하고 API 배포를 선택합니다.

설정 테스트

보안 사용자 지정 헤더가 응답에 포함되었는지 확인하려면 다음 curl 명령을 실행하여 REST API를 호출합니다.

curl -v https://your-api-id.execute-api.your-region.amazonaws.com/your-stage-name

참고: your-api-id를 REST API로, your-region을 AWS 리전으로, your-stage-name을 스테이지 이름으로 바꾸십시오.

관련 정보

Lambda 사용자 지정(비프록시) 통합으로 API Gateway를 통해 Lambda 함수에 사용자 지정 헤더를 전달하려면 어떻게 해야 합니까?

API Gateway의 REST API 매핑 템플릿 변환

Lambda 프록시 통합을 사용하는 API Gateway REST API에서 발생하는 HTTP 502 오류를 어떻게 해결합니까?

자습서: Lambda 비프록시 통합을 사용하여 REST API 생성