연결 로그를 사용한 관찰성
CloudFront 연결 로그는 상호 TLS 인증 이벤트에 대한 자세한 가시성을 제공하므로 인증서 검증을 모니터링하고, 연결 시도를 추적하고, 인증 문제를 해결할 수 있습니다.
연결 로그란 무엇인가요?
연결 로그는 상호 TLS 지원 배포의 TLS 핸드셰이크 및 인증서 검증에 대한 자세한 정보를 캡처합니다. HTTP 요청 정보를 기록하는 표준 액세스 로그와 달리 연결 로그는 특히 다음을 포함한 TLS 연결 설정 단계에 중점을 둡니다.
연결 상태(성공/실패)
클라이언트 인증서 세부 정보
TLS 프로토콜 및 암호 정보
연결 타이밍 지표
연결 함수의 사용자 지정 데이터
이러한 로그는 인증서 기반 인증 이벤트에 대한 포괄적인 가시성을 제공하여 보안을 모니터링하고 문제를 해결하며 규정 준수 요구 사항을 충족하는 데 도움이 됩니다.
연결 로그 활성화
연결 로그는 상호 TLS 인증이 활성화된 배포에만 사용할 수 있습니다. CloudWatch Logs, Amazon Data Firehose 및 Amazon S3를 비롯한 여러 대상으로 연결 로그를 전송할 수 있습니다.
사전 조건
연결 로그를 활성화하기 전에:
CloudFront 배포에 대한 상호 TLS 구성
CloudFront 배포에 대한 연결 로그 활성화
선택한 로깅 대상에 필요한 권한이 있는지 확인합니다.
교차 계정 전송의 경우 적절한 IAM 정책을 구성합니다.
연결 로그를 활성화하려면(콘솔)
AWS Management 콘솔에 로그인한 다음 https://console.aws.amazon.com/cloudfront/v4/home
에서 CloudFront 콘솔을 엽니다. -
배포 목록에서 mTLS 지원 배포를 선택합니다.
-
Logging(로깅) 탭을 선택합니다.
-
추가를 선택합니다.
-
로그를 수신할 서비스를 선택합니다.
CloudWatch 로그
Firehose –
Amazon S3:
-
대상에서 선택한 서비스의 리소스를 선택합니다.
CloudWatch Logs에서 로그 그룹 이름을 입력합니다.
Firehose의 경우 Firehose 전송 스트림을 선택합니다.
Amazon S3의 경우 버킷 이름을 입력합니다(접두사 포함은 선택 사항).
-
(선택 사항) 추가 설정 구성:
필드 선택: 포함할 특정 로그 필드를 선택합니다.
출력 형식: JSON, 일반, w3c, 원시 또는 Parquet(S3만 해당) 중에서 선택합니다.
필드 구분 기호: 로그 필드를 구분하는 방법을 지정합니다.
-
변경 사항 저장을 선택합니다
연결 로그를 활성화하려면(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 |
다른 범주에 속하지 않는 오류 발생 |