API Gateway CloudWatch 로그 전달 설정 점검

API Gateway 로그의 종류에 맞게 CloudWatch 전달 설정과 보존 기간을 확인하세요.

설명

REST API의 실행 로그를 활성화하면 API Gateway는 API-Gateway-Execution-Logs_{rest-api-id}/{stage_name} 형식의 로그 그룹을 사용합니다. 이 그룹을 Terraform으로 관리하려면 API ID와 Stage 이름을 맞춰야 합니다. 접근 로그는 별도 설정이며 access_log_settings.destination_arn으로 지정한 로그 그룹을 사용합니다.

API Gateway는 외부 요청이 가장 먼저 기록되는 지점 중 하나입니다. CloudWatch 로깅이 제대로 연결되지 않으면 요청 흐름을 추적하기 어렵고, 장애나 공격 징후를 놓치기 쉽습니다.

잠재적 영향

  • 요청 추적 실패: 어떤 호출이 언제 들어왔는지 확인하기 어려워집니다.
  • 사고 분석 지연: 이상 요청이나 오류 패턴을 빠르게 파악하기 어렵습니다.
  • 운영 가시성 저하: API 사용량과 실패 원인을 체계적으로 분석하기 힘들어집니다.

해결 방법

  • 필요한 실행 로그를 활성화하고 CloudWatch 전달 권한을 구성하세요. 이미 존재하는 실행 로그 그룹을 Terraform으로 관리한다면 가져오기 절차를 사용하세요.
  • 실행 로그 그룹 이름을 실제 API와 Stage에 맞추세요. 접근 로그는 유효한 destination_arn과 포맷을 별도로 설정하며 실행 로그의 이름 형식을 요구하지 않습니다.
  • 보존 기간과 읽기 권한을 제한하고 실제 요청의 로그가 도착하는지 확인하세요.

예시

실행 로그 그룹 이름을 비교하는 설정 발췌입니다. API·Stage의 나머지 필수 설정, 실행 로깅 활성화와 전달 권한은 생략했으며, 그룹을 만들거나 이름을 맞추는 것만으로 로깅이 켜지지는 않습니다.

변경 전

hcl
variable "stage_name" {
  default = "example"
  type    = string
}

variable "stage_names" {
  default = "examples"
  type    = string
}

resource "aws_api_gateway_rest_api" "example" {
  # ... 나머지 설정 생략 ...
}

resource "aws_api_gateway_stage" "example" {
  depends_on = [aws_cloudwatch_log_group.example]

  stage_name = var.stage_name
  # ... 나머지 설정 생략 ...
}

resource "aws_cloudwatch_log_group" "example" {
  name              = "API-Gateway-Execution-Logs_${aws_api_gateway_rest_api.example.id}/${var.stage_names}"
  retention_in_days = 7
}

변경 후

hcl
variable "stage_name" {
  default = "example"
  type    = string
}

resource "aws_api_gateway_rest_api" "example" {
  # ... 나머지 설정 생략 ...
}

resource "aws_api_gateway_stage" "example" {
  depends_on = [aws_cloudwatch_log_group.example]

  stage_name = var.stage_name
  # ... 나머지 설정 생략 ...
}

resource "aws_cloudwatch_log_group" "example" {
  name              = "API-Gateway-Execution-Logs_${aws_api_gateway_rest_api.example.id}/${var.stage_name}"
  retention_in_days = 7
}

설명:

  • 변경 전: Stage 이름과 로그 그룹 이름이 맞지 않아 실행 로그를 기대한 위치에서 수집하기 어렵습니다.
  • 변경 후: Stage와 같은 변수로 실행 로그 그룹의 이름을 지정합니다. 별도 로깅 활성화와 전달 권한도 필요합니다.

참조