

# API Gateway에서 WebSocket API 로깅 구성
<a name="websocket-api-logging"></a>

로깅을 활성화하여 CloudWatch Logs에 로그를 기록할 수 있습니다. CloudWatch의 API 로깅에는 실행 로깅과 액세스 로깅이라는 두 가지 유형이 있습니다. 실행 로깅에서 API Gateway는 CloudWatch Logs를 관리합니다. 이 프로세스에는 로그 그룹 및 로그 스트림을 생성하는 작업과 호출자의 요청 및 응답을 로그 스트림에 보고하는 작업이 포함됩니다.

보안 태세를 개선하려면 `ERROR` 또는 `INFO` 수준에서 실행 로깅을 사용하는 것이 좋습니다. 다양한 규정 준수 프레임워크를 준수하기 위해 이 작업을 수행해야 할 수 있습니다. 자세한 내용은 *AWS Security Hub 사용 설명서*에서 [Amazon API Gateway 제어](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html)를 참조하세요.

액세스 로깅에서 API 개발자가 원하는 것은 누가 API에 액세스했고 호출자가 API에 어떻게 액세스했는지 로깅하는 것입니다. 자체 로그 그룹을 생성하거나 API Gateway에서 관리할 수 있는 기존 로그 그룹을 선택할 수 있습니다. 액세스 세부 정보를 지정하려면 `$context` 변수(선택한 형식으로 표현)를 선택하고 로그 그룹을 대상으로 선택합니다.

CloudWatch 로깅을 설정하는 자세한 방법은 [API Gateway 콘솔을 사용하여 CloudWatch API 로깅 설정](set-up-logging.md#set-up-access-logging-using-console) 단원을 참조하십시오.

**로그 형식**을 지정할 때 기록할 컨텍스트 변수를 선택할 수 있습니다. 다음 변수가 지원됩니다.


| 파라미터 | 설명 | 
| --- | --- | 
| \$1context.apiId |  식별자 API Gateway가 API에 할당합니다.  | 
| \$1context.authorize.error | 권한 부여 오류 메시지입니다. | 
| \$1context.authorize.latency | 권한 부여 지연 시간(ms)입니다. | 
| \$1context.authorize.status | 권한 부여 시도에서 반환된 상태 코드입니다. | 
| \$1context.authorizer.error | 권한 부여자로부터 반환된 오류 메시지입니다. | 
| \$1context.authorizer.integrationLatency | Lambda 권한 부여자 지연 시간(ms)입니다. | 
| \$1context.authorizer.integrationStatus | Lambda 권한 부여자로부터 반환된 상태 코드입니다. | 
| \$1context.authorizer.latency | 권한 부여자 지연 시간(ms)입니다. | 
| \$1context.authorizer.requestId | AWS 엔드포인트의 요청 ID입니다. | 
| \$1context.authorizer.status | 권한 부여자로부터 반환된 상태 코드입니다. | 
| \$1context.authorizer.principalId |  클라이언트가 전송한 토큰에 연결되고 API Gateway Lambda 권한 부여자 Lambda 함수에서 반환되는 보안 주체 사용자 ID입니다. (이전에는 Lambda를 사용자 지정 권한 부여자라고도 함).  | 
| \$1context.authorizer.property |  API Gateway Lambda 권한 부여자 함수에서 반환된 `context` 맵의 지정된 키-값 페어의 문자열화된 값입니다. 예를 들어, 권한 부여자는 다음 `context` 맵을 반환합니다. <pre>"context" : {<br />                            "key": "value",<br />                            "numKey": 1,<br />                            "boolKey": true<br />                            }</pre> `$context.authorizer.key`를 호출하면 `"value"` 문자열이 반환되고, `$context.authorizer.numKey`를 호출하면 `"1"` 문자열이 반환되고, `$context.authorizer.boolKey`를 호출하면 `"true"` 문자열이 반환됩니다.  | 
| \$1context.authenticate.error | 인증 시도에서 반환된 오류 메시지입니다. | 
| \$1context.authenticate.latency | 인증 지연 시간(ms)입니다. | 
| \$1context.authenticate.status | 인증 시도에서 반환된 상태 코드입니다. | 
| \$1context.connectedAt |  [Epoch](https://en.wikipedia.org/wiki/Unix_time) 형식 연결 시간입니다.  | 
| \$1context.connectionId |  클라이언트에 대한 콜백을 만드는 데 사용할 수 있는 고유한 연결 ID입니다.  | 
| \$1context.domainName |  WebSocket API의 도메인 이름입니다. 이 이름은 하드 코딩된 값 대신에 클라이언트를 콜백하는 데 사용할 수 있습니다.  | 
| \$1context.error.message |  API Gateway 오류 메시지가 포함된 문자열입니다.  | 
| \$1context.error.messageString | \$1context.error.message의 따옴표 붙은 값, 즉 "\$1context.error.message"입니다. | 
| \$1context.error.responseType |  오류 응답 유형.  | 
| \$1context.error.validationErrorString |  자세한 유효성 검사 오류 메시지가 포함된 문자열입니다.  | 
| \$1context.eventType |  이벤트 유형: `CONNECT`, `MESSAGE` 또는 `DISCONNECT`.  | 
| \$1context.extendedRequestId | \$1context.requestId와 동일합니다. | 
| \$1context.identity.accountId |  요청과 연결된 AWS 계정 ID입니다.  | 
| \$1context.identity.apiKey |  키가 활성화된 API 요청에 연결된 API 소유자 키입니다.  | 
| \$1context.identity.apiKeyId | 키가 활성화된 API 요청에 연결된 API 키 ID입니다. | 
| \$1context.identity.caller |  요청에 서명한 호출자의 보안 주체 ID입니다. IAM 권한 부여를 사용하는 라우팅에 대해 지원됩니다.  | 
| \$1context.identity.cognitoAuthenticationProvider |  요청을 작성한 직접 호출자가 사용한 모든 Amazon Cognito 인증 공급자의 쉼표로 구분된 목록입니다. Amazon Cognito 자격 증명으로 요청을 서명한 경우에만 사용할 수 있습니다. 예를 들어, Amazon Cognito 사용자 풀의 자격 증명의 경우 `cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` 사용 가능한 Amazon Cognito 인증 공급자에 대한 자세한 내용은 Amazon Cognito 개발자 안내서**의 [페더레이션 자격 증명 사용](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)을 참조하세요. | 
| \$1context.identity.cognitoAuthenticationType |  요청을 작성한 호출자의 Amazon Cognito 인증 유형입니다. Amazon Cognito 자격 증명으로 요청을 서명한 경우에만 사용할 수 있습니다. 가능한 값에는 인증 자격 증명에 대한 `authenticated` 및 미인증 자격 증명에 대한 `unauthenticated`이(가) 포함됩니다. | 
| \$1context.identity.cognitoIdentityId |  요청을 작성한 호출자의 Amazon Cognito 자격 증명 ID입니다. Amazon Cognito 자격 증명으로 요청을 서명한 경우에만 사용할 수 있습니다.  | 
| \$1context.identity.cognitoIdentityPoolId |  요청을 작성한 호출자의 Amazon Cognito 자격 증명 풀 ID입니다. Amazon Cognito 자격 증명으로 요청을 서명한 경우에만 사용할 수 있습니다.  | 
| \$1context.identity.principalOrgId |  [AWS 조직 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html)입니다. IAM 권한 부여를 사용하는 라우팅에 대해 지원됩니다.  | 
| \$1context.identity.sourceIp |  API 게이트웨이에 대한 요청을 작성한 TCP 연결의 소스 IP 주소입니다.  | 
| \$1context.identity.user |  리소스 액세스에 대해 권한을 부여할 사용자의 보안 주체 ID입니다. IAM 권한 부여를 사용하는 라우팅에 대해 지원됩니다.  | 
| \$1context.identity.userAgent |  API 호출자의 사용자 에이전트입니다.  | 
| \$1context.identity.userArn |  인증 후 식별된 실제 사용자의 ARN(Amazon Resource Name)입니다.  | 
| \$1context.integration.error | 통합에서 반환된 오류 메시지입니다. | 
| \$1context.integration.integrationStatus | Lambda 프록시 통합의 경우 백엔드 Lambda 함수 코드가 아니라 AWS Lambda에서 반환된 상태 코드입니다. | 
| \$1context.integration.latency | 통합 지연 시간(ms)입니다. \$1context.integrationLatency와 동일합니다. | 
| \$1context.integration.requestId | AWS 엔드포인트의 요청 ID입니다. \$1context.awsEndpointRequestId와 동일합니다. | 
| \$1context.integration.status | 통합에서 반환된 상태 코드입니다. Lambda 프록시 통합의 경우 Lambda 함수 코드에서 반환된 상태 코드입니다. \$1context.integrationStatus와 동일합니다. | 
| \$1context.integrationLatency | 통합 지연 시간(밀리초)으로서 액세스 로깅에만 사용할 수 있습니다. | 
| \$1context.messageId |  메시지의 고유 서버 측 ID. `$context.eventType`이 `MESSAGE`인 경우에만 사용 가능합니다.  | 
| \$1context.requestId |  `$context.extendedRequestId`와 동일합니다.  | 
| \$1context.requestTime | [CLF](https://httpd.apache.org/docs/current/logs.html#common) 형식 요청 시간(dd/MMM/yyyy:HH:mm:ss \$1-hhmm)입니다. | 
| \$1context.requestTimeEpoch | [Epoch](https://en.wikipedia.org/wiki/Unix_time) 형식 요청 시간(밀리초)입니다. | 
| \$1context.routeKey |  선택한 라우팅 키.  | 
| \$1context.stage |  API 호출의 개발 단계입니다(예: 베타 또는 프로덕션).  | 
| \$1context.status |  응답 상태입니다.  | 
| \$1context.waf.error | 에서 반환된 오류 메시지입니다AWS WAF | 
| \$1context.waf.latency | AWS WAF 지연 시간(ms)입니다. | 
| \$1context.waf.status | AWS WAF에서 반환된 상태 코드입니다. | 

일반적으로 사용되는 몇 가지 액세스 로그 형식의 예가 API Gateway 콘솔에 표시되며 다음과 같이 나열됩니다.
+ `CLF`([Common Log Format](https://httpd.apache.org/docs/current/logs.html#common)):

  ```
  $context.identity.sourceIp $context.identity.caller \
  $context.identity.user [$context.requestTime] "$context.eventType $context.routeKey $context.connectionId" \
  $context.status $context.requestId
  ```

  연속 문자(`\`)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(`\n`)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.
+  `JSON`: 

  ```
  {
  "requestId":"$context.requestId", \
  "ip": "$context.identity.sourceIp", \
  "caller":"$context.identity.caller", \
  "user":"$context.identity.user", \
  "requestTime":"$context.requestTime", \
  "eventType":"$context.eventType", \
  "routeKey":"$context.routeKey", \
  "status":"$context.status", \
  "connectionId":"$context.connectionId"
  }
  ```

  연속 문자(`\`)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(`\n`)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.
+ `XML`: 

  ```
  <request id="$context.requestId"> \
   <ip>$context.identity.sourceIp</ip> \
   <caller>$context.identity.caller</caller> \
   <user>$context.identity.user</user> \
   <requestTime>$context.requestTime</requestTime> \
   <eventType>$context.eventType</eventType> \
   <routeKey>$context.routeKey</routeKey> \
   <status>$context.status</status> \
   <connectionId>$context.connectionId</connectionId> \
  </request>
  ```

  연속 문자(`\`)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(`\n`)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.
+ `CSV`(쉼표로 분리된 값):

  ```
  $context.identity.sourceIp,$context.identity.caller, \
  $context.identity.user,$context.requestTime,$context.eventType, \
  $context.routeKey,$context.connectionId,$context.status, \
  $context.requestId
  ```

  연속 문자(`\`)는 시각적 보조 수단으로 사용됩니다. 로그 형식은 한 줄이어야 합니다. 로그 형식의 끝에 줄바꿈 문자(`\n`)를 추가하여 각 로그 항목의 끝에 줄바꿈 문자를 포함할 수 있습니다.