연결 로그를 사용한 관찰성 - Amazon CloudFront

연결 로그를 사용한 관찰성

CloudFront 연결 로그는 상호 TLS 인증 이벤트에 대한 자세한 가시성을 제공하므로 인증서 검증을 모니터링하고, 연결 시도를 추적하고, 인증 문제를 해결할 수 있습니다.

연결 로그란 무엇인가요?

연결 로그는 상호 TLS 지원 배포의 TLS 핸드셰이크 및 인증서 검증에 대한 자세한 정보를 캡처합니다. HTTP 요청 정보를 기록하는 표준 액세스 로그와 달리 연결 로그는 특히 다음을 포함한 TLS 연결 설정 단계에 중점을 둡니다.

  • 연결 상태(성공/실패)

  • 클라이언트 인증서 세부 정보

  • TLS 프로토콜 및 암호 정보

  • 연결 타이밍 지표

  • 연결 함수의 사용자 지정 데이터

이러한 로그는 인증서 기반 인증 이벤트에 대한 포괄적인 가시성을 제공하여 보안을 모니터링하고 문제를 해결하며 규정 준수 요구 사항을 충족하는 데 도움이 됩니다.

연결 로그 활성화

연결 로그는 상호 TLS 인증이 활성화된 배포에만 사용할 수 있습니다. CloudWatch Logs, Amazon Data Firehose 및 Amazon S3를 비롯한 여러 대상으로 연결 로그를 전송할 수 있습니다.

사전 조건

연결 로그를 활성화하기 전에:

  • CloudFront 배포에 대한 상호 TLS 구성

  • CloudFront 배포에 대한 연결 로그 활성화

  • 선택한 로깅 대상에 필요한 권한이 있는지 확인합니다.

  • 교차 계정 전송의 경우 적절한 IAM 정책을 구성합니다.

연결 로그를 활성화하려면(콘솔)

  1. AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/cloudfront/v4/home에서 CloudFront 콘솔을 엽니다.

  2. 배포 목록에서 mTLS 지원 배포를 선택합니다.

  3. Logging(로깅) 탭을 선택합니다.

  4. 추가를 선택합니다.

  5. 로그를 수신할 서비스를 선택합니다.

    • CloudWatch 로그

    • Firehose

    • Amazon S3:

  6. 대상에서 선택한 서비스의 리소스를 선택합니다.

    • CloudWatch Logs에서 로그 그룹 이름을 입력합니다.

    • Firehose의 경우 Firehose 전송 스트림을 선택합니다.

    • Amazon S3의 경우 버킷 이름을 입력합니다(접두사 포함은 선택 사항).

  7. (선택 사항) 추가 설정 구성:

    • 필드 선택: 포함할 특정 로그 필드를 선택합니다.

    • 출력 형식: JSON, 일반, w3c, 원시 또는 Parquet(S3만 해당) 중에서 선택합니다.

    • 필드 구분 기호: 로그 필드를 구분하는 방법을 지정합니다.

  8. 변경 사항 저장을 선택합니다

연결 로그를 활성화하려면(AWS CLI)

다음 예제에서는 CloudWatch API를 사용하여 연결 로그를 활성화하는 방법을 보여줍니다.

# Step 1: Create a delivery source aws logs put-delivery-source \ --name "cf-mtls-connection-logs" \ --resource-arn "arn:aws:cloudfront::123456789012:distribution/E1A2B3C4D5E6F7" \ --log-type CONNECTION_LOGS # Step 2: Create a delivery destination aws logs put-delivery-destination \ --name "s3-destination" \ --delivery-destination-configuration \ "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket1" # Step 3: Create the delivery aws logs create-delivery \ --delivery-source-name "cf-mtls-connection-logs" \ --delivery-destination-arn "arn:aws:logs:us-east-1:123456789012:delivery-destination:s3-destination"
참고

CloudWatch API를 사용하는 경우 로그를 다른 리전으로 전송할 때도 미국 동부(버지니아 북부) 리전(us-east-1)을 지정해야 합니다.

연결 로그 필드

연결 로그에는 각 TLS 연결 시도에 대한 세부 정보가 포함됩니다.

필드 설명 예제
eventTimestamp 연결이 설정되거나 실패한 경우 ISO 8601 타임스탬프 1731620046814
connectionId TLS 연결의 고유 식별자 oLHiEKbQSn8lkvJfA3D4gFowK3_iZ0g4i5nMUjE1Akod8TuAzn5nzg==
connectionStatus

mTLS 연결 시도의 상태입니다.

Success 또는 Failed
clientIp 연결 클라이언트의 IP 주소 2001:0db8:85a3:0000:0000:8a2e:0370:7334
clientPort 클라이언트에서 사용하는 포트 12137
serverIp CloudFront 엣지 서버의 IP 주소 99.84.71.136
distributionId CloudFront 배포 ID E2DX1SLDPK0123
distributionTenantId CloudFront 배포 테넌트 ID(해당하는 경우) dt_2te1Ura9X3R2iCGNjW123
tlsProtocol 사용된 TLS 프로토콜 버전 TLSv1.3
tlsCipher 연결에 사용되는 TLS 암호 제품군 TLS_AES_128_GCM_SHA256
tlsHandshakeDuration TLS 핸드셰이크 기간(밀리초) 153
tlsSni TLS 핸드셰이크의 서버 이름 표시 값 d111111abcdef8.cloudfront.net
clientLeafCertSerialNumber 클라이언트 인증서의 일련 번호 00:b1:43:ed:93:d2:d8:f3:9d
clientLeafCertSubject 클라이언트 인증서의 제목 필드 C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=client.test.mtls.net
clientLeafCertIssuer 클라이언트 인증서의 발급자 필드 C=US, ST=WA, L=Seattle, O=Amazon.com, OU=CloudFront, CN=test.mtls.net
clientLeafCertValidity 클라이언트 인증서의 유효 기간 NotBefore=2025-06-05T23:28:21Z;NotAfter=2125-05-12T23:28:21Z
connectionLogCustomData 연결 함수를 통해 추가된 사용자 지정 데이터 REVOKED:00:b1:43:ed:93:d2:d8:f3:9d

연결 오류 코드

Failed:ClientCertMaxChainDepthExceeded Failed:ClientCertMaxSizeExceeded Failed:ClientCertUntrusted Failed:ClientCertNotYetValid Failed:ClientCertExpired Failed:ClientCertTypeUnsupported Failed:ClientCertInvalid Failed:ClientCertIntentInvalid Failed:ClientCertRejected Failed:ClientCertMissing Failed:TcpError Failed:TcpTimeout Failed:ConnectionFunctionError Failed:ConnectionFunctionDenied Failed:Internal Failed:UnmappedConnectionError

연결이 실패하면 CloudFront는 특정 사유 코드를 기록합니다.

코드 설명
ClientCertMaxChainDepthExceeded 최대 인증서 체인 깊이 초과
ClientCertMaxSizeExceeded 최대 인증서 크기 초과
ClientCertUntrusted 클라이언트 인증서를 신뢰할 수 없음
ClientCertNotYetValid 인증서가 아직 유효하지 않음
ClientCertExpired 인증서가 만료됨
ClientCertTypeUnsupported 클라이언트 인증서 유형이 지원되지 않음
ClientCertInvalid 인증서가 잘못됨
ClientCertIntentInvalid 인증서 의도가 잘못됨
ClientCertRejected 사용자 지정 검증에서 거부된 인증서
ClientCertMissing 인증서 누락
TcpError

연결을 설정하는 동안 오류 발생

TcpTimeout

제한 시간 내에 연결을 설정할 수 없음

ConnectionFunctionError

연결 함수 실행 중에 발견되지 않은 예외 발생

내부

내부 서비스 오류 발생

UnmappedConnectionError

다른 범주에 속하지 않는 오류 발생