

# 接続ログを使用したオブザーバビリティ
<a name="connection-logs"></a>

CloudFront 接続ログは相互 TLS 認証イベントを詳細に可視化するため、証明書の検証のモニタリング、接続試行の追跡、認証問題のトラブルシューティングを行うことができます。

## 接続ログとは
<a name="what-are-connection-logs"></a>

接続ログは、相互 TLS 対応ディストリビューションの TLS ハンドシェイクと証明書の検証に関する詳細情報をキャプチャします。HTTP リクエスト情報を記録する標準アクセスログとは異なり、接続ログは、以下を含む TLS 接続確立フェーズに特に重点を置いています。
+ 接続ステータス (成功/失敗)
+ クライアント証明書の詳細
+ TLS プロトコルと暗号情報
+ 接続タイミングのメトリクス
+ Connection Functions からのカスタムデータ

これらのログは、証明書ベースの認証イベントを包括的に可視化し、セキュリティのモニタリング、問題のトラブルシューティングを行い、コンプライアンス要件を満たすのに役立ちます。

## 接続ログを有効にする
<a name="enable-connection-logs"></a>

接続ログは、相互 TLS 認証が有効になっているディストリビューションでのみ利用可能です。CloudWatch Logs、Amazon Data Firehose、Amazon S3 など、複数の宛先に接続ログを送信できます。

### 前提条件
<a name="connection-logs-prerequisites"></a>

接続ログを有効にする前に
+ CloudFront ディストリビューションの相互 TLS を設定します
+ CloudFront ディストリビューションの接続ログを有効にします
+ 選択したログ記録先に必要なアクセス許可があることを確認します
+ クロスアカウント配信の場合、適切な IAM ポリシーを設定します

### 接続ログを有効にするには (コンソール)
<a name="enable-connection-logs-console"></a>

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ディストリビューションリストから、mTLS 対応ディストリビューションを選択します。

1. **[Logging]** (ログ) タブを選択します。

1. **[Add]** (追加) を選択します。

1. ログを受信するサービスを選択します。
   + **CloudWatch Logs**
   + **Firehose** – 
   + **Amazon S3**

1. **[送信先]** で、選択したサービスのリソースを選択します。
   + CloudWatch Logs の場合は、**[ロググループ名]** に入力します。
   + Firehose の場合、**[Firehose 配信ストリーム]** を選択します。
   + Amazon S3 の場合、**[バケット名]** を入力します (オプションでプレフィックスを使用)。

1. (オプション) 追加の設定を行います。
   + **フィールドの選択:** 含める特定のログフィールドを選択します。
   + **出力形式:** JSON、プレーン、w3c、Raw、または Parquet (S3 のみ) から選択します。
   + **フィールド区切り文字:** ログフィールドを区切る方法を指定します。

1. **[変更を保存]** を選択します。

### 接続ログを有効にするには (AWS CLI)
<a name="enable-connection-logs-cli"></a>

次の例は、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) を指定する必要があります。

## 接続ログのフィールド
<a name="connection-log-fields"></a>

接続ログには、各 TLS 接続試行に関する詳細情報が含まれます。


| フィールド | 説明 | 例 | 
| --- | --- | --- | 
| eventTimestamp | 接続が確立または失敗したときの ISO 8601 タイムスタンプ | 1731620046814 | 
| connectionId | TLS 接続の一意の識別子 | oLHiEKbQSn8lkvJfA3D4gFowK3\$1iZ0g4i5nMUjE1Akod8TuAzn5nzg== | 
| 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\$12te1Ura9X3R2iCGNjW123 | 
| tlsProtocol | 使用されている TLS プロトコルバージョン | TLSv1.3 | 
| tlsCipher | 接続に使用される TLS 暗号スイート | TLS\$1AES\$1128\$1GCM\$1SHA256 | 
| tlsHandshakeDuration | TLS ハンドシェイクの期間 (ミリ秒単位) | 153 | 
| tlsSni | TLS ハンドシェイクからの Server Name Indication の値 | 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 | 

## 接続エラーコード
<a name="connection-error-codes"></a>

```
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 |  Connection Function の実行中に、キャッチされない例外がスローされました  | 
| 内部 |  内部サービスエラーが発生しました。  | 
| UnmappedConnectionError |  他のいずれのカテゴリにも該当しないエラーが発生しました  | 