API Gateway REST API에 대해 누락된 CloudWatch 로그 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 8월 30일

Amazon API Gateway에 대한 Amazon CloudWatch 로깅을 활성화했지만 로그를 찾을 수 없습니다. API Gateway REST API 문제 해결을 위한 CloudWatch 로그를 가져오려면 어떻게 해야 합니까?

간략한 설명

CloudWatch 로깅을 사용하여 요청 실행 또는 API에 대한 클라이언트 액세스와 관련된 문제를 디버깅할 수 있습니다. CloudWatch 로깅에는 실행 로깅 및 액세스 로깅이 포함됩니다.

실행 로깅의 경우 API Gateway는 로그 그룹 및 로그 스트림 생성을 포함하여 CloudWatch 로그를 관리합니다. 액세스 로깅의 경우 고유한 로그 그룹을 만들거나 기존 로그 그룹을 선택할 수 있습니다.

API Gateway에서 거부한 모든 클라이언트 측 오류가 실행 로그에 기록되는 것은 아닙니다. 예를 들어 REST API의 잘못된 리소스 경로에 대한 API 요청을 하는 클라이언트는 403 "Missing Authentication Token" 응답을 반환합니다. 이 유형의 응답은 실행 로그에 기록되지 않습니다. CloudWatch 액세스 로깅을 사용하여 클라이언트 측 오류를 해결합니다.

자세한 내용은 API Gateway에 대한 CloudWatch 로그 형식을 참조하세요.

API Gateway는 다음에 대한 로그를 생성할 수 없습니다.

  • 413 Request Entity Too Large errors.
  • 과도한 429 Too Many Requests errors.
  • API 매핑이 없는 사용자 지정 도메인으로 전송된 요청에서 400 시리즈 오류.
  • 내부 오류로 인한 500 시리즈 오류.

자세한 내용은 REST API 모니터링을 참조하세요.

해결 방법

CloudWatch 로깅에 대한 API Gateway 권한 확인

CloudWatch Logs를 활성화하려면 계정에 대한 CloudWatch에 로그를 읽고 쓸 수 있는 API Gateway 권한을 부여해야 합니다. AmazonAPIGatewayPushToCloudWatchLogs 관리형 정책에는 필요한 권한이 있습니다.

apigateway.amazonaws.com을 신뢰할 수 있는 엔터티로 사용하여 AWS Identity and Access Management(IAM) 역할 생성을 합니다. 그리고 나서 다음 정책을 IAM 역할에 연결하고 AWS 계정의 cloudWatchRoleArn 속성에서 IAM 역할 ARN을 설정합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams",
        "logs:PutLogEvents",
        "logs:GetLogEvents",
        "logs:FilterLogEvents"
      ],
      "Resource": "*"
    }
  ]
}

다음 사항을 확인하세요.

  • AWS Security Token Service(AWS STS)가 AWS 리전에 대해 활성화되어 있습니다. 자세한 내용은 AWS 리전에서 AWS STS 관리를 참조하세요.
  • IAM 역할은 CloudWatch 로그를 활성화하려는 모든 AWS 리전에 대해 활성화됩니다.

자세한 내용은 CloudWatch 로깅에 대한 권한을 참조하세요.

API Gateway 로깅 설정 확인

CloudWatch 실행 또는 액세스 로깅 설정이 API Gateway에 대해 활성화되어 있는지 확인합니다.

참고: 실행 로깅과 액세스 로깅은 서로 독립적으로 활성화할 수 있습니다.

1.    API Gateway 콘솔을 엽니다.

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

3.    API를 선택한 다음 단계(Stages)를 선택합니다.

4.    단계(Stages)에서 단계를 선택한 다음 로그/추적(Logs/Tracing) 탭을 선택합니다.

5.    CloudWatch 설정(CloudWatch Settings)에서 다음을 확인합니다.
       CloudWatch Logs 활성화(Enable CloudWatch logs)가 선택되어 있습니다.
       로그 수준(Log level)INFO로 설정되어 있습니다.
참고:
로그 수준을 ERROR로 설정하면 API Gateway의 오류 요청만 기록됩니다. 성공한 API 요청은 기록되지 않습니다.
       전체 요청/응답 데이터 로깅(Log full requests/responses data)자세한 CloudWatch 지표 활성화(Enable Detailed CloudWatch Metrics)가 추가 로그 데이터에 대해 선택되어 있습니다.
참고:
프로덕션 API에 대해 전체 요청/응답 데이터 로깅(Log full requests/responses data)을 활성화하지 않는 것이 좋습니다. 이로 인해 민감한 데이터가 로깅될 수 있습니다.

6.    사용자 지정 액세스 로깅(Custom Access Logging)에서 액세스 로깅 활성화(Enable Access Logging)가 선택되어 있는지 확인합니다.

로깅 방법을 확인하고 필요한 경우 재정의합니다.

기본적으로 모든 API 리소스는 해당 스테이지와 동일한 구성을 사용합니다. 단계에서 상속하지 않으려는 경우 각 메서드에 대해 서로 다른 구성을 갖도록 이 설정을 재정의할 수 있습니다.

1.    API Gateway 콘솔을 엽니다.

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

3.    API를 선택한 다음 단계(Stages)를 선택합니다.

4.    단계(Stages)에서 단계 이름을 확장한 다음 HTTP 메서드를 선택합니다. 예를 들어 GET을 선택합니다.

5.    설정(Settings)에서 이 방법에 대해 재정의(Override for this method)를 선택합니다.

6.    필요한 경우 CloudWatch 설정(CloudWatch settings)에서 사용 사례에 대한 로그를 추가로 변경한 다음 변경 사항 저장(Save Changes)을 선택합니다.

자세한 내용은 API Gateway에서 REST API에 대한 CloudWatch 로깅 설정을 참조하세요.