API Gateway 메서드 인증 설정 점검

보호가 필요한 API Gateway 메서드에 호출자 인증과 필요한 권한 검사를 적용하세요.

설명

aws_api_gateway_method.authorization = "NONE"이면 API Gateway는 해당 메서드의 호출자를 인증하지 않습니다. 보호해야 할 기능에 다른 통제도 없다면 의도하지 않은 사용자가 데이터를 읽거나 작업을 수행할 수 있습니다.

공개 콘텐츠나 CORS 사전 요청에는 인증 없는 메서드가 적절할 수 있습니다. 리소스 정책과 백엔드 인증·인가도 접근에 영향을 주며, OPTIONS 응답만으로 다른 메서드가 보호되지는 않습니다.

잠재적 영향

  • 무단 호출 허용: 인증 없이 API 기능을 직접 사용할 수 있습니다.
  • 데이터 노출 가능: 읽기 API라면 내부 데이터가 외부에 노출될 수 있습니다.
  • 백엔드 오남용: 쓰기 API라면 비용 증가나 데이터 변조로 이어질 수 있습니다.

해결 방법

  • 메서드의 공개 필요성을 확인하고 보호 대상에는 IAM, Cognito 또는 Lambda Authorizer 등 적절한 인증을 적용하세요.
  • 인증된 호출자의 작업 권한도 제한하고 변경 사항을 실제 Stage에 배포하세요.
  • 공개 API가 필요한 경우에도 허용 대상, 호출 한도, 감사 로그를 함께 구성하세요.

예시

같은 GET 메서드의 인증 설정을 비교합니다. API, 리소스, 통합, Lambda Authorizer 및 호출 권한은 별도로 구성해야 합니다.

변경 전

hcl
resource "aws_api_gateway_method" "example" {
  rest_api_id   = aws_api_gateway_rest_api.this.id
  resource_id   = aws_api_gateway_resource.this.id
  http_method   = "GET"
  authorization = "NONE"

  request_parameters = {
    "method.request.path.proxy" = true
  }
}

변경 후

hcl
resource "aws_api_gateway_method" "example" {
  rest_api_id   = aws_api_gateway_rest_api.this.id
  resource_id   = aws_api_gateway_resource.this.id
  http_method   = "GET"
  authorization = "CUSTOM"
  authorizer_id = aws_api_gateway_authorizer.this.id

  request_parameters = {
    "method.request.path.proxy" = true
  }
}

설명:

  • 변경 전: GET은 API Gateway의 호출자 인증을 사용하지 않습니다. 리소스 정책과 백엔드 통제도 확인하세요.
  • 변경 후: 같은 GET에 CUSTOM 인증과 Authorizer를 연결합니다. 허용된 호출은 성공하고 미허용 호출은 거부되는지 확인하세요.

참조