API Gateway Stage 로깅 설정 점검

API Gateway Stage의 접근 로그와 필요한 실행 로그를 구분해 구성하세요.

설명

API Gateway의 접근 로그는 요청 식별자와 응답 상태 등을 기록하며, 실행 로그는 API 처리 과정의 오류 분석에 도움이 됩니다. 두 설정은 별개이며 필요한 로그가 없으면 요청과 장애를 추적하기 어렵습니다.

API Gateway는 외부 요청이 처음 들어오는 지점이라서 요청 추적과 이상 징후 확인이 중요합니다. 접근 로그가 없으면 장애 원인 분석, 오남용 탐지, 보안 사고 조사에 필요한 근거가 부족해집니다.

잠재적 영향

  • 추적성 부족: 누가 어떤 요청을 보냈는지 확인하기 어려워집니다.
  • 사고 대응 지연: 비정상 호출이나 공격 시도를 빠르게 파악하기 어렵습니다.
  • 운영 가시성 저하: 오류 패턴과 사용량 변화를 분석하기 힘들어집니다.

해결 방법

  • API Gateway Stage에 access_log_settings를 설정해 접근 로그를 수집하세요.
  • 실행 로그가 필요하면 REST API의 aws_api_gateway_method_settings.settings.logging_level 또는 WebSocket API의 default_route_settings.logging_level을 설정하세요. HTTP API에는 이 실행 로그 설정을 적용하지 않습니다.
  • 로그 대상, 포맷, 전달 권한과 보존 기간을 구성하고 실제 수집을 확인하세요. 민감한 요청 데이터의 기록은 제한하세요.

예시

REST API Stage와 메서드 설정의 발췌입니다. 참조한 API, 배포, 로그 그룹과 CloudWatch 로그 전달 권한은 별도로 구성해야 합니다.

변경 전

hcl
resource "aws_api_gateway_stage" "example" {
  stage_name    = "dev"
  rest_api_id   = aws_api_gateway_rest_api.example.id
  deployment_id = aws_api_gateway_deployment.example.id
}

resource "aws_api_gateway_method_settings" "example" {
  rest_api_id = aws_api_gateway_rest_api.example.id
  stage_name  = aws_api_gateway_stage.example.stage_name
  method_path = "*/*"

  settings {
    logging_level = "ERROR"
  }
}

변경 후

hcl
resource "aws_api_gateway_stage" "example" {
  stage_name    = "dev"
  rest_api_id   = aws_api_gateway_rest_api.example.id
  deployment_id = aws_api_gateway_deployment.example.id

  access_log_settings {
    destination_arn = aws_cloudwatch_log_group.example.arn
    format = jsonencode({ requestId = "$context.requestId", status = "$context.status" })
  }
}

resource "aws_api_gateway_method_settings" "example" {
  rest_api_id = aws_api_gateway_rest_api.example.id
  stage_name  = aws_api_gateway_stage.example.stage_name
  method_path = "*/*"

  settings {
    metrics_enabled = true
    logging_level   = "ERROR"
  }
}

설명:

  • 변경 전: 실행 로그 수준은 설정했지만 이 Stage에 접근 로그 전달 설정은 없습니다.
  • 변경 후: 접근 로그에 요청 식별자와 상태를 기록하고 실행 오류 로그도 설정합니다. 실제 로그 전달을 확인해야 합니다.

참조