使用連線日誌的可觀測性 - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用連線日誌的可觀測性

CloudFront 連線日誌提供交互 TLS 身分驗證事件的詳細可見性,可讓您監控憑證驗證、追蹤連線嘗試,以及疑難排解身分驗證問題。

什麼是連線日誌?

連線日誌會擷取有關啟用交互 TLS 分佈的 TLS 交握和憑證驗證的詳細資訊。與記錄 HTTP 請求資訊的標準存取日誌不同,連線日誌特別著重於 TLS 連線建立階段,包括:

  • 連線狀態 (成功/失敗)

  • 用戶端憑證詳細資訊

  • TLS 通訊協定和密碼資訊

  • 連線時間指標

  • 來自 Connection Functions 的自訂資料

這些日誌提供憑證型身分驗證事件的完整可見性,協助您監控安全性、疑難排解問題,並符合合規要求。

啟用連線日誌

連線日誌僅適用於已啟用交互 TLS 身分驗證的分佈。您可以將連線日誌傳送至多個目的地,包括 CloudWatch Logs、Amazon Data Firehose 和 Amazon S3。

先決條件

啟用連線日誌之前:

  • 為您的 CloudFront 分佈設定交互 TLS

  • 為您的 CloudFront 分佈啟用連線日誌

  • 確定您擁有所選記錄目的地的必要許可

  • 對於跨帳戶交付,請設定適當的 IAM 政策

啟用連線日誌 (主控台)

  1. 登入 AWS 管理主控台 ,並在 開啟 CloudFront 主控台https://console.aws.amazon.com/cloudfront/v4/home

  2. 從分發清單中,選取已啟用 mTLS 的分發。

  3. 選擇 Logging (日誌記錄) 索引標籤。

  4. 選擇新增

  5. 選取要接收日誌的服務:

    • CloudWatch Logs

    • Firehose

    • Amazon S3

  6. 針對目的地,選取所選服務的資源:

    • 對於 CloudWatch Logs,輸入日誌群組名稱

    • 對於 Firehose,選取 Firehose 交付串流

    • 對於 Amazon S3,輸入儲存貯體名稱 (選擇性使用字首)

  7. (選用) 設定其他設定:

    • 欄位選擇:選取要包含的特定日誌欄位。

    • 輸出格式:從 JSON、Plain、w3c、Raw 或 Parquet (僅限 S3) 中選擇。

    • 欄位分隔符號:指定如何分隔日誌欄位。

  8. 選擇 Save changes (儲存變更)

啟用連線日誌 (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 連線嘗試的詳細資訊:

欄位 Description 範例
eventTimestamp 建立連線或失敗時的 ISO 8601 時間戳記 1731620046814
connectionId TLS 連線的唯一識別符 oLHiEKbQSn8lkvJfA3D4gFowK3_iZ0g4i5nMUjE1Akod8TuAzn5nzg==
connectionStatus

mTLS 連線嘗試的狀態。

SuccessFailed
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 透過 Connection Functions 新增的自訂資料 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 會記錄特定原因代碼:

Code Description
ClientCertMaxChainDepthExceeded 超過憑證鏈深度上限
ClientCertMaxSizeExceeded 超過憑證大小上限
ClientCertUntrusted 憑證不受信任
ClientCertNotYetValid 憑證尚未有效
ClientCertExpired 憑證已過期
ClientCertTypeUnsupported 不支援憑證類型
ClientCertInvalid 憑證無效
ClientCertIntentInvalid 憑證意圖無效
ClientCertRejected 自訂驗證拒絕的憑證
ClientCertMissing 憑證遺失
TcpError

嘗試建立連線時發生錯誤

TcpTimeout

無法在逾時期間內建立連線

ConnectionFunctionError

在 Connection Function 執行期間擲回未攔截的例外狀況

內部 (Internal)

發生內部服務錯誤

UnmappedConnectionError

發生錯誤,其不屬於任何其他類別