API Gateway 배포 Stage의 접근 로그 설정 점검

AWS API Gateway Deployment가 Stage와 연결되어 있다면 접근 로그 설정도 함께 구성해야 합니다.

설명

aws_api_gateway_deployment는 REST API 구성의 스냅샷이며, 실제 요청의 접근 로그는 배포를 참조하는 aws_api_gateway_stage에서 설정합니다. 배포 설명을 작성하는 것만으로 접근 로그가 활성화되지는 않습니다.

Deployment만 있고 로그 설정이 빠지면 API를 배포해도 요청 기록이 남지 않을 수 있습니다. 이 상태에서는 운영 중 발생한 호출 문제를 배포 시점과 함께 추적하기 어렵습니다.

잠재적 영향

  • 요청 기록 부족: 실제 배포된 API 호출 내역을 확인하기 어렵습니다.
  • 변경 추적 어려움: 어떤 배포와 어떤 Stage 설정이 연결됐는지 파악이 늦어질 수 있습니다.
  • 사고 분석 지연: 장애나 오남용 발생 시 원인 분석 시간이 길어집니다.

해결 방법

  • aws_api_gateway_stage에 access_log_settings를 설정해 배포된 Stage의 요청 로그를 남기십시오.
  • Stage의 배포 참조와 로그 대상·포맷을 확인하고, 로그 전달 권한과 보존 기간을 구성하세요.
  • API 배포 템플릿에 로그 설정을 기본 포함해 누락이 생기지 않도록 하세요.

예시

현재 제공자에서 별도 Stage를 사용하는 구성 발췌입니다. REST API와 메서드·통합, 배포 의존성, 로그 그룹 및 전달 권한은 생략했습니다.

변경 전

hcl
resource "aws_api_gateway_deployment" "example" {
  rest_api_id = aws_api_gateway_rest_api.example.id
}

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

변경 후

hcl
resource "aws_api_gateway_deployment" "example" {
  rest_api_id = aws_api_gateway_rest_api.example.id
}

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

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

설명:

  • 변경 전: Deployment와 Stage는 연결되어 있지만 이 Stage의 접근 로그 전달 설정은 없습니다. 다른 로그 수집 여부도 확인하세요.
  • 변경 후: Stage의 접근 로그를 설정합니다. 배포 후 실제 요청 기록이 로그 그룹에 전달되는지 확인해야 합니다.

참조