로깅을 활성화하여 CloudWatch Logs에 로그를 기록할 수 있습니다. 로깅 변수를 사용하여 로그의 내용을 사용자 지정할 수 있습니다.
보안 태세를 개선하려면 HTTP API의 모든 단계에 대해 CloudWatch Logs에 로그를 작성하는 것이 좋습니다. 다양한 규정 준수 프레임워크를 준수하기 위해 이 작업을 수행해야 할 수 있습니다. 자세한 내용은 AWS Security Hub 사용 설명서에서 Amazon API Gateway 제어를 참조하세요.
HTTP API에 대한 로깅을 활성화하려면 다음을 수행해야 합니다.
사용자가 로깅을 활성화하는 데 필요한 권한을 가지고 있는지 확인합니다.
CloudWatch Logs 로그 그룹을 생성합니다.
API 단계에 대한 CloudWatch Logs 로그 그룹의 ARN을 제공합니다.
로깅을 활성화하는 권한
API에 대한 로깅을 활성화하려면 사용자는 다음과 같은 권한을 가지고 있어야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:
us-east-2
:123456789012
:log-group:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:CreateLogGroup", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries" ], "Resource": "*" } ] }
로그 그룹 생성 및 HTTP API에 대한 로깅 활성화
AWS Management Console 또는 AWS CLI를 사용하여 로그 그룹을 생성하고 액세스 로깅을 활성화할 수 있습니다.
-
로그 그룹 생성
콘솔을 사용하여 로그 그룹을 생성하는 방법을 알아보려면 Amazon CloudWatch Logs 사용 설명서의 로그 그룹 생성을 참조하세요.
https://console.aws.amazon.com/apigateway
에서 API Gateway 콘솔에 로그인합니다. -
HTTP API를 선택합니다.
-
기본 탐색 패널의 Monitor(모니터링) 탭에서 Logging(로깅) 선택합니다.
-
로깅을 활성화할 단계를 선택하고 Select(선택)를 선택합니다.
-
Edit(편집)을 선택하여 액세스 로깅을 활성화합니다.
-
Access logging(액세스 로깅)을 활성화하고 CloudWatch Logs를 입력한 다음 로그 형식을 선택합니다.
-
Save(저장)를 선택합니다.
로그 형식 예
일반적으로 사용되는 몇 가지 액세스 로그 형식의 예제가 API Gateway 콘솔에 표시되며 다음과 같이 나열됩니다.
-
CLF
(Common Log Format): $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
-
JSON
:{ "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
-
XML
:<request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
-
CSV
(쉼표로 분리된 값):$context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId