

# CloudFront とエッジ関数のログ記録
<a name="logging"></a>

Amazon CloudFront では、さまざまな種類のログ記録が提供されます。CloudFront ディストリビューションに送信されるビューワーリクエスト、または AWS アカウントの CloudFront サービスアクティビティ (API アクティビティ) をログに記録することができます。CloudFront Functions および Lambda@Edge 関数からログを取得することもできます。

## リクエストのログ記録
<a name="logging-requests"></a>

CloudFront には、ディストリビューションに送信されるリクエストをログに記録するために、次の方法が用意されています。

**アクセスログ (標準ログ)**  
CloudFront アクセスログは、ディストリビューションに対して行われたすべてのリクエストに関する詳細なレコードを提供します。ログは、セキュリティ監査やアクセス監査などのシナリオで使用できます。  
CloudFront アクセスログは、指定した配信先に配信されます。  
次が必要な場合、アクセスログを使用します。  
+ 履歴分析とレポート
+ セキュリティ監査とコンプライアンス要件
+ 費用対効果の高い長期ログ保持
詳細については、「[アクセスログ (標準ログ)](AccessLogs.md)」を参照してください。

**リアルタイムのアクセスログ**  
CloudFront リアルタイムアクセスログはリクエストを受信してから数秒以内に配信され、ディストリビューションに対して行われたリクエストに関する情報をリアルタイムで提供します。リアルタイムのアクセスログの*サンプリングレート*、つまり、リアルタイムのアクセスログ記録を受信するリクエストの割合を選択できます。ログ記録で受信が行われる特定のフィールドを選択することもできます。リアルタイムのアクセスログは、コンテンツ配信パフォーマンスのライブモニタリングに適しています。  
CloudFront リアルタイムアクセスログは、Amazon Kinesis Data Streams で選択したデータストリームに配信されます。Kinesis Data Streams の使用料金に加えて、CloudFront でのリアルタイムアクセスログの料金が発生します。  
次が必要な場合、リアルタイムのアクセスログを使用します。  
+ リアルタイムのモニタリングとアラート
+ ライブダッシュボードと運用上のインサイト
詳細については、「[リアルタイムのアクセスログを使用する](real-time-logs.md)」を参照してください。

**接続ログ**  
接続ログは、mTLS が有効なディストリビューションのサーバーとクライアント間の接続に関する詳細情報を提供します。接続ログは、クライアント証明書情報、mTLS 認証の失敗の理由、接続が許可または拒否されたかどうかを可視化します。  
アクセスログ (標準ログ) と同様に、接続ログは指定した配信先に配信されます。  
 接続ログを有効にするには、まずディストリビューションの [mTLS を有効にする](mtls-authentication.md)必要があります。
次が必要な場合、接続ログを使用します。  
+ TLS ハンドシェイク中に接続が成功または失敗した理由 
+ クライアント証明書情報の可視性
詳細については、「[接続ログを使用したオブザーバビリティ](connection-logs.md)」を参照してください。

## エッジ関数をログ記録する
<a name="logging-edge-functions"></a>

Amazon CloudWatch Logs を使用して、Lambda@Edge 関数と CloudFront Functions の両方のエッジ関数のログを取得できます。ログには、CloudWatch コンソールまたは CloudWatch Logs API を使用してアクセスできます。詳しくは、「[エッジ関数のログ](edge-functions-logs.md)」を参照してください。

## サービスアクティビティのログ記録
<a name="logging-service-activity"></a>

AWS CloudTrail を使用して、AWS アカウントの CloudFront サービスアクティビティ (API アクティビティ) をログに記録できます。CloudTrail は、CloudFront のユーザー、ロール、または AWS のサービスによって実行された API アクションの記録を提供します。CloudTrail で収集された情報を使用して、CloudFront に対する API リクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。

詳細については、「[AWS CloudTrail を使用した Amazon CloudFront API コールのログ記録](logging_using_cloudtrail.md)」を参照してください。

ログ記録の詳細については、以下のトピックを参照してください。

**Topics**
+ [リクエストのログ記録](#logging-requests)
+ [エッジ関数をログ記録する](#logging-edge-functions)
+ [サービスアクティビティのログ記録](#logging-service-activity)
+ [アクセスログ (標準ログ)](AccessLogs.md)
+ [リアルタイムのアクセスログを使用する](real-time-logs.md)
+ [エッジ関数のログ](edge-functions-logs.md)
+ [AWS CloudTrail を使用した Amazon CloudFront API コールのログ記録](logging_using_cloudtrail.md)

# アクセスログ (標準ログ)
<a name="AccessLogs"></a>

CloudFront で受信するすべてのユーザー (ビューワー) リクエストに関する詳細情報を含むログファイルを作成するように CloudFront を設定できます。これらは、*アクセスログ*と呼ばれます。また、*標準ログ*とも呼ばれています。

各ログには、リクエストの受信時刻、処理時間、リクエストパス、サーバーレスポンスなどの情報が含まれます。これらのアクセスログを使用して、応答時間の分析や問題のトラブルシューティングを行うことができます。

次の図は、オブジェクトのリクエストに関する情報が CloudFront によってログ記録されるしくみを示しています。この例では、Amazon S3 バケットにアクセスログを送信するようにディストリビューションを設定しています。

![\[アクセスログの基本フロー\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/images/Logging.png)


1. この例には、2 つのウェブサイト (A、B) と 2 つの対応する CloudFront ディストリビューションがあります。ユーザーは、ディストリビューションに関連付けられている URL を使用してオブジェクトをリクエストします。

1. CloudFront は、各リクエストを適切なエッジロケーションにルーティングします。

1. CloudFront は、各リクエストに関するデータを、そのディストリビューション専用のログファイルに書き込みます。この例では、ディストリビューション A に関連するリクエストの情報はディストリビューション A のログファイルに書き込まれます。ディストリビューション B に関連するリクエストの情報はディストリビューション B のログファイルに書き込まれます。

1. ログ記録を有効にした際に指定した Amazon S3 バケットに、ディストリビューションのログファイルが CloudFront によって定期的に保存されます。後続のリクエストに関する情報は、CloudFront によってディストリビューションの新しいログファイルに保存されます。

   ビューワーが、特定の時間内にコンテンツにアクセスしなかった場合、その時間内のログファイルは受信しません。

**注記**  
ログは、すべてのリクエストを完全に課金するためのものではなく、コンテンツに対するリクエストの本質を把握するものとして使用することをお勧めします。CloudFront はベストエフォートベースでアクセスログを提供します。特定のリクエストのログエントリが、リクエストが実際に処理されてからかなり後に配信されることも、(まれに) 一切配信されないこともあります。ログエントリをアクセスログから省略すると、アクセスログ内のエントリ数は AWS の請求と使用状況レポートに表示される使用量と一致しなくなります。

CloudFront は、2 つのバージョンの標準ログ記録をサポートしています。標準ログ記録 (レガシー) は、Amazon S3 *のみ*へのアクセスログの送信をサポートしています。標準ログ記録 (v2) は、その他の配信先もサポートしています。ディストリビューションには、両方またはいずれかのログ記録オプションを設定できます。詳細については、以下の各トピックを参照してください。

**Topics**
+ [標準ログ記録 (v2) を設定する](standard-logging.md)
+ [標準ログ記録 (レガシー) を設定する](standard-logging-legacy-s3.md)
+ [標準ログ記録リファレンス](standard-logs-reference.md)

**ヒント**  
CloudFront は、リアルタイムのアクセスログも提供します。これにより、ディストリビューションに対して行われたリクエストに関する情報がリアルタイムで提供されます (ログはリクエストを受信してから数秒以内に配信されます)。リアルタイムのアクセスログを使用して、コンテンツ配信のパフォーマンスに基づいて監視、分析、アクションを実行できます。詳細については、「[リアルタイムのアクセスログを使用する](real-time-logs.md)」を参照してください。

# 標準ログ記録 (v2) を設定する
<a name="standard-logging"></a>

ディストリビューションを作成または更新するとき、アクセスログ (標準ログ) を有効にできます。標準ログ記録 (v2) には、以下の機能が含まれています。
+ アクセスログを Amazon CloudWatch Logs、Amazon Data Firehose、Amazon Simple Storage Service (Amazon S3) に送信します。
+ 必要なログフィールドを選択します。[リアルタイムのアクセスログフィールドのサブセット](#standard-logging-real-time-log-selection)を選択することもできます。
+ 追加の[出力ログファイル](#supported-log-file-format)形式を選択します。

Amazon S3 を使用している場合は、以下のオプション機能を利用できます。
+ ログをオプトイン AWS リージョン に送信します。
+ パーティショニングを使用してログを整理します。
+ Hive 互換ファイル名を有効にします。

詳細については、「[Amazon S3 にログを送信する](#send-logs-s3)」を参照してください。

標準ログ記録の使用を開始するには、次の手順を実行します。

1. ログの受信先として指定する AWS のサービスに必要なアクセス許可を設定します。

1. CloudFront コンソールまたは CloudWatch API を使用して標準ログ記録を設定します。

1. アクセスログを表示します。

**注記**  
標準ログ記録 (v2) を有効にしても、標準ログ記録 (レガシー) には影響や変更はありません。標準ログ記録 (v2) を使用しながら、標準ログ記録 (レガシー) も引き続きディストリビューションで使用できます。詳細については、「[標準ログ記録 (レガシー) を設定する](standard-logging-legacy-s3.md)」を参照してください。
標準ログ記録 (レガシー) を既に有効にしていて、Amazon S3 への標準ログ記録 (v2) を有効にする場合は、*別の* Amazon S3 バケットを指定するか、同じバケット内の*別のパス*を使用する (例: ログプレフィックスやパーティショニングを使用する) ことをお勧めします。これにより、どのログファイルがどのディストリビューションに関連付けられているかを追跡し、ログファイルが互いに上書きされるのを防ぐことができます。

## アクセス許可
<a name="permissions-standard-logging"></a>

CloudFront は CloudWatch 提供のログを使用してアクセスログを配信します。そのためには、ログ記録を配信できるように、指定した AWS のサービスへのアクセス許可が必要です。

各ログ記録先への必要なアクセス許可を確認するには、「*Amazon CloudWatch Logs User Guide*」の以下のトピックから選択します。
+ [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs)
+ [Firehose](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-Firehose) – 
+ [Amazon S3](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-S3)

ログ記録先へのアクセス許可を設定したら、ディストリビューションの標準ログ記録を有効にできます。

**注記**  
CloudFront は、複数の異なる AWS アカウント (クロスアカウント) へのアクセスログの送信をサポートしています。クロスアカウント配信を有効にするには、両方のアカウント (自分のアカウントと受信アカウント) に該当するアクセス許可が必要です。詳細については、「[クロスアカウント配信の標準ログ記録を有効にする](#enable-standard-logging-cross-accounts)」セクションまたは「*Amazon CloudWatch Logs User Guide*」の「[Cross-account delivery example](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#vended-logs-crossaccount-example)」を参照してください。

## 標準ログ記録を有効にする
<a name="set-up-standard-logging"></a>

標準ログ記録を有効にするには、CloudFront コンソールまたは CloudWatch API を使用できます。

**Contents**
+ [標準ログ記録を有効にする (CloudFront コンソール）](#access-logging-console)
+ [標準ログ記録を有効にする (CloudWatch API)](#enable-access-logging-api)

### 標準ログ記録を有効にする (CloudFront コンソール）
<a name="access-logging-console"></a>

**CloudFront ディストリビューションの標準ログ記録を有効にするには (コンソール)**

1. CloudFront コンソールを使用して、[既存のディストリビューションを更新します](HowToUpdateDistribution.md#HowToUpdateDistributionProcedure)。

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

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

1. **[送信先]** で、サービスのリソースを選択します。リソースをまだ作成していない場合は、**[作成]** を選択するか、次のドキュメントを参照することができます。
   + CloudWatch Logs の場合は、**[[ロググループ名]](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)** に入力します。
   + Firehose の場合は、**[[Firehose 配信ストリーム]](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)** に入力します。
   + Amazon S3 の場合は、**[[バケット名]](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)** に入力します。
**ヒント**  
プレフィックスを指定するには、バケット名の後にプレフィックスを入力します (例: `amzn-s3-demo-bucket.s3.amazonaws.com/MyLogPrefix`)。プレフィックスを指定しないと、CloudFront が自動的にプレフィックスを追加します。詳細については、「[Amazon S3 にログを送信する](#send-logs-s3)」を参照してください。

1. **[追加設定 – *オプション*]** で、以下のオプションを指定できます。

   1. **[フィールド選択]** で、送信先に配信するログのフィールド名を選択します。[アクセスログフィールド](standard-logs-reference.md#BasicDistributionFileFormat)と、[リアルタイムアクセスログフィールド](#standard-logging-real-time-log-selection)のサブセットを選択できます。

   1. (Amazon S3 のみ) **[パーティショニング]** で、ログファイルデータをパーティション分割するパスを指定します。

   1. (Amazon S3 のみ) **[Hive 互換ファイル形式]** でチェックボックスをオンにして、Hive 互換 S3 パスを使用できます。これにより、Hive 互換ツールへの新しいデータのロードを簡素化できます。

   1. **[出力形式]** で、希望する形式を指定します。
**注記**  
**[Parquet]** を選択した場合、このオプションではアクセスログを Apache Parquet に変換するための CloudWatch 料金が発生します。詳細については、[「CloudWatch 料金表」の「Vended Logs」セクション](https://aws.amazon.com/cloudwatch/pricing/)を参照してください。

   1. **[フィールド区切り文字]** で、ログフィールドを区切る方法を指定します。

1. ディストリビューションを更新または作成するステップを完了します。

1. 別の送信先を追加するには、ステップ 3～6 を繰り返します。

1. **[ログ]** ページで、標準ログのステータスが、ディストリビューションの横で **[有効]** になっていることを確認します。

1. (オプション) Cookie ログ記録を有効にするには、**[管理]**、**[設定]** を選択し、**[cookie ログ記録]** をオンにしてから、**[変更を保存]** を選択します。
**ヒント**  
cookie ログ記録は、ディストリビューションの*すべて*の標準ログ記録に適用されるグローバル設定です。この設定を個別の配信先で上書きすることはできません。

標準ログ記録の配信とログフィールドの詳細については、「[標準ログ記録リファレンス](standard-logs-reference.md)」を参照してください。

### 標準ログ記録を有効にする (CloudWatch API)
<a name="enable-access-logging-api"></a>

CloudWatch API を使用して、ディストリビューションの標準ログ記録を有効にすることもできます。

**注意事項**  
CloudWatch API を呼び出して標準ログ記録を有効にする場合は、別の送信先へのクロスリージョン配信を有効にするときでも、米国東部 (バージニア北部) リージョン (`us-east-1`) を指定する必要があります。例えば、アクセスログを欧州 (アイルランド) リージョン (`eu-west-1`) の S3 バケットに送信する場合、`us-east-1` リージョンで CloudWatch API を使用します。
標準ログ記録に cookie を含めるための追加オプションがあります。CloudFront API の場合、これは `IncludeCookies` パラメータです。CloudWatch API を使用してアクセスログ記録を設定し、cookie を含めるように指定する場合は、CloudFront コンソールまたは CloudFront API を使用して cookie を含めるようにディストリビューションを更新する必要があります。そうしないと、CloudFront はログ送信先に cookie を送信できません。詳細については、「[cookie のログ作成](DownloadDistValuesGeneral.md#DownloadDistValuesCookieLogging)」を参照してください。

**ディストリビューションの標準ログ記録を有効にするには (CloudWatch API)**

1. ディストリビューションを作成したら、Amazon リソースネーム (ARN) を取得します。

   ARN は、CloudFront コンソールの **[ディストリビューション]** ページで見つけるか、[GetDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html) API オペレーションを使用して見つけることができます。ディストリビューション ARN は次の形式に従います: `arn:aws:cloudfront::123456789012:distribution/d111111abcdef8` 

1. 次に、CloudWatch [PutDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliverySource.html) API オペレーションを使用して、ディストリビューションの配信ソースを作成します。

   1. 配信ソースの名前を入力します。

   1. ディストリビューションの `resourceArn` を渡します。

   1. `logType` で、収集するログのタイプとして `ACCESS_LOGS` を指定します。

   1.   
**Example AWS CLI put-delivery-source コマンドの例**  

      次に示すのは、ディストリビューションの配信ソースを設定する例です。

      ```
      aws logs put-delivery-source --name S3-delivery --resource-arn arn:aws:cloudfront::123456789012:distribution/d111111abcdef8 --log-type ACCESS_LOGS
      ```

      **出力**:

      ```
      {
       "deliverySource": {
       "name": "S3-delivery",
       "arn": "arn:aws:logs:us-east-1:123456789012:delivery-source:S3-delivery",
       "resourceArns": [
       "arn:aws:cloudfront::123456789012:distribution/d111111abcdef8"
       ],
       "service": "cloudfront",
       "logType": "ACCESS_LOGS"
       }
      }
      ```

1. [PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html) API オペレーションを使用してログの保存先を設定します。

   1. `destinationResourceArn` で、送信先の ARN を指定します。これは、CloudWatch Logs ロググループ、Firehose 配信ストリーム、Amazon S3 バケットのいずれかにすることができます。

   1. `outputFormat` で、ログの出力形式を指定します。

   1.   
**Example AWS CLI put-delivery-destination コマンドの例**  

      次に示すのは、Amazon S3 バケットを配信先として設定する例です。

      ```
      aws logs put-delivery-destination --name S3-destination --delivery-destination-configuration destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket
      ```

      **出力**:

      ```
      {
          "name": "S3-destination",
          "arn": "arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination",
          "deliveryDestinationType": "S3",
          "deliveryDestinationConfiguration": {
              "destinationResourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
          }
      }
      ```
**注記**  
ログをクロスアカウント配信する場合は、[PutDeliveryDestinationPolicy](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestinationPolicy.html) API オペレーションを使用して AWS Identity and Access Management (IAM) ポリシーを送信先アカウントに割り当てる必要があります。IAM ポリシーは、あるアカウントから別のアカウントへの配信を許可します。

1. [CreateDelivery](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html) API オペレーションを使用して、配信ソースを、前のステップで作成した送信先にリンクします。この API オペレーションは、配信ソースを最終配信先と関連付けます。

   1. `deliverySourceName` で、ソース名を指定します。

   1. `deliveryDestinationArn` で、配信先の ARN を指定します。

   1. `fieldDelimiter` で、各ログフィールドを区切る文字列を指定します。

   1. `recordFields` で、必要なログフィールドを指定します。

   1. S3 を使用している場合は、`enableHiveCompatiblePath` と `suffixPath` を使用するかどうかを指定します。  
**Example AWS CLI create-delivery コマンドの例**  

   次に示すのは、配信を作成する例です。

   ```
   aws logs create-delivery --delivery-source-name cf-delivery --delivery-destination-arn arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination
   ```

   **出力**:

   ```
   {
       "id": "abcNegnBoTR123",
       "arn": "arn:aws:logs:us-east-1:123456789012:delivery:abcNegnBoTR123",
       "deliverySourceName": "cf-delivery",
       "deliveryDestinationArn": "arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination",
       "deliveryDestinationType": "S3",
       "recordFields": [
           "date",
           "time",
           "x-edge-location",
           "sc-bytes",
           "c-ip",
           "cs-method",
           "cs(Host)",
           "cs-uri-stem",
           "sc-status",
           "cs(Referer)",
           "cs(User-Agent)",
           "cs-uri-query",
           "cs(Cookie)",
           "x-edge-result-type",
           "x-edge-request-id",
           "x-host-header",
           "cs-protocol",
           "cs-bytes",
           "time-taken",
           "x-forwarded-for",
           "ssl-protocol",
           "ssl-cipher",
           "x-edge-response-result-type",
           "cs-protocol-version",
           "fle-status",
           "fle-encrypted-fields",
           "c-port",
           "time-to-first-byte",
           "x-edge-detailed-result-type",
           "sc-content-type",
           "sc-content-len",
           "sc-range-start",
           "sc-range-end",
           "c-country",
           "cache-behavior-path-pattern"
       ],
        "fieldDelimiter": ""
   }
   ```

1. CloudFront コンソールの **[ログ]** ページで、ディストリビューションの横で標準ログのステータスが **[有効]** になっていることを確認します。

   標準ログ記録の配信とログフィールドの詳細については、「[標準ログ記録リファレンス](standard-logs-reference.md)」を参照してください。

**注記**  
AWS CloudFormation を使用して CloudFront の標準ログ記録 (v2) を有効にするには、以下の CloudWatch Logs プロパティを使用できます。  
[Delivery](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-delivery.html)
[DeliveryDestination](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-deliverydestination.html)
[DeliverySource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-logs-deliverysource.html)
`ResourceArn` は CloudFront ディストリビューションであり、`LogType` は `ACCESS_LOGS` をサポートされているログタイプとする必要があります。

## クロスアカウント配信の標準ログ記録を有効にする
<a name="enable-standard-logging-cross-accounts"></a>

AWS アカウントの標準ログ記録を有効にし、アクセスログを別のアカウントに配信する場合は、送信元アカウントと送信先アカウントを正しく設定します。CloudFront ディストリビューションの*送信元アカウント*は、アクセスログを*送信先アカウント*に送信します。

この手順の例では、送信元アカウント (*111111111111*) がアクセスログを送信先アカウント (*222222222222*) の Amazon S3 バケットに送信します。アクセスログを送信先アカウントの Amazon S3 バケットに送信するには、AWS CLI を使用します。

### 送信先アカウントを設定する
<a name="steps-destination-account"></a>

送信先アカウントの場合は、次の手順を実行します。

**送信先アカウントを設定するには**

1. ログ配信先を作成するには、次の AWS CLI コマンドを入力します。この例では、`MyLogPrefix` 文字列を使用してアクセスログのプレフィックスを作成します。

   ```
   aws logs put-delivery-destination --name cloudfront-delivery-destination --delivery-destination-configuration "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/MyLogPrefix"
   ```

   **出力**:

   ```
   {
       "deliveryDestination": {
           "name": "cloudfront-delivery-destination",
           "arn": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination",
           "deliveryDestinationType": "S3",
           "deliveryDestinationConfiguration": {"destinationResourceArn": "arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/MyLogPrefix"}
       }
   }
   ```
**注記**  
プレフィックス*なし*で S3 バケットを指定すると、CloudFront は `AWSLogs/<account-ID>/CloudFront` をプレフィックスとして自動的に追加します。このプレフィックスは S3 配信先の `suffixPath` に表示されます。詳細については、「[S3DeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_S3DeliveryConfiguration.html)」を参照してください。

1. ログ配信先のリソースポリシーを追加して、送信元アカウントでログ配信を作成できるようにします。

   次のポリシーでは、*111111111111* を送信元アカウント ID に置き換え、ステップ 1 の出力から配信先 ARN を指定します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "AllowCreateDelivery",
               "Effect": "Allow",
               "Principal": {"AWS": "111111111111"},
               "Action": ["logs:CreateDelivery"],
               "Resource": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination"
           }
       ]
   }
   ```

------

1. ファイル (`deliverypolicy.json` など) を保存します。

1. 前のポリシーを配信先にアタッチするには、次の AWS CLI コマンドを入力します。

   ```
   aws logs put-delivery-destination-policy --delivery-destination-name cloudfront-delivery-destination --delivery-destination-policy file://deliverypolicy.json
   ```

1. 次のステートメントを送信先の Amazon S3 バケットポリシーに追加し、リソース ARN と送信元アカウント ID を置き換えます。このポリシーは、`delivery.logs.amazonaws.com` サービスプリンシパルに `s3:PutObject` アクションの実行を許可します。

   ```
   {
       "Sid": "AWSLogsDeliveryWrite",
       "Effect": "Allow",
       "Principal": {"Service": "delivery.logs.amazonaws.com"},
       "Action": "s3:PutObject",
       "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/*",
       "Condition": {
           "StringEquals": {
               "s3:x-amz-acl": "bucket-owner-full-control",
               "aws:SourceAccount": "111111111111"
           },
           "ArnLike": {"aws:SourceArn": "arn:aws:logs:us-east-1:111111111111:delivery-source:*"}
       }
   }
   ```

1. バケットに AWS KMS を使用している場合は、次のステートメントを KMS キーポリシーに追加して、`delivery.logs.amazonaws.com` サービスプリンシパルにアクセス許可を付与します。

   ```
   {
       "Sid": "Allow Logs Delivery to use the key",
       "Effect": "Allow",
       "Principal": {"Service": "delivery.logs.amazonaws.com"},
       "Action": [
           "kms:Encrypt",
           "kms:Decrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey*",
           "kms:DescribeKey"
       ],
       "Resource": "*",
       "Condition": {
           "StringEquals": {"aws:SourceAccount": "111111111111"},
           "ArnLike": {"aws:SourceArn": "arn:aws:logs:us-east-1:111111111111:delivery-source:*"}
       }
   }
   ```

### 送信元アカウントを設定する
<a name="steps-source-account"></a>

送信先アカウントを設定したら、次の手順に従って配信ソースを作成し、送信元アカウントでディストリビューションのログ記録を有効にします。

**送信元アカウントを設定するには**

1. CloudFront 標準ログ記録の配信ソースを作成し、ログファイルを CloudWatch Logs に送信できるようにします。

   次の AWS CLI コマンドを入力できます。名前とディストリビューション ARN は置き換えます。

   ```
   aws logs put-delivery-source --name s3-cf-delivery --resource-arn arn:aws:cloudfront::111111111111:distribution/E1TR1RHV123ABC --log-type ACCESS_LOGS
   ```

   **出力**:

   ```
   {
       "deliverySource": {
           "name": "s3-cf-delivery",
           "arn": "arn:aws:logs:us-east-1:111111111111:delivery-source:s3-cf-delivery",
           "resourceArns": ["arn:aws:cloudfront::111111111111:distribution/E1TR1RHV123ABC"],
           "service": "cloudfront",
           "logType": "ACCESS_LOGS"
       }
   }
   ```

1. 送信元アカウントのログ配信元と送信先アカウントのログ配信先をマッピングする配信を作成します。

   次の AWS CLI コマンドで、[「ステップ 1: 送信先アカウントを設定する」](#steps-destination-account)の出力から配信先 ARN を指定します。

   ```
   aws logs create-delivery --delivery-source-name s3-cf-delivery --delivery-destination-arn arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination
   ```

   **出力**:

   ```
   {
       "delivery": {
           "id": "OPmOpLahVzhx1234",
           "arn": "arn:aws:logs:us-east-1:111111111111:delivery:OPmOpLahVzhx1234",
           "deliverySourceName": "s3-cf-delivery",
           "deliveryDestinationArn": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination",
           "deliveryDestinationType": "S3",
           "recordFields": [
               "date",
               "time",
               "x-edge-location",
               "sc-bytes",
               "c-ip",
               "cs-method",
               "cs(Host)",
               "cs-uri-stem",
               "sc-status",
               "cs(Referer)",
               "cs(User-Agent)",
               "cs-uri-query",
               "cs(Cookie)",
               "x-edge-result-type",
               "x-edge-request-id",
               "x-host-header",
               "cs-protocol",
               "cs-bytes",
               "time-taken",
               "x-forwarded-for",
               "ssl-protocol",
               "ssl-cipher",
               "x-edge-response-result-type",
               "cs-protocol-version",
               "fle-status",
               "fle-encrypted-fields",
               "c-port",
               "time-to-first-byte",
               "x-edge-detailed-result-type",
               "sc-content-type",
               "sc-content-len",
               "sc-range-start",
               "sc-range-end",
               "c-country",
               "cache-behavior-path-pattern"
           ],
           "fieldDelimiter": "\t"
       }
   }
   ```

1. クロスアカウント配信が成功したことを確認します。

   1. *source* アカウントから、CloudFront コンソールにサインインし、ディストリビューションを選択します。**[ログ記録]** タブの **[タイプ]** に、S3 クロスアカウントログ配信用に作成されたエントリが表示されます。

   1. *destination* アカウントから、Amazon S3 コンソールにサインインし、Amazon S3 バケットを選択します。バケット名にプレフィックス `MyLogPrefix` と、そのフォルダに配信されたアクセスログが表示されます。

## 出力ファイル形式
<a name="supported-log-file-format"></a>

選択した配信先に応じて、ログファイルに以下のいずれかの形式を指定できます。
+ JSON
+ Plain
+ w3c
+ Raw
+ Parquet (Amazon S3 のみ）

**注記**  
出力形式を設定できるのは、配信先を初めて作成するときのみです。後で更新することはできません。出力形式を変更するには、配信を削除し、別の配信を作成します。

詳細については、「*Amazon CloudWatch Logs API Reference*」の「[PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html)」を参照してください。

## 標準ログ記録設定を編集する
<a name="standard-logs-v2-edit-settings"></a>

[CloudFront コンソール](https://console.aws.amazon.com/cloudfront/v4/home)または CloudWatch API を使用して、ログ記録を有効または無効にしたり、他のログ設定を更新したりできます。ログ作成設定の変更は 12 時間以内に有効になります。

詳細については、以下の各トピックを参照してください。
+ CloudFront コンソールを使用してディストリビューションを更新するには、「[ディストリビューションを更新する](HowToUpdateDistribution.md)」を参照してください。
+ CloudFront API を使用してディストリビューションを更新するには、「*Amazon CloudFront API Reference*」の「[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)」を参照してください。
+ CloudWatch Logs の API オペレーションの詳細については、「[Amazon CloudWatch Logs API Reference](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.html)」を参照してください。

## アクセスログフィールド
<a name="standard-logging-real-time-log-selection"></a>

標準ログ記録 (レガシー) がサポートしているものと同じログフィールドを選択できます。詳細については、「[ログファイルフィールド](standard-logs-reference.md#BasicDistributionFileFormat)」を参照してください。

さらに、以下の[リアルタイムのアクセスログフィールド](real-time-logs.md#understand-real-time-log-config)を選択できます。

1. `timestamp(ms)` – タイムスタンプ (ミリ秒単位)。

1. `origin-fbl` – CloudFront とオリジン間の先頭バイトのレイテンシーの秒数。

1. `origin-lbl` – CloudFront とオリジン間の最終バイトのレイテンシーの秒数。

1. `asn` – ビューワーの AS 番号 (ASN)。

1. `c-country` – ビューワーの IP アドレスによって決定される、ビューワーの地理的位置を表す国コード。国コードの一覧については、「[ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)」を参照してください。

1. `cache-behavior-path-pattern` – ビューワーリクエストに一致したキャッシュ動作を識別するパスパターン。

## CloudWatch Logs にログを送信する
<a name="send-logs-cloudwatch-logs"></a>

CloudWatch Logs にログを送信するには、CloudWatch Logs ロググループを作成するか、既存のものを使用します。CloudWatch Logs ロググループの設定の詳細については、「[Working with Log Groups and Log Streams](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)」を参照してください。

ロググループを作成したら、標準ログ記録を許可するために必要なアクセス許可が必要です。必要なアクセス許可の詳細については、「*Amazon CloudWatch Logs User Guide*」の「[Logs sent to CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs)」を参照してください。

**注意事項**  
CloudWatch Logs ロググループの名前を指定する場合は、正規表現パターン `[\w-]` のみを使用します。詳細については、「*Amazon CloudWatch Logs API Reference*」の「[PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html#API_PutDeliveryDestination_RequestSyntax)」 API オペレーションを参照してください。
ロググループリソースポリシーがサイズ制限を超えていないことを確認します。CloudWatch Logs トピックの「[Log group resource policy size limit considerations](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-CloudWatchLogs)」セクションを参照してください。

### CloudWatch Logs に送信されたアクセスログの例
<a name="example-access-logs-cwl"></a>

```
{ 
"date": "2024-11-14", 
"time": "21:34:06", 
"x-edge-location": "SOF50-P2", 
"asn": "16509", 
"timestamp(ms)": "1731620046814", 
"origin-fbl": "0.251", 
"origin-lbl": "0.251", 
"x-host-header": "d111111abcdef8.cloudfront.net", 
"cs(Cookie)": "examplecookie=value" 
}
```

## Firehose にログを送信する
<a name="send-logs-kinesis"></a>

Firehose にログを送信するには、Firehose 配信ストリームを作成するか、既存のものを使用します。次に、Firehose 配信ストリームをログ配信先として指定します。米国東部 (バージニア北部) us-east-1 リージョンで Firehose 配信ストリームを指定する必要があります。

配信ストリームの作成の詳細については、「[Creating an Amazon Data Firehose delivery stream](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)」を参照してください。

配信ストリームを作成したら、標準ログ記録を許可するために必要なアクセス許可が必要です。詳細については「*Amazon CloudWatch Logs User Guide*」の「[Logs sent to Firehose](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-Firehose)」を参照してください。

**注記**  
Firehose ストリームの名前を指定する場合は、正規表現パターン `[\w-]` のみを使用します。詳細については、「*Amazon CloudWatch Logs API Reference*」の「[PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html#API_PutDeliveryDestination_RequestSyntax)」 API オペレーションを参照してください。

### Firehose に送信されたアクセスログの例
<a name="example-access-logs-firehose"></a>

```
{"date":"2024-11-15","time":"19:45:51","x-edge-location":"SOF50-P2","asn":"16509","timestamp(ms)":"1731699951183","origin-fbl":"0.254","origin-lbl":"0.254","x-host-header":"d111111abcdef8.cloudfront.net","cs(Cookie)":"examplecookie=value"}
{"date":"2024-11-15","time":"19:45:52","x-edge-location":"SOF50-P2","asn":"16509","timestamp(ms)":"1731699952950","origin-fbl":"0.125","origin-lbl":"0.125","x-host-header":"d111111abcdef8.cloudfront.net","cs(Cookie)":"examplecookie=value"}
```

## Amazon S3 にログを送信する
<a name="send-logs-s3"></a>

Amazon S3 にアクセスログを送信するには、S3 バケットを作成するか、既存のものを使用します。CloudFront でログ記録を有効にする場合は、バケット名を指定します。バケットの作成方法については、「*Amazon Simple Storage Service ユーザーガイド*」の「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。

バケットを作成したら、標準ログ記録を許可するために必要なアクセス許可が必要です。詳細については「*Amazon CloudWatch Logs User Guide*」の「[Logs sent to Amazon S3](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-V2-S3)」を参照してください。
+ ログ記録を有効にすると、必要なバケットポリシーを AWS が自動的に追加します。
+ [オプトイン AWS リージョン](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)で S3 バケットを使用することもできます。

**注記**  
標準ログ記録 (レガシー) を既に有効にしていて、Amazon S3 への標準ログ記録 (v2) を有効にする場合は、*別の* Amazon S3 バケットを指定するか、同じバケット内の*別のパス*を使用する (例: ログプレフィックスやパーティショニングを使用する) ことをお勧めします。これにより、どのログファイルがどのディストリビューションに関連付けられているかを追跡し、ログファイルが互いに上書きされるのを防ぐことができます。

**Topics**
+ [S3 バケットを指定する](#prefix-s3-buckets)
+ [パーティション](#partitioning)
+ [Hive 互換ファイル名形式](#hive-compatible-file-name-format)
+ [アクセスログへのパスの例](#bucket-path-examples)
+ [Amazon S3 に送信されたアクセスログの例](#example-access-logs-s3)

### S3 バケットを指定する
<a name="prefix-s3-buckets"></a>

S3 バケットを配信先として指定する場合は、次の点に注意してください。

S3 バケット名には正規表現パターン `[\w-]` のみを使用できます。詳細については、「*Amazon CloudWatch Logs API Reference*」の「[PutDeliveryDestination](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutDeliveryDestination.html#API_PutDeliveryDestination_RequestSyntax)」 API オペレーションを参照してください。

S3 バケットにプレフィックスを指定している場合、ログはそのパスの下に表示されます。プレフィックスを指定しない場合、CloudFront は自動的に `AWSLogs/{account-id}/CloudFront` プレフィックスを追加します。

詳細については、「[アクセスログへのパスの例](#bucket-path-examples)」を参照してください。

### パーティション
<a name="partitioning"></a>

CloudFront がアクセスログを S3 バケットに送信するときに、パーティショニングを使用してアクセスログを整理できます。これにより、必要なパスに基づいてアクセスログを整理して見つけることができます。

以下の変数を使用してフォルダパスを作成できます。
+ `{DistributionId}`-または-`{distributionid}`
+ `{yyyy}`
+ `{MM}`
+ `{dd}`
+ `{HH}`
+ `{accountid}`

任意の数の変数を使用し、パスにフォルダ名を指定できます。次に、CloudFront はこのパスを使用して S3 バケットにフォルダ構造を自動的に作成します。

**例**
+ `my_distribution_log_data/{DistributionId}/logs`
+ `/cloudfront/{DistributionId}/my_distribution_log_data/{yyyy}/{MM}/{dd}/{HH}/logs `

**注記**  
 サフィックスパスのディストリビューション ID には、いずれかの変数を使用できます。ただし、アクセスログを AWS Glue に送信する場合は、AWS Glue がパーティション名を小文字と想定するため、`{distributionid}` 変数を使用する必要があります。CloudFront の既存のログ設定を更新して、`{DistributionId}` を `{distributionid}` に置き換えます。

### Hive 互換ファイル名形式
<a name="hive-compatible-file-name-format"></a>

このオプションを使用すると、配信されたアクセスログを含む S3 オブジェクトが、Apache Hive との統合を可能にするプレフィックス構造を使用できるようになります。詳細については、[CreateDelivery](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateDelivery.html) API オペレーションを参照してください。

**Example 例**  

```
/cloudfront/DistributionId={DistributionId}/my_distribution_log_data/year={yyyy}/month={MM}/day={dd}/hour={HH}/logs
```

パーティショニングと Hive 互換オプションの詳細については、「*Amazon CloudWatch Logs API Reference*」の「[S3DeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_S3DeliveryConfiguration.html)」要素を参照してください。

### アクセスログへのパスの例
<a name="bucket-path-examples"></a>

S3 バケットを送信先として指定する場合、以下のオプションを使用してアクセスログへのパスを作成できます。
+ Amazon S3 バケット (プレフィックス付き、またはプレフィックスなし)
+ パーティショニング (CloudFront が提供する変数を使用するか、独自の変数を入力)
+ Hive 互換オプションの有効化

以下の表は、選択したオプションに応じて、アクセスログがバケット内でどのように表示されるかを示しています。

#### Amazon S3 バケット (プレフィックス付き)
<a name="bucket-with-prefix"></a>


| Amazon S3 バケット名 | サフィックスパスで指定したパーティション | サフィックスパスの更新 | Hive 互換の有効化? | アクセスログの送信先 | 
| --- | --- | --- | --- | --- | 
| amzn-s3-demo-bucket/MyLogPrefix | なし | なし | いいえ | amzn-s3-demo-bucket/MyLogPrefix/ | 
| amzn-s3-demo-bucket/MyLogPrefix | myFolderA/ | myFolderA/ | なし | amzn-s3-demo-bucket/MyLogPrefix/myFolderA/ | 
| amzn-s3-demo-bucket/MyLogPrefix | myFolderA/\$1yyyy\$1 | myFolderA/\$1yyyy\$1 | はい | amzn-s3-demo-bucket/MyLogPrefix/myFolderA/year=2025 | 

#### Amazon S3 バケット (プレフィックスなし)
<a name="bucket-without-prefix"></a>


| Amazon S3 バケット名 | サフィックスパスで指定したパーティション | サフィックスパスの更新 | Hive 互換の有効化? | アクセスログの送信先 | 
| --- | --- | --- | --- | --- | 
| amzn-s3-demo-bucket | なし | AWSLogs/\$1account-id\$1/CloudFront/ | いいえ | amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/ | 
| amzn-s3-demo-bucket | myFolderA/ | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/ | なし | amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/myFolderA/ | 
| amzn-s3-demo-bucket | myFolderA/ | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/ | はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/ | 
| amzn-s3-demo-bucket | myFolderA/\$1yyyy\$1 | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/\$1yyyy\$1 | はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/year=2025 | 

#### パーティションとしての AWS アカウント ID
<a name="bucket-account-id-partition"></a>


| Amazon S3 バケット名 | サフィックスパスで指定したパーティション | サフィックスパスの更新 | Hive 互換の有効化? | アクセスログの送信先 | 
| --- | --- | --- | --- | --- | 
| amzn-s3-demo-bucket | なし | AWSLogs/\$1account-id\$1/CloudFront/ | はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/ | 
| amzn-s3-demo-bucket | myFolderA/\$1accountid\$1 | AWSLogs/\$1account-id\$1/CloudFront/myFolderA/\$1accountid\$1 | はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/accountid=<your-account-ID> | 

**注意事項**  
`{account-id}` 変数は CloudFront 用に予約されています。Amazon S3 バケットをプレフィックス*なし*で指定すると、CloudFront はこの変数をサフィックスパスに自動的に追加します。ログが Hive 互換である場合、この変数は `aws-account-id` として表示されます。
`{accountid}` 変数を使用すると、CloudFront がアカウント ID をサフィックスパスに追加できます。ログが Hive 互換である場合、この変数は `accountid` として表示されます。
サフィックスパスの詳細については、「[S3DeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_S3DeliveryConfiguration.html)」を参照してください。

### Amazon S3 に送信されたアクセスログの例
<a name="example-access-logs-s3"></a>

```
#Fields: date time x-edge-location asn timestamp(ms) x-host-header cs(Cookie)
2024-11-14    22:30:25    SOF50-P2    16509    1731623425421    
d111111abcdef8.cloudfront.net    examplecookie=value2
```

## 標準ログ記録を無効にする
<a name="delete-standard-log-destination"></a>

不要になった場合は、ディストリビューションの標準ログ記録を無効にすることができます。

**標準ログ記録を無効にするには**

1. CloudFront コンソールにサインインします。

1. **[ディストリビューション]** を選択し、ディストリビューション ID を選択します。

1. **[ログ記録]** を選択し、**[アクセスログ送信先]** で送信先を選択します。

1. **[管理]**、**[削除]** の順に選択します。

1. 複数の標準ログ記録がある場合は、前のステップを繰り返します。

**注記**  
CloudFront コンソールから標準ログ記録を削除すると、このアクションは配信と配信先のみを削除します。配信ソースは AWS アカウントから削除されません。配信ソースを削除するには、`aws logs delete-delivery-source --name DeliverySourceName` コマンドで配信ソース名を指定します。詳細については、「*Amazon CloudWatch Logs API Reference*」の「[DeleteDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteDeliverySource.html)」を参照してください。

## トラブルシューティング
<a name="troubleshooting-access-logs-v2"></a>

CloudFront 標準ログ記録 (v2) を使用する際の一般的な問題を修正するには、次の情報を使用します。

### 配信ソースが既に存在している
<a name="access-logging-resource-already-used"></a>

ディストリビューションの標準ログ記録を有効にすると、配信ソースが作成されます。次に、この配信ソースを使用して、必要な送信先タイプ (CloudWatch Logs、Firehose、Amazon S3) への配信を作成します。現在、配信ソースはディストリビューションごとに 1 つだけ持つことができます。同じディストリビューションに対して別の配信ソースを作成しようとすると、次のエラーメッセージが表示されます。

```
This ResourceId has already been used in another Delivery Source in this account
```

別の配信ソースを作成するには、まず既存のものを削除します。詳細については、「*Amazon CloudWatch Logs API Reference*」の「[DeleteDeliverySource](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteDeliverySource.html)」を参照してください。

### サフィックスパスを変更したら、Amazon S3 バケットがログを受信できなくなった
<a name="access-logging-s3-permission"></a>

標準ログ記録 (v2) を有効にし、プレフィックスなしでバケット ARN を指定すると、CloudFront はサフィックスパスに以下のデフォルトを追加します。`AWSLogs/{account-id}/CloudFront`。CloudFront コンソールまたは [UpdateDeliveryConfiguration](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_UpdateDeliveryConfiguration.html) API オペレーションを使用して別のサフィックスパスを指定する場合は、同じパスを使用するように Amazon S3 バケットポリシーを更新する必要があります。

**Example 例: サフィックスパスの更新**  

1. デフォルトのサフィックスパスは `AWSLogs/{account-id}/CloudFront` で、`myFolderA` に置き換えます。

1. 新しいサフィックスパスは Amazon S3 バケットポリシーで指定されたパスとは異なるため、アクセスログは配信されません。

1. 次のいずれかの手順を実行します。
   + Amazon S3 バケットのアクセス許可を `amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/*` から `amzn-s3-demo-bucket/myFolderA/*` に更新します。
   + ログ記録設定を更新して、デフォルトのサフィックス (`AWSLogs/{account-id}/CloudFront`) を再度使用します。
詳細については、「[アクセス許可](#permissions-standard-logging)」を参照してください。

## ログファイルを削除する
<a name="standard-logs-v2-delete"></a>

CloudFront は、送信先からログファイルを自動的には削除しません。ログファイルの削除方法については、以下のトピックを参照してください。

**Amazon S3**
+ 「*Amazon Simple Storage Service Console ユーザーガイド*」の「[オブジェクトの削除](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjects.html)」

**CloudWatch Logs**
+ 「*Amazon CloudWatch Logs User Guide*」の「[Working with log groups and log streams](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)」
+ 「*Amazon CloudWatch Logs API Reference*」の「[DeleteLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_DeleteLogGroup.html)」

**Firehose**
+ 「*Amazon Data Firehose API Reference*」の「[DeleteDeliveryStream](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeleteDeliveryStream.html)」

## 料金
<a name="pricing-standard-logs"></a>

CloudFront では、標準ログの有効化には料金がかかりません。ただし、選択したログ配信先によっては、配信、取り込み、ストレージ、またはアクセスに対して料金が発生する場合があります。詳細については、「[Amazon CloudWatch Logs 料金表](https://aws.amazon.com/cloudwatch/pricing/)」を参照してください。**[有料利用枠]** で **[ログ]** タブを選択し、次に **[Vended Logs]** で各配信先に関する情報を確認します。

各 AWS のサービスの料金の詳細については、以下のトピックを参照してください。
+ [Amazon CloudWatch Logs 料金](https://aws.amazon.com/cloudwatch/pricing/)
+ [Amazon Data Firehose 料金](https://aws.amazon.com/kinesis/data-firehose/pricing/)
+ [Amazon S3 料金](https://aws.amazon.com/s3/pricing/) 
**注記**  
Amazon S3 へのログ配信に追加料金はかかりませんが、ログファイルの保存とアクセスには Amazon S3 料金が発生します。**[Parquet]** オプションを有効にしてアクセスログを Apache Parquet に変換すると、このオプションには CloudWatch 料金が発生します。詳細については、[「CloudWatch 料金表」の「Vended Logs」セクション](https://aws.amazon.com/cloudwatch/pricing/)を参照してください。

# 標準ログ記録 (レガシー) を設定する
<a name="standard-logging-legacy-s3"></a>

**注意事項**  
このトピックでは、以前のバージョンの標準ログ記録について説明します。最新バージョンについては、「[標準ログ記録 (v2) を設定する](standard-logging.md)」を参照してください。
標準ログ記録 (レガシー) を既に有効にしていて、Amazon S3 への標準ログ記録 (v2) を有効にする場合は、*別の* Amazon S3 バケットを指定するか、同じバケット内の*別のパス*を使用する (例: ログプレフィックスやパーティショニングを使用する) ことをお勧めします。これにより、どのログファイルがどのディストリビューションに関連付けられているかを追跡し、ログファイルが互いに上書きされるのを防ぐことができます。

標準ログ記録 (レガシー) を開始するには、次の手順を実行します。

1. ログを受信する Amazon S3 バケットを選択し、必要なアクセス許可を追加します。

1. CloudFront コンソールまたは CloudFront API を使用して標準ログ記録 (レガシー) を設定します。ログの受信先として Amazon S3 バケットのみを選択できます。

1. アクセスログを表示します。

## 標準ログ用の Amazon S3 バケットを選択する
<a name="access-logs-choosing-s3-bucket"></a>

ディストリビューションのログ記録を有効にする際には、CloudFront でログファイルを保存する Amazon S3 バケットを指定します。オリジンとして Amazon S3 を使用する場合は、ログファイル用に別のバケットを使用することをお勧めします。**

CloudFront でアクセスログを保存する先の Amazon S3 バケット (例: `amzn-s3-demo-bucket.s3.amazonaws.com`) を指定します。

複数のディストリビューションのログファイルを同じバケットに保存することもできます。ログ記録を有効にする際には、ファイル名のプレフィックスをオプションで指定できます。これにより、どのログファイルがどのディストリビューションに関連しているか追跡できます。

**S3 バケットの選択について**  
バケットでは、アクセスコントロールリスト (ACL) が有効になっている必要があります。CloudFront コンソールで ACL を有効にしていないバケットを選択すると、エラーメッセージが表示されます。「[アクセス許可](#AccessLogsBucketAndFileOwnership)」を参照してください。
**強制を行ったバケット所有者**に設定される [S3 オブジェクトの所有権](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)を使用して Amazon S3 バケットを選択してはいけません。この設定では、バケットとその中のオブジェクトの ACL が無効になり、CloudFront によるバケットへのログファイルの配信を阻止します。[標準ログ記録 V2](standard-logging.md)[AWS リージョン](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html)

## アクセス許可
<a name="AccessLogsBucketAndFileOwnership"></a>

**重要**  
2023 年 4 月以降、CloudFront 標準ログで使用する新しい S3 バケットでは S3 の ACL を有効にする必要があります。ACL は、[バケットを作成する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-new-bucket.html)ときに有効にするか、[既存のバケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-existing-bucket.html)に対して有効にすることができます。  
変更の詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[新しい S3 バケットのデフォルト設定に関するよくある質問](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-faq.html)」と、「*AWS ニュースブログ*」の「[注意喚起: 2023 年 4 月に予定されている Amazon S3 のセキュリティ変更](https://aws.amazon.com/blogs/aws/heads-up-amazon-s3-security-changes-are-coming-in-april-of-2023/)」を参照してください。

AWS アカウントには、ログファイル用に指定するバケットに対して以下のアクセス許可が必要です。
+ バケットの ACL は `FULL_CONTROL` をユーザーに付与する必要があります バケット所有者のアカウントには、デフォルトでこのアクセス許可があります。権限がない場合、バケット所有者はバケットの ACL を更新する必要があります。
+ `s3:GetBucketAcl`
+ `s3:PutBucketAcl`

**バケットの ACL**  
ディストリビューションを作成または更新してロギングを有効にすると、CloudFront はこれらのアクセス許可を使用してバケットの ACL を更新し、`awslogsdelivery` アカウントに `FULL_CONTROL` のアクセス許可を付与します。`awslogsdelivery` アカウントはログファイルをバケットに書き込みます。アカウントに ACL を更新するために必要なアクセス許可がない場合、ディストリビューションの作成または更新は失敗します。  
状況によっては、バケットを作成するリクエストをプログラムで送信したが、指定した名前のバケットが既に存在する場合、S3 ではバケットのアクセス許可をデフォルト値にリセットします。アクセスログを S3 バケットに保存するように CloudFront を設定した後で、そのバケットでのログ受信を中止する場合は、バケットのアクセス許可をチェックして CloudFront に必要なアクセス許可があることを確認します。

**バケットの ACL を復元する**  
`awslogsdelivery` アカウントのアクセス許可を削除すると、CloudFront はログを S3 バケットに保存できません。CloudFront がディストリビューションのログ保存を再開するには、次のいずれかの操作を行って ACL アクセス許可を復元します。  
+ CloudFront ディストリビューションのログ記録を無効化してから、再度有効にします。詳細については、「[標準ログ記録](DownloadDistValuesGeneral.md#DownloadDistValuesLoggingOnOff)」を参照してください。
+ Amazon S3 コンソールで S3 バケットに移動してアクセス許可を追加することで、`awslogsdelivery` の ACL アクセス許可を手動で追加します。`awslogsdelivery` の ACL を追加するには、アカウントの正規 ID を入力する必要があります。これは次のとおりです。

  `c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0`

  

  ACL を S3 バケットに追加する方法の詳細については、「Amazon Simple Storage Service コンソールユーザーガイド」の「[ACL の設定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)」を参照してください。**

**各ログファイルの ACL**  
バケットの ACL に加えて、各ログファイルの ACL があります。バケット所有者にはログファイルに対する `FULL_CONTROL` アクセス許可があり、ディストリビューション所有者 (バケット所有者と異なる場合) にはアクセス許可がありません。`awslogsdelivery` アカウントには読み取りアクセス許可と書き込みアクセス許可があります。

**ログ記録の無効化**  
ログ記録を無効にしても、CloudFront ではバケットやログファイルの ACL が削除されません。ACL は、必要に応じて削除できます。

### SSE-KMS バケット必須のキーポリシー
<a name="AccessLogsKMSPermissions"></a>

標準ログ用の S3 バケットで、カスタマーマネージド型キーを使用する AWS KMS keys (SSE-KMS) を用いたサーバー側の暗号化が使用されている場合は、カスタマーマネージド型キーのキーポリシーに次のステートメントを追加する必要があります。これにより、CloudFront はログファイルをバケットに書き込むことができます。AWS マネージドキー で SSE-KMS を使用することはできません (CloudFront はログファイルをバケットに書き込むことができないため)。

```
{
    "Sid": "Allow CloudFront to use the key to deliver logs",
    "Effect": "Allow",
    "Principal": {
        "Service": "delivery.logs.amazonaws.com"
    },
    "Action": "kms:GenerateDataKey*",
    "Resource": "*"
}
```

標準ログの S3 バケットで [S3 バケットキー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)を有する SSE-KMS を使用する場合は、ポリシーステートメントに `kms:Decrypt` 許可を追加する必要もあります。この場合、完全なポリシーステートメントは次のようになります。

```
{
    "Sid": "Allow CloudFront to use the key to deliver logs",
    "Effect": "Allow",
    "Principal": {
        "Service": "delivery.logs.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt"
    ],
    "Resource": "*"
}
```

**注記**  
S3 バケットで SSE-KMS を有効にするときは、カスタマーマネージドキーの完全な ARN を指定します。詳細については、「*Amazon Simple Storage Service ユーザーガイド*」の「[AWS KMS keys (SSE-KMS) によるサーバー側の暗号化の指定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)」を参照してください。

## 標準ログ記録 (レガシー) を有効にする
<a name="standard-logs-legacy-enable"></a>

標準ログを有効にするには、CloudFront コンソールまたは CloudFront API を使用します。

**Contents**
+ [標準ログ記録 (レガシー) を有効にする (CloudFront コンソール）](#standard-logs-legacy-enable-console)
+ [標準ログ記録 (レガシー) を有効にする (CloudFront API)](#standard-logs-legacy-enable-api)

### 標準ログ記録 (レガシー) を有効にする (CloudFront コンソール）
<a name="standard-logs-legacy-enable-console"></a>

**CloudFront ディストリビューションの標準ログを有効にするには (コンソール）**

1. CloudFront コンソールを使用して、[新しいディストリビューションを作成](distribution-web-creating-console.md)するか、[既存のディストリビューションを更新](HowToUpdateDistribution.md#HowToUpdateDistributionProcedure)します。

1. **[標準ログ記録]** セクションの **[ログ配信]** で、**[オン]** を選択します。

1. (オプション) **[cookie ログ記録]** で、ログに cookie を含める場合は **[オン]** を選択します。詳細については、「[cookie のログ作成](DownloadDistValuesGeneral.md#DownloadDistValuesCookieLogging)」を参照してください。
**ヒント**  
cookie ログ記録は、ディストリビューションの*すべて*の標準ログに適用されるグローバル設定です。この設定を個別の配信先で上書きすることはできません。

1. **[配信先]** セクションで、**[Amazon S3 (レガシー)]** を指定します。

1. Amazon S3 バケットを指定します。バケットがまだない場合は、**[作成]** を選択するか、ドキュメントを参照して[バケットを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)できます。

1. (オプション) **[ログプレフィックス]** で、このディストリビューションのアクセスログファイル名の先頭に CloudFront で追加する文字列 (ある場合) を指定します (例: `exampleprefix/`)。末尾のスラッシュ (/) はオプションですが、ログファイルの参照を容易にするためにこれを使用することをお勧めします。詳細については、「[ログのプレフィックス](DownloadDistValuesGeneral.md#DownloadDistValuesLogPrefix)」を参照してください。

1. ディストリビューションを更新または作成する手順を完了します。

1. **[ログ]** ページで、標準ログのステータスが、ディストリビューションの横で **[有効]** になっていることを確認します。

   標準ログ記録の配信とログフィールドの詳細については、「[標準ログ記録リファレンス](standard-logs-reference.md)」を参照してください。

### 標準ログ記録 (レガシー) を有効にする (CloudFront API)
<a name="standard-logs-legacy-enable-api"></a>

CloudFront API を使用して、ディストリビューションの標準ログを有効にすることもできます。

**ディストリビューションの標準ログを有効にするには (CloudFront API)**
+ [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) または [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) API オペレーションを使用して、[LoggingConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_LoggingConfig.html) オブジェクトを設定します。

## 標準ログ記録設定を編集する
<a name="ChangeSettings"></a>

ログ記録の有効化および無効化、ログを保存する Amazon S3 バケットの変更、ログファイルのプレフィックスの変更は、[CloudFront コンソール](https://console.aws.amazon.com/cloudfront/v4/home)または CloudFront API を使用して行うことができます。ログ作成設定の変更は 12 時間以内に有効になります。

詳細については、以下のトピックを参照してください。
+ CloudFront コンソールを使用してディストリビューションを更新するには、「[ディストリビューションを更新する](HowToUpdateDistribution.md)」を参照してください。
+ CloudFront API を使用してディストリビューションを更新する方法については、*Amazon CloudFront API リファレンス*の「[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)」を参照してください。

## ログを Amazon S3 に送信する
<a name="standard-logs-in-s3"></a>

ログを Amazon S3 に送信すると、ログは次の形式で表示されます。

### ファイル名の形式
<a name="AccessLogsFileNaming"></a>

CloudFront が Amazon S3 バケットに保存する各ログファイルの名前には、次のファイル名形式が使用されます。

`<optional prefix>/<distribution ID>.YYYY-MM-DD-HH.unique-ID.gz`

日付と時刻は協定世界時 (UTC) です。

たとえば、`example-prefix` をプレフィックスとして使用している場合に、ディストリビューション ID が `EMLARXS9EXAMPLE` であれば、ファイル名は次のようになります。

`example-prefix/EMLARXS9EXAMPLE.2019-11-14-20.RT4KCN4SGK9.gz`

ディストリビューションのログ記録を有効にする際には、ファイル名のプレフィックスをオプションで指定できます。これにより、どのログファイルがどのディストリビューションに関連しているか追跡できます。ログファイルのプレフィックスの値を指定した場合、プレフィックスがスラッシュ (`/`) で終わらない場合は、CloudFront によって自動的に追加されます。プレフィックスがスラッシュで終わる場合、CloudFront はスラッシュを追加しません。

ファイル名の末尾にある `.gz` は、CloudFront によってログファイルが gzip で圧縮されたことを示しています。

## 標準ログファイル形式
<a name="LogFileFormat"></a>

ログファイルには、1 つのビューワーリクエストの詳細が 1 エントリとして記録されます。ログファイルの特性は次のとおりです。
+ [W3C 拡張ログファイル形式](https://www.w3.org/TR/WD-logfile.html)を使用します。
+ タブ区切りの値が含まれます。
+ レコードが必ずしも時系列順に含まれているとは限りません。
+ 2 つのヘッダー行が含まれます。1 つのヘッダー行にファイル形式のバージョンが示され、もう 1 つのヘッダー行に、各レコードに含まれる W3C フィールドが示されます。
+ フィールド値に URL エンコードされたスペースおよび特定の他の文字を含めます。

  URL エンコードされた同等の文字は、次の文字に使用されます。
  + ASCII 文字コード 0～32 以内
  + ASCII 文字コード 127 以上
  + 次の表のすべての文字

  URL エンコーディング標準は [RFC 1738](https://tools.ietf.org/html/rfc1738.html) で定義されています。


|  URL エンコードされた値  |  文字  | 
| --- | --- | 
|  %3C  |  <  | 
|  %3E  |  >  | 
|  %22  |  "  | 
|  %23  |  \$1  | 
|  %25  |  %  | 
|  %7B  |  \$1  | 
|  %7D  |  \$1  | 
|  %7C  |  \$1  | 
|  %5C  |  \$1  | 
|  %5E  |  ^  | 
|  %7E  |  \$1  | 
|  %5B  |  [  | 
|  %5D  |  ]  | 
|  %60  |  `  | 
|  %27  |  '  | 
|  %20  |  スペース  | 

## ログファイルを削除する
<a name="DeletingLogFiles"></a>

CloudFront は、Amazon S3 バケットからログファイルを自動的には削除しません。Amazon S3 バケットからログファイルを削除する方法については、「*Amazon Simple Storage Service コンソールユーザーガイド*」の「[オブジェクトの削除](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjects.html)」を参照してください。

## 料金
<a name="AccessLogsCharges"></a>

標準ログ記録は、CloudFront のオプション機能です。CloudFront では、標準ログの有効化には料金がかかりません。ただし、Amazon S3 でのファイルの保存とアクセスには通常の Amazon S3 料金が発生します。ファイルはいつでも削除できます。

Amazon S3 の料金に関する詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

CloudFront の料金の詳細については、「[CloudFront の料金](https://aws.amazon.com/cloudfront/pricing/)」を参照してください。

# 標準ログ記録リファレンス
<a name="standard-logs-reference"></a>

以下のセクションは、標準ログ記録 (v2) と標準ログ記録 (レガシー) の両方に該当します。

**Topics**
+ [ログファイル配信のタイミング](#access-logs-timing)
+ [リクエスト URL またはヘッダーが最大のサイズを超えた場合にリクエストがどのようにログに記録されるか](#access-logs-request-URL-size)
+ [ログファイルのフィールド](#BasicDistributionFileFormat)
+ [ログを分析する](#access-logs-analyzing)

## ログファイル配信のタイミング
<a name="access-logs-timing"></a>

CloudFront は、ディストリビューションのログを 1 時間に最大で数回配信します。一般的に、ログファイルには、一定期間内に CloudFront が受信したリクエストに関する情報が含まれています。CloudFront は通常、その期間のログファイルを、ログにイベントが表示されてから 1 時間以内に送信先に配信します。ただし、ある期間のログファイルエントリの一部またはすべてが、最大で 24 時間遅れることもあります。ログエントリが遅れた場合、CloudFront はこれらをログファイルに保存します。ファイル名には、ファイルの配信日時ではなく、リクエストが*発生した*期間の日時が使用されます。

CloudFront は、ログファイルを作成する場合、ログファイルに対応する期間中にオブジェクトについてリクエストを受信したすべてのエッジロケーションから、ディストリビューションの情報を集約します。

CloudFront は、ディストリビューションに関連付けられているオブジェクトについて CloudFront が受信したリクエストの数により、1 つの期間に対して複数のファイルを保存することもできます。

CloudFront によるアクセスログの出力が確実に行われるのは、ログ記録が有効になって約 4 時間後からです。この時間以前にも少しのアクセスログを取得できる場合もあります。

**注記**  
期間中にオブジェクトに対してユーザーによるリクエストがなければ、その期間のログファイルは配信されません。

## リクエスト URL またはヘッダーが最大のサイズを超えた場合にリクエストがどのようにログに記録されるか
<a name="access-logs-request-URL-size"></a>

クッキーを含むすべてのリクエストヘッダーの合計サイズが 20 KB を超える場合、または URL が 8192 バイトの URL サイズ制限を超える場合、CloudFront ではリクエストを完全に解析できないため、リクエストをログに記録できません。リクエストがログ記録されないため、返された HTTP エラーステータスコードをログファイルで表示できません。

リクエストボディが最大サイズを超えると、HTTP エラー状態コードを含むリクエストがログに記録されます。

## ログファイルのフィールド
<a name="BasicDistributionFileFormat"></a>

ディストリビューションのログファイルには、33 のフィールドが含まれています。次のリストは、各フィールド名と、そのフィールドに保持される情報の説明を順番に示しています。

1. **`date`**

   イベントが発生した日付。`YYYY-MM-DD` 形式です。例えば、`2019-06-30`。日付と時刻は協定世界時 (UTC) です。WebSocket 接続の場合、これは接続が閉じた日付です。

1. **`time`**

   CloudFront サーバーがリクエストへの対応を完了した時刻 (UTC) (`01:42:39` など)。WebSocket 接続の場合、これは接続を閉じる時間です。

1. **`x-edge-location`**

   リクエストを処理したエッジロケーション。各エッジロケーションは、3 文字コードと、割り当てられた任意の数字で識別されます (例: DFW3)。通常、この 3 文字コードは、エッジロケーションの地理的場所の近くにある空港の、国際航空運送協会 (IATA) の空港コードに対応します。(これらの略語は今後変更される可能性があります)。

1. **`sc-bytes`**

   サーバーがリクエストに応じてビューワーに送信したデータ (ヘッダーを含む) のバイトの合計数。WebSocket および gRPC 接続の場合、これは接続を経由してサーバーからクライアントに送信した合計バイト数です。

1. **`c-ip`**

   リクエスト元のビューワーの IP アドレス (`192.0.2.183` または `2001:0db8:85a3::8a2e:0370:7334` など)。ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送った場合、このフィールドの値はプロキシまたはロードバランサーの IP アドレスです。`x-forwarded-for` フィールドも参照してください。

1. **`cs-method`**

   ビューワーから受信した HTTP リクエストメソッド。

1. **`cs(Host)`**

   CloudFront ディストリビューションのドメイン名 (d111111abcdef8.cloudfront.net など)。

1. **`cs-uri-stem`**

   パスとオブジェクトを識別するリクエスト URL の部分 (`/images/cat.jpg` など)。URL 内の疑問符 (?) およびクエリ文字列はログに含まれません。

1. **`sc-status`**

   次のいずれかの値が含まれます。
   + サーバーのレスポンスの HTTP ステータスコード (例: `200`)。
   + `000`。この値は、サーバーがリクエストに応答する前に、ビューワーが接続を閉じたことを示します。サーバーがレスポンスの送信を開始した後にビューワーが接続を閉じた場合、このフィールドには、サーバーが送信を開始したレスポンスの HTTP ステータスコードが含まれます。

1. **`cs(Referer)`**

   リクエスト内の `Referer` ヘッダーの値。これはリクエスト元のドメインの名前です。一般的なリファラーとして、検索エンジン、オブジェクトに直接リンクされた他のウェブサイト、ユーザー自身のウェブサイトなどがあります。

1. **`cs(User-Agent)`**

   リクエスト内の `User-Agent` ヘッダーの値。`User-Agent` ヘッダーでリクエスト元 (リクエスト元のデバイスとブラウザのタイプなど) が識別されます。リクエスト元が検索エンジンの場合は、どの検索エンジンかも識別されます。

1. **`cs-uri-query`**

   リクエスト URL のクエリ文字列の部分 (ある場合)。

   URL にクエリ文字列が含まれない場合、このフィールドの値はハイフン (-) です。詳細については、「[クエリ文字列パラメータに基づいてコンテンツをキャッシュする](QueryStringParameters.md)」を参照してください。

1. **`cs(Cookie)`**

   名前と値のペアおよび関連属性を含む、リクエスト内の `Cookie` ヘッダー。

   Cookie のログ作成を有効にした場合は、どの Cookie についてオリジンの転送を指定したかに関係なく、CloudFront ではすべてのリクエスト内の Cookie がログに記録されます。リクエストに Cookie ヘッダーが含まれていない場合、このフィールドの値はハイフン (-) です。Cookie の詳細については、「[Cookie に基づいてコンテンツをキャッシュする](Cookies.md)」を参照してください。

1. **`x-edge-result-type`**

   サーバーが、最後のバイトを渡した後で、レスポンスを分類した方法。場合によっては、サーバーがレスポンスを送る準備ができたときから、サーバーがレスポンスを送り終わるまでの間に、結果タイプが変わることがあります。`x-edge-response-result-type` フィールドも参照してください。

   例えば、HTTP ストリーミングで、サーバーがキャッシュ内でストリームのセグメントを検出するとします。そのシナリオでは、このフィールドの値は、通常 `Hit` になります。この場合、サーバーがセグメント全体を配信する前にビューワーが接続を閉じると、最終結果タイプ (およびこのフィールドの値) は `Error` になります。

   WebSocket および gRPC 接続の場合、コンテンツがキャッシュ可能ではなく、オリジンに直接プロキシされるため、このフィールドの値は `Miss` になります。

   以下に示しているのは、可能な値です。
   + `Hit` – サーバーがキャッシュからビューワーにオブジェクトを渡しました。
   + `RefreshHit` – サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。
   + `Miss` – キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンに転送して結果をビューワーに返しました。
   + `LimitExceeded` – CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。
   + `CapacityExceeded` – リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから HTTP 503 ステータスコードが返されました。
   + `Error` – 通常、これはリクエストがクライアントエラーとなった (`sc-status` フィールドが `4xx` 範囲内の値となる)、またはサーバーエラーになった (`sc-status` フィールドが `5xx` 範囲内の値となる) ことを意味します。`sc-status` フィールドの値が `200` であるか、このフィールドの値が `Error` で、`x-edge-response-result-type` フィールドの値が `Error` でない場合は、HTTP リクエストは成功したが、クライアントがすべてのバイトを受信する前に切断されたことを意味します。
   + `Redirect` – サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
   + `LambdaExecutionError` – ディストリビューションに関連付けられた Lambda@Edge 関数は、不正な関連付け、関数のタイムアウト、‭AWS の依存関係の問題、または別の一般的な可用性の問題が原因で完了しませんでした。

1. **`x-edge-request-id`**

   リクエストを一意に識別する不透明な文字列。CloudFront では、この文字列を `x-amz-cf-id` レスポンスヘッダーでも送信します。

1. **`x-host-header`**

   ビューワーが、このリクエストの `Host` ヘッダーに追加した値。オブジェクトの URL に CloudFront ドメイン名を使用している場合 (d111111abcdef8.cloudfront.net など)、このフィールドにはそのドメイン名が含まれます。代替ドメイン名 (CNAME) をオブジェクト URL (www.example.com) に使用している場合、このフィールドにはその代替ドメイン名が含まれます。

   代替ドメイン名を使っている場合には、フィールド 7 の `cs(Host)` で、ユーザーのディストリビューションに関連するドメイン名を確認します。

1. **`cs-protocol`**

   ビューワーリクエストのプロトコル (`http`、`https`、`grpcs`、`ws`、または `wss`)。

1. **`cs-bytes`**

   ビューワーがリクエストに含めたデータ (ヘッダーを含む) のバイトの合計数。WebSocket および gRPC 接続の場合、これは接続を経由してクライアントからサーバーに送信した合計バイト数です。

1. **`time-taken`**

   サーバーが、ビューワーのリクエストを受信してからレスポンスの最後のバイトを出力キューに書き込むまでの秒数。サーバーで 1,000 分の 1 秒単位まで測定されます (例: 0.082)。ビューワーから見た場合、レスポンス全体を取得する合計所要時間は、ネットワークのレイテンシーと TCP バッファリングにより、この値よりも長くなります。

1. **`x-forwarded-for`**

   ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送信した場合、`c-ip` フィールドの値はプロキシまたはロードバランサーの IP アドレスです。この場合、このフィールドはリクエスト元のビューワーの IP アドレスです。このフィールドには、複数の IP アドレスをカンマで区切って含めることができます。各 IP アドレスは、IPv4 アドレス (`192.0.2.183` など) または IPv6 アドレス (`2001:0db8:85a3::8a2e:0370:7334` など) にすることができます。

   ビューワーが HTTP プロキシまたはロードバランサーを使用しなかった場合、このフィールドの値はハイフン (-) です。

1. **`ssl-protocol`**

   リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを送信するためにビューワーとサーバーがネゴシエートした SSL/TLS プロトコルが含まれます。指定可能な値のリストについては、[ビューワーと CloudFront との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md) でサポートされている SSL/TLS プロトコルを参照してください。

   フィールド 17 の `cs-protocol` が `http` である場合、このフィールドの値はハイフン (-) です。

1. **`ssl-cipher`**

   リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを暗号化するためにビューワーとサーバーがネゴシエートした SSL/TLS 暗号が含まれます。使用できる値のリストについては、「[ビューワーと CloudFront との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md)」で、サポートされている SSL/TLS 暗号化を参照してください。

   フィールド 17 の `cs-protocol` が `http` である場合、このフィールドの値はハイフン (-) です。

1. **`x-edge-response-result-type`**

   ビューワーにレスポンスを返す直前にサーバーがレスポンスを分類した方法。`x-edge-result-type` フィールドも参照してください。以下に示しているのは、可能な値です。
   + `Hit` – サーバーがキャッシュからビューワーにオブジェクトを渡しました。
   + `RefreshHit` – サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。
   + `Miss` – キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンサーバーに転送して結果をビューワーに返しました。
   + `LimitExceeded` – CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。
   + `CapacityExceeded` – リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから 503 エラーが返されました。
   + `Error` – 通常、これはリクエストがクライアントエラーとなった (`sc-status` フィールドが `4xx` 範囲内の値となる)、またはサーバーエラーになった (`sc-status` フィールドが `5xx` 範囲内の値となる) ことを意味します。

     `x-edge-result-type` フィールドの値が `Error` であり、このフィールドの値が `Error` でない場合、ダウンロードが完了する前にクライアントが切断されました。
   + `Redirect` – サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
   + `LambdaExecutionError` – ディストリビューションに関連付けられた Lambda@Edge 関数は、不正な関連付け、関数のタイムアウト、‭AWS の依存関係の問題、または別の一般的な可用性の問題が原因で完了しませんでした。

1. **`cs-protocol-version`**

   ビューワーがリクエストで指定した HTTP バージョン。指定できる値には、`HTTP/0.9`、`HTTP/1.0`、`HTTP/1.1`、`HTTP/2.0`および `HTTP/3.0` などがあります。

1. **`fle-status`**

   [フィールドレベル暗号化](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)がディストリビューション用に設定されている場合、このフィールドにはリクエストボディが正常に処理されたかどうかを示すコードが含まれます。サーバーがリクエストボディを正常に処理し、指定したフィールドの値を暗号化してリクエストをオリジンに転送すると、このフィールドの値は `Processed` になります。`x-edge-result-type` の値は、この場合でもクライアント側またはサーバー側のエラーを示すことができます。

   このフィールドで使用できる値は次のとおりです。
   + `ForwardedByContentType` – コンテンツタイプが設定されていないため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `ForwardedByQueryArgs` – フィールドレベル暗号化の設定にないクエリ引数がリクエストに含まれているため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `ForwardedDueToNoProfile` – フィールドレベル暗号化の設定でプロファイルを指定しなかったため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `MalformedContentTypeClientError` `Content-Type` – ヘッダーの値が無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `MalformedInputClientError` – リクエストボディが無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `MalformedQueryArgsClientError` – クエリ引数が空であるか無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `RejectedByContentType` – フィールドレベル暗号化の設定でコンテンツタイプを指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `RejectedByQueryArgs` – フィールドレベル暗号化の設定でクエリ引数を指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `ServerError` – オリジンサーバーがエラーを返しました。

   リクエストがフィールドレベル暗号化のクォータ (以前は制限と呼ばれていました) を超えた場合、このフィールドには次のいずれかのエラーコードが含まれ、サーバーは HTTP ステータスコード 400 をビューワーに返します。フィールドレベル暗号化に関する最新のクォータのリストについては、「[フィールドレベル暗号化のクォータ](cloudfront-limits.md#limits-field-level-encryption)」を参照してください。
   + `FieldLengthLimitClientError` – 暗号化されるように設定されているフィールドが最大の長さを超えています。
   + `FieldNumberLimitClientError` – ディストリビューションによって暗号化されるように設定されているリクエストがフィールド数の制限を超えています。
   + `RequestLengthLimitClientError` – フィールドレベル暗号化が設定されている場合にリクエストボディが最大の長さを超えています。

   フィールドレベル暗号化がディストリビューション用に設定されていない場合、このフィールドの値はハイフン (-) です。

1. **`fle-encrypted-fields`**

   サーバーが暗号化してオリジンに転送した[フィールドレベル暗号化](field-level-encryption.md)フィールドの数。CloudFront サーバーは処理されたリクエストをオリジンにストリーミングするときにデータを暗号化するため、`fle-status` の値がエラーであっても、このフィールドに値が渡されている場合があります。

   フィールドレベル暗号化がディストリビューション用に設定されていない場合、このフィールドの値はハイフン (-) です。

1. **`c-port`**

   閲覧者からのリクエストのポート番号。

1. **`time-to-first-byte`**

   サーバー上で測定される、要求を受信してから応答の最初のバイトを書き込むまでの秒数。

1. **`x-edge-detailed-result-type`**

   このフィールドには、以下の場合を除き、`x-edge-result-type` フィールドと同じ値が含まれます。
   + オブジェクトが [Origin Shield](origin-shield.md) レイヤーからビューワーに渡された場合、このフィールドには `OriginShieldHit` が含まれています。
   + オブジェクトが CloudFront キャッシュに存在せず、レスポンスが[オリジンリクエストの Lambda@Edge 関数](lambda-at-the-edge.md)によって生成された場合、このフィールドには `MissGeneratedResponse` が含まれます。
   + `x-edge-result-type` フィールドの値が `Error` の場合、このフィールドにはエラーに関する詳細情報を含む次のいずれかの値が含まれます。
     + `AbortedOrigin` – サーバーでオリジンに関する問題が発生しました。
     + `ClientCommError` – サーバーとビューワーとの通信の問題により、ビューワーへのレスポンスが中断されました。
     + `ClientGeoBlocked` – ディストリビューションは、ビューワーの地理的位置からのリクエストを拒否するように設定されています。
     + `ClientHungUpRequest` – リクエストの送信中にビューワーが途中で停止しました。
     + `Error` – エラータイプが他のどのカテゴリにも適合しないエラーが発生しました。このエラータイプは、キャッシュからのエラーレスポンスをサーバーが渡すときに発生する可能性があります。
     + `InvalidRequest` – サーバーがビューワーから無効なリクエストを受信しました。
     + `InvalidRequestBlocked` – 要求されたリソースへのアクセスがブロックされます。
     + `InvalidRequestCertificate` – ディストリビューションが、HTTPS 接続の確立に使用した SSL/TLS 証明書と一致しません。
     + `InvalidRequestHeader` – リクエストに無効なヘッダーが含まれていました。
     + `InvalidRequestMethod` – ディストリビューションは、使用された HTTP リクエストメソッドを処理するように設定されていません。これは、ディストリビューションがキャッシュ可能なリクエストのみをサポートしている場合に発生します。
     + `OriginCommError` — オリジンに接続中、またはオリジンからデータを読み取るときに、リクエストがタイムアウトしました。
     + `OriginConnectError` – サーバーがオリジンに接続できませんでした。
     + `OriginContentRangeLengthError` – オリジンのレスポンスの `Content-Length` ヘッダーが、`Content-Range` ヘッダーの長さと一致しません。
     + `OriginDnsError` – サーバーがオリジンのドメイン名を解決できませんでした。
     + `OriginError` – オリジンが誤ったレスポンスを返しました。
     + `OriginHeaderTooBigError` – オリジンから返されたヘッダーが大きすぎてエッジサーバーで処理できません。
     + `OriginInvalidResponseError` – オリジンが無効なレスポンスを返しました。
     + `OriginReadError` – サーバーがオリジンから読み取れませんでした。
     + `OriginWriteError` – サーバーがオリジンに書き込めませんでした。
     + `OriginZeroSizeObjectError` – オリジンから送信されたサイズゼロのオブジェクトがエラーになりました。
     + `SlowReaderOriginError` – オリジンエラーの原因となったメッセージの読み取りに時間がかかりました。

1. **`sc-content-type`**

   レスポンスの HTTP `Content-Type` ヘッダーの値。

1. **`sc-content-len`**

   レスポンスの HTTP `Content-Length` ヘッダーの値。

1. **`sc-range-start`**

   レスポンスに HTTP `Content-Range` ヘッダーが含まれている場合、このフィールドには範囲の開始値が含まれます。

1. **`sc-range-end`**

   レスポンスに HTTP `Content-Range` ヘッダーが含まれている場合、このフィールドには範囲の終了値が含まれます。

1. **`distribution-tenant-id`**

   ディストリビューションテナントの ID。

1. **`connection-id`**

   TLS 接続の一意の識別子です。

   このフィールドの情報を取得する前に、ディストリビューションの mTLS を有効にする必要があります。詳細については、「[CloudFront による相互 TLS 認証 (Viewer mTLS)オリジンの相互 TLS と CloudFront](mtls-authentication.md)」を参照してください。

   

ディストリビューションのログファイルの例を以下に示します。

```
#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version fle-status fle-encrypted-fields c-port time-to-first-byte x-edge-detailed-result-type sc-content-type sc-content-len sc-range-start sc-range-end
2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==	d111111abcdef8.cloudfront.net	https	23	0.001	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.001	Hit	text/html	78	-	-
2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	k6WGMNkEzR5BEM_SaF47gjtX9zBDO2m349OY2an0QPEaUum1ZOLrow==	d111111abcdef8.cloudfront.net	https	23	0.000	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.000	Hit	text/html	78	-	-
2019-12-04	21:02:31	LAX1	392	192.0.2.100	GET	d111111abcdef8.cloudfront.net	/index.html	200	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Hit	f37nTMVvnKvV2ZSvEsivup_c2kZ7VXzYdjC-GUQZ5qNs-89BlWazbw==	d111111abcdef8.cloudfront.net	https	23	0.001	-	TLSv1.2	ECDHE-RSA-AES128-GCM-SHA256	Hit	HTTP/2.0	-	-	11040	0.001	Hit	text/html	78	-	-	
2019-12-13	22:36:27	SEA19-C1	900	192.0.2.200	GET	d111111abcdef8.cloudfront.net	/favicon.ico	502	http://www.example.com/	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Error	1pkpNfBQ39sYMnjjUQjmH2w1wdJnbHYTbag21o_3OfcQgPzdL2RSSQ==	www.example.com	http	675	0.102	-	-	-	Error	HTTP/1.1	-	-	25260	0.102	OriginDnsError	text/html	507	-	-
2019-12-13	22:36:26	SEA19-C1	900	192.0.2.200	GET	d111111abcdef8.cloudfront.net	/	502	-	Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36	-	-	Error	3AqrZGCnF_g0-5KOvfA7c9XLcf4YGvMFSeFdIetR1N_2y8jSis8Zxg==	www.example.com	http	735	0.107	-	-	-	Error	HTTP/1.1	-	-	3802	0.107	OriginDnsError	text/html	507	-	-
2019-12-13	22:37:02	SEA19-C2	900	192.0.2.200	GET	d111111abcdef8.cloudfront.net	/	502	-	curl/7.55.1	-	-	Error	kBkDzGnceVtWHqSCqBUqtA_cEs2T3tFUBbnBNkB9El_uVRhHgcZfcw==	www.example.com	http	387	0.103	-	-	-	Error	HTTP/1.1	-	-	12644	0.103	OriginDnsError	text/html	507	-	-
```

## ログを分析する
<a name="access-logs-analyzing"></a>

1 時間ごとに複数のアクセスログが配信される可能性があるため、特定の期間に対して受信したすべてのログファイルをまとめて 1 つのファイルにしておくことをお勧めします。これにより、その期間のデータをより正確かつ完全に分析することができます。

アクセスログを分析する方法の 1 つとして [Amazon Athena](https://aws.amazon.com/athena/) を使用する方法があります。Athena は、CloudFront を含めた AWS のサービスのデータを分析するために役立つインタラクティブなクエリサービスです。詳細については、*Amazon Athena ユーザーガイド*の「[ Amazon CloudFront ログのクエリ](https://docs.aws.amazon.com/athena/latest/ug/cloudfront-logs.html)」を参照してください。

さらに、次の AWS ブログ投稿では、アクセスログを分析するいくつかの方法について説明しています。
+ [ Amazon CloudFront Request Logging](https://aws.amazon.com/blogs/aws/amazon-cloudfront-request-logging/) (HTTP 経由で配信するコンテンツの場合)
+ [強化された CloudFront ログにクエリ文字列機能を追加](https://aws.amazon.com/blogs/aws/enhanced-cloudfront-logs-now-with-query-strings/)

# リアルタイムのアクセスログを使用する
<a name="real-time-logs"></a>

CloudFront リアルタイムアクセスログを使用すると、ディストリビューションに対するリクエストの情報をリアルタイムで取得できます (ログはリクエストを受信してから数秒以内に配信されます)。リアルタイムのアクセスログを使用して、コンテンツ配信のパフォーマンスに基づいて監視、分析、アクションを実行できます。

CloudFront リアルタイムアクセスログは設定可能です。以下を選択することができます。
+ リアルタイムログの*サンプリング率* (リアルタイムのアクセスログ記録を受信するリクエストの割合) を選択できます。
+ ログレコードで受信する特定のフィールド。
+ リアルタイムログを受信する特定のキャッシュ動作 (パスパターン)。

CloudFront リアルタイムアクセスログは、Amazon Kinesis Data Streams で選択したデータストリームに配信されます。独自の [Kinesis データストリームコンシューマー](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html)を構築することも、Amazon Data Firehose を使用してログデータを Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service (OpenSearch Service)、またはサードパーティーのログ処理サービスに送信することもできます。

Kinesis Data Streams の使用料金に加えて、CloudFront でのリアルタイムアクセスログの料金が発生します。料金の詳細については、「[Amazon CloudFront の料金](https://aws.amazon.com/cloudfront/pricing/)」および「[Amazon Kinesis Data Streams の料金](https://aws.amazon.com/kinesis/data-streams/pricing/)」を参照してください。

**重要**  
ログは、すべてのリクエストを完全に課金するためのものではなく、コンテンツに対するリクエストの本質を把握するものとして使用することをお勧めします。CloudFront はベストエフォートベースでリアルタイムのアクセスログを提供します。特定のリクエストのログエントリが、リクエストが実際に処理されてからかなり後に配信されることも、(まれに) 一切配信されないこともあります。ログエントリをリアルタイムのアクセスログから省略すると、リアルタイムのアクセスログ内のエントリ数は AWS の請求と使用状況レポートに表示される使用量と一致しなくなります。

**Topics**
+ [リアルタイムのアクセスログ設定を作成および使用する](#create-real-time-log-config)
+ [リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)
+ [Kinesis Data Streams コンシューマーを作成する](#real-time-log-consumer-guidance)
+ [リアルタイムのアクセスログのトラブルシューティング](#real-time-log-troubleshooting)

## リアルタイムのアクセスログ設定を作成および使用する
<a name="create-real-time-log-config"></a>

ディストリビューションに対して行われたリクエストに関する情報をリアルタイムで取得するには、リアルタイムのアクセスログ設定を使用できます。ログは、リクエストを受信してから数秒以内に提供されます。リアルタイムのアクセスログ設定は、CloudFront コンソール、AWS Command Line Interface (AWS CLI)、または CloudFront API を使用して作成できます。

リアルタイムのアクセスログ設定を使用するには、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。

------
#### [ Console ]

**リアルタイムのアクセスログ設定を作成するには**

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

1. **[リアルタイム設定]** タブを選択します。

1. **[設定を作成]** を選択します。

1. **[名前]** に、設定の名前を入力します。

1. **[サンプリングレート]** に、ログレコードを受信する対象のリクエストの割合を入力します。

1. **[フィールド]** で、リアルタイムのアクセスログで受信するフィールドを選択します。
   + すべての [CMCD フィールド](#CMCD-real-time-logging-fields)をログに含めるには、**[CMCD のすべてのキー]** を選択します。

1. **[エンドポイント]** で、リアルタイムのアクセスログを受信する 1 つ以上の Kinesis データストリームを選択します。
**注記**  
CloudFront のリアルタイムのアクセスログは、Kinesis Data Streams で指定したデータストリームに配信されます。リアルタイムのアクセスログを読み取って分析するには、独自の Kinesis データストリームコンシューマーを構築できます。Firehose を使用して、ログデータを Amazon S3、Amazon Redshift、Amazon OpenSearch Service、またはサードパーティーのログ処理サービスに送信することもできます。

1. **[IAM ロール]** で、**[新しいサービスロールを作成]** を選択するか、既存のロールを選択します。ただし、IAM ロールを作成するアクセス許可が必要です。

1. (オプション) **[ディストリビューション]** で、リアルタイムのアクセスログ設定にアタッチする CloudFront ディストリビューションとキャッシュビヘイビアを選択します。

1. **[設定を作成]** を選択します。

正常に終了すると、作成したリアルタイムのアクセスログ設定の詳細がコンソールに表示されます。

詳細については、「[リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)」を参照してください。

------
#### [ AWS CLI ]

AWS CLI を使用してリアルタイムのアクセスログ設定を作成するには、**aws cloudfront create-realtime-log-config** コマンドを使用します。コマンドの入力パラメータは、コマンドライン入力として個別に指定せずに、入力ファイルを使用して指定できます。

**リアルタイムのアクセスログ設定を作成するには (入力ファイルを含む CLI)**

1. 次のコマンドを使用して、`rtl-config.yaml` コマンドのすべての入力パラメータを含む **create-realtime-log-config** という名前のファイルを作成します。

   ```
   aws cloudfront create-realtime-log-config --generate-cli-skeleton yaml-input > rtl-config.yaml
   ```

1. 先ほど作成した `rtl-config.yaml` という名前のファイルを開きます。ファイルを編集して、必要なリアルタイムのアクセスログ設定を指定し、ファイルを保存します。次の点に注意してください。
   + `StreamType` では、唯一の有効な値は、`Kinesis` です。

   リアルタイムロング設定の詳細については、「[リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)」を参照してください。

1. 次のコマンドを使用して、`rtl-config.yaml` ファイルの入力パラメータを使用してリアルタイムのアクセスログ設定を作成します。

   ```
   aws cloudfront create-realtime-log-config --cli-input-yaml file://rtl-config.yaml
   ```

成功した場合、このコマンドの出力には、先ほど作成したリアルタイムのアクセスログ設定の詳細が表示されます。

**リアルタイムのアクセスログ設定を既存のディストリビューション (入力ファイル付き CLI) にアタッチするには**

1. 以下のコマンドを使用して、更新する CloudFront ディストリビューションのディストリビューション設定を保存します。*distribution\$1ID* をディストリビューションの ID に置き換えます。

   ```
   aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
   ```

1. 先ほど作成した `dist-config.yaml` という名前のファイルを開きます。ファイルを編集し、リアルタイムのアクセスログ設定を使用するように更新する各キャッシュ動作に次の変更を加えます。
   + キャッシュ動作で、`RealtimeLogConfigArn` という名前のフィールドを追加します。フィールドの値には、このキャッシュ動作にアタッチするリアルタイムのアクセスログ設定の ARN を使用します。
   + `ETag` フィールドの名前を `IfMatch` に変更します。ただし、フィールドの値は変更しないでください。

   完了したら、ファイルを保存します。

1. リアルタイムのアクセスログ設定を使用するようにディストリビューションを更新するには、次のコマンドを使用します。*distribution\$1ID* をディストリビューションの ID に置き換えます。

   ```
   aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
   ```

成功した場合、コマンドの出力には、先ほど更新したディストリビューションの詳細が表示されます。

------
#### [ API ]

CloudFront API を使用してリアルタイムのアクセスログ設定を作成するには、[CreateRealtimeLogConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateRealtimeLogConfig.html) API オペレーションを使用します。これらの API コールで指定するパラメータの詳細については、「[リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)」と、AWS SDK またはその他 API クライアントの API リファレンスドキュメントを参照してください。

リアルタイムのアクセスログ設定を作成したら、以下の API オペレーションのいずれかを使用してキャッシュ動作にアタッチできます。
+ 既存のディストリビューションのキャッシュ動作にアタッチするには、[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) を使用します。
+ 新しいディストリビューションのキャッシュ動作にアタッチするには、[CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) を使用します。

これらの API オペレーションの両方について、キャッシュ動作内で、`RealtimeLogConfigArn` フィールドにリアルタイムのアクセスログ設定の ARN を指定します。これらの API コールで指定するその他フィールドの詳細については、「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」と、AWS SDK またはその他 API クライアントの API リファレンスドキュメントを参照してください。

------

## リアルタイムのアクセスログ設定を理解する
<a name="understand-real-time-log-config"></a>

CloudFront リアルタイムのアクセスログを使用するには、まずリアルタイムのアクセスログ設定を作成します。リアルタイムのアクセスログ設定には、受信するログフィールド、ログレコードの *サンプリングレート*、およびログを配信する Kinesis データストリームに関する情報が含まれます。

具体的には、リアルタイムのアクセスログ設定には、次の設定が含まれます。

**Contents**
+ [名前](#real-time-logs-name)
+ [サンプリングレート](#real-time-logs-sampling-rate)
+ [フィールド](#real-time-logs-fields)
+ [エンドポイント (Kinesis Data Streams)](#real-time-logs-endpoint)
+ [IAM ロール](#real-time-logs-IAM)

### 名前
<a name="real-time-logs-name"></a>

リアルタイムのアクセスログ設定を識別する名前。

### サンプリングレート
<a name="real-time-logs-sampling-rate"></a>

サンプリングレートは、リアルタイムのアクセスログレコードとして Kinesis Data Streams に送信されるビューワーリクエストの割合を決定する 1～100 の整数です。すべてのビューワーリクエストをリアルタイムのアクセスログに含めるには、サンプリングレートに 100 を指定します。リクエストデータの代表的なサンプルをリアルタイムのアクセスログに受信しながら、コストを削減するために、より低いサンプリングレートを選択することもできます。

### フィールド
<a name="real-time-logs-fields"></a>

各リアルタイムのアクセスログレコードに含まれるフィールドのリスト。各ログレコードには、最大 40 個のフィールドを含めることができます。使用可能なすべてのフィールドを受信するか、パフォーマンスのモニタリングと分析に必要なフィールドのみを受信するかを選択できます。

次のリストは、各フィールド名と、そのフィールドに保持される情報の説明を示しています。フィールドは、Kinesis Data Streams に配信されるログレコードに表示される順序で示されています。

フィールド 46～63 は、メディアプレーヤークライアントが各リクエストで CDN に送信できる[一般的なメディアクライアントデータ (CMCD)](#CMCD-real-time-logging-fields) です。このデータを使用して、メディアタイプ (オーディオ、動画)、再生速度、ストリーミング時間など、各リクエストを確認できます。これらのフィールドは、CloudFront に送信した場合にのみ、リアルタイムのアクセスログに表示されます。

1. **`timestamp`**

   エッジサーバーがリクエストへの応答を終了した日時。

1. **`c-ip`**

   リクエスト元のビューワーの IP アドレス (`192.0.2.183` または `2001:0db8:85a3::8a2e:0370:7334` など)。ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送った場合、このフィールドの値はプロキシまたはロードバランサーの IP アドレスです。`x-forwarded-for` フィールドも参照してください。

1. **`s-ip`**

   リクエストを処理した CloudFront サーバーの IP アドレス。例: `192.0.2.183` または `2001:0db8:85a3::8a2e:0370:7334`。

1. **`time-to-first-byte`**

   サーバー上で測定される、要求を受信してから応答の最初のバイトを書き込むまでの秒数。

1. **`sc-status`**

   サーバーのレスポンスの HTTP ステータスコード (例: `200`)。

1. **`sc-bytes`**

   サーバーがリクエストに応じてビューワーに送信したデータ (ヘッダーを含む) のバイトの合計数。WebSocket および gRPC 接続の場合、これは接続を経由してサーバーからクライアントに送信した合計バイト数です。

1. **`cs-method`**

   ビューワーから受信した HTTP リクエストメソッド。

1. **`cs-protocol`**

   ビューワーリクエストのプロトコル (`http`、`https`、`grpcs`、`ws`、または `wss`)。

1. **`cs-host`**

   ビューワーが、このリクエストの `Host` ヘッダーに追加した値。オブジェクトの URL に CloudFront ドメイン名を使用している場合 (d111111abcdef8.cloudfront.net など)、このフィールドにはそのドメイン名が含まれます。代替ドメイン名 (CNAME) をオブジェクト URL (www.example.com) に使用している場合、このフィールドにはその代替ドメイン名が含まれます。

1. **`cs-uri-stem`**

   クエリ文字列 (存在する場合) を含むが、ドメイン名を含まないリクエスト URL 全体。例えば、`/images/cat.jpg?mobile=true`。
**注記**  
[標準ログ](AccessLogs.md)では、`cs-uri-stem` 値にクエリ文字列は含まれません。

1. **`cs-bytes`**

   ビューワーがリクエストに含めたデータ (ヘッダーを含む) のバイトの合計数。WebSocket および gRPC 接続の場合、これは接続を経由してクライアントからサーバーに送信した合計バイト数です。

1. **`x-edge-location`**

   リクエストを処理したエッジロケーション。各エッジロケーションは、3 文字コードと、割り当てられた任意の数字で識別されます (例: DFW3)。通常、この 3 文字コードは、エッジロケーションの地理的場所の近くにある空港の、国際航空運送協会 (IATA) の空港コードに対応します。(これらの略語は今後変更される可能性があります)。

1. **`x-edge-request-id`**

   リクエストを一意に識別する不透明な文字列。CloudFront では、この文字列を `x-amz-cf-id` レスポンスヘッダーでも送信します。

1. **`x-host-header`**

   CloudFront ディストリビューションのドメイン名 (d111111abcdef8.cloudfront.net など)。

1. **`time-taken`**

   サーバーが、ビューワーのリクエストを受信してからレスポンスの最後のバイトを出力キューに書き込むまでの秒数。サーバーで 1,000 分の 1 秒単位まで測定されます (例: 0.082)。ビューワーから見た場合、レスポンス全体を取得する合計所要時間は、ネットワークのレイテンシーと TCP バッファリングにより、この値よりも長くなります。

1. **`cs-protocol-version`**

   ビューワーがリクエストで指定した HTTP バージョン。指定できる値には、`HTTP/0.9`、`HTTP/1.0`、`HTTP/1.1`、`HTTP/2.0`および `HTTP/3.0` などがあります。

1. **`c-ip-version`**

   リクエストの IP バージョン (IPv4 または IPv6)。

1. **`cs-user-agent`**

   リクエスト内の `User-Agent` ヘッダーの値。`User-Agent` ヘッダーでリクエスト元 (リクエスト元のデバイスとブラウザのタイプなど) が識別されます。リクエスト元が検索エンジンの場合は、どの検索エンジンかも識別されます。

1. **`cs-referer`**

   リクエスト内の `Referer` ヘッダーの値。これはリクエスト元のドメインの名前です。一般的なリファラーとして、検索エンジン、オブジェクトに直接リンクされた他のウェブサイト、ユーザー自身のウェブサイトなどがあります。

1. **`cs-cookie`**

   名前と値のペアおよび関連属性を含む、リクエスト内の `Cookie` ヘッダー。
**注記**  
このフィールドは 800 バイトに切り捨てられます。

1. **`cs-uri-query`**

   リクエスト URL のクエリ文字列の部分 (ある場合)。

1. **`x-edge-response-result-type`**

   ビューワーにレスポンスを返す直前にサーバーがレスポンスを分類した方法。`x-edge-result-type` フィールドも参照してください。以下に示しているのは、可能な値です。
   + `Hit` – サーバーがキャッシュからビューワーにオブジェクトを渡しました。
   + `RefreshHit` – サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。
   + `Miss` – キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンサーバーに転送して結果をビューワーに返しました。
   + `LimitExceeded` – CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。
   + `CapacityExceeded` – リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから 503 エラーが返されました。
   + `Error` – 通常、これはリクエストがクライアントエラーとなった (`sc-status` フィールドが `4xx` 範囲内の値となる)、またはサーバーエラーになった (`sc-status` フィールドが `5xx` 範囲内の値となる) ことを意味します。

     `x-edge-result-type` フィールドの値が `Error` であり、このフィールドの値が `Error` でない場合、ダウンロードが完了する前にクライアントが切断されました。
   + `Redirect` – サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
   + `LambdaExecutionError` – ディストリビューションに関連付けられた Lambda@Edge 関数は、不正な関連付け、関数のタイムアウト、‭AWS の依存関係の問題、または別の一般的な可用性の問題が原因で完了しませんでした。

1. **`x-forwarded-for`**

   ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送信した場合、`c-ip` フィールドの値はプロキシまたはロードバランサーの IP アドレスです。この場合、このフィールドはリクエスト元のビューワーの IP アドレスです。このフィールドには、複数の IP アドレスをカンマで区切って含めることができます。各 IP アドレスは、IPv4 アドレス (`192.0.2.183` など) または IPv6 アドレス (`2001:0db8:85a3::8a2e:0370:7334` など) にすることができます。

1. **`ssl-protocol`**

   リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを送信するためにビューワーとサーバーがネゴシエートした SSL/TLS プロトコルが含まれます。指定可能な値のリストについては、[ビューワーと CloudFront との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md) でサポートされている SSL/TLS プロトコルを参照してください。

1. **`ssl-cipher`**

   リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを暗号化するためにビューワーとサーバーがネゴシエートした SSL/TLS 暗号が含まれます。使用できる値のリストについては、「[ビューワーと CloudFront との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md)」で、サポートされている SSL/TLS 暗号化を参照してください。

1. **`x-edge-result-type`**

   サーバーが、最後のバイトを渡した後で、レスポンスを分類した方法。場合によっては、サーバーがレスポンスを送る準備ができたときから、サーバーがレスポンスを送り終わるまでの間に、結果タイプが変わることがあります。`x-edge-response-result-type` フィールドも参照してください。

   例えば、HTTP ストリーミングで、サーバーがキャッシュ内でストリームのセグメントを検出するとします。そのシナリオでは、このフィールドの値は、通常 `Hit` になります。この場合、サーバーがセグメント全体を配信する前にビューワーが接続を閉じると、最終結果タイプ (およびこのフィールドの値) は `Error` になります。

   WebSocket および gRPC 接続の場合、コンテンツがキャッシュ可能ではなく、オリジンに直接プロキシされるため、このフィールドの値は `Miss` になります。

   以下に示しているのは、可能な値です。
   + `Hit` – サーバーがキャッシュからビューワーにオブジェクトを渡しました。
   + `RefreshHit` – サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。
   + `Miss` – キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンに転送して結果をビューワーに返しました。
   + `LimitExceeded` – CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。
   + `CapacityExceeded` – リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから HTTP 503 ステータスコードが返されました。
   + `Error` – 通常、これはリクエストがクライアントエラーとなった (`sc-status` フィールドが `4xx` 範囲内の値となる)、またはサーバーエラーになった (`sc-status` フィールドが `5xx` 範囲内の値となる) ことを意味します。`sc-status` フィールドの値が `200` であるか、このフィールドの値が `Error` で、`x-edge-response-result-type` フィールドの値が `Error` でない場合は、HTTP リクエストは成功したが、クライアントがすべてのバイトを受信する前に切断されたことを意味します。
   + `Redirect` – サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
   + `LambdaExecutionError` – ディストリビューションに関連付けられた Lambda@Edge 関数は、不正な関連付け、関数のタイムアウト、‭AWS の依存関係の問題、または別の一般的な可用性の問題が原因で完了しませんでした。

1. **`fle-encrypted-fields`**

   サーバーが暗号化してオリジンに転送した[フィールドレベル暗号化](field-level-encryption.md)フィールドの数。CloudFront サーバーは処理されたリクエストをオリジンにストリーミングするときにデータを暗号化するため、`fle-status` の値がエラーであっても、このフィールドに値が渡されている場合があります。

1. **`fle-status`**

   [フィールドレベル暗号化](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)がディストリビューション用に設定されている場合、このフィールドにはリクエストボディが正常に処理されたかどうかを示すコードが含まれます。サーバーがリクエストボディを正常に処理し、指定したフィールドの値を暗号化してリクエストをオリジンに転送すると、このフィールドの値は `Processed` になります。`x-edge-result-type` の値は、この場合でもクライアント側またはサーバー側のエラーを示すことができます。

   このフィールドで使用できる値は次のとおりです。
   + `ForwardedByContentType` – コンテンツタイプが設定されていないため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `ForwardedByQueryArgs` – フィールドレベル暗号化の設定にないクエリ引数がリクエストに含まれているため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `ForwardedDueToNoProfile` – フィールドレベル暗号化の設定でプロファイルを指定しなかったため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `MalformedContentTypeClientError` `Content-Type` – ヘッダーの値が無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `MalformedInputClientError` – リクエストボディが無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `MalformedQueryArgsClientError` – クエリ引数が空であるか無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `RejectedByContentType` – フィールドレベル暗号化の設定でコンテンツタイプを指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `RejectedByQueryArgs` – フィールドレベル暗号化の設定でクエリ引数を指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `ServerError` – オリジンサーバーがエラーを返しました。

   リクエストがフィールドレベル暗号化のクォータ (以前は制限と呼ばれていました) を超えた場合、このフィールドには次のいずれかのエラーコードが含まれ、サーバーは HTTP ステータスコード 400 をビューワーに返します。フィールドレベル暗号化に関する最新のクォータのリストについては、「[フィールドレベル暗号化のクォータ](cloudfront-limits.md#limits-field-level-encryption)」を参照してください。
   + `FieldLengthLimitClientError` – 暗号化されるように設定されているフィールドが最大の長さを超えています。
   + `FieldNumberLimitClientError` – ディストリビューションによって暗号化されるように設定されているリクエストがフィールド数の制限を超えています。
   + `RequestLengthLimitClientError` – フィールドレベル暗号化が設定されている場合にリクエストボディが最大の長さを超えています。

1. **`sc-content-type`**

   レスポンスの HTTP `Content-Type` ヘッダーの値。

1. **`sc-content-len`**

   レスポンスの HTTP `Content-Length` ヘッダーの値。

1. **`sc-range-start`**

   レスポンスに HTTP `Content-Range` ヘッダーが含まれている場合、このフィールドには範囲の開始値が含まれます。

1. **`sc-range-end`**

   レスポンスに HTTP `Content-Range` ヘッダーが含まれている場合、このフィールドには範囲の終了値が含まれます。

1. **`c-port`**

   閲覧者からのリクエストのポート番号。

1. **`x-edge-detailed-result-type`**

   このフィールドには、以下の場合を除き、`x-edge-result-type` フィールドと同じ値が含まれます。
   + オブジェクトが [Origin Shield](origin-shield.md) レイヤーからビューワーに渡された場合、このフィールドには `OriginShieldHit` が含まれています。
   + オブジェクトが CloudFront キャッシュに存在せず、レスポンスが[オリジンリクエストの Lambda@Edge 関数](lambda-at-the-edge.md)によって生成された場合、このフィールドには `MissGeneratedResponse` が含まれます。
   + `x-edge-result-type` フィールドの値が `Error` の場合、このフィールドにはエラーに関する詳細情報を含む次のいずれかの値が含まれます。
     + `AbortedOrigin` – サーバーでオリジンに関する問題が発生しました。
     + `ClientCommError` – サーバーとビューワーとの通信の問題により、ビューワーへのレスポンスが中断されました。
     + `ClientGeoBlocked` – ディストリビューションは、ビューワーの地理的位置からのリクエストを拒否するように設定されています。
     + `ClientHungUpRequest` – リクエストの送信中にビューワーが途中で停止しました。
     + `Error` – エラータイプが他のどのカテゴリにも適合しないエラーが発生しました。このエラータイプは、キャッシュからのエラーレスポンスをサーバーが渡すときに発生する可能性があります。
     + `InvalidRequest` – サーバーがビューワーから無効なリクエストを受信しました。
     + `InvalidRequestBlocked` – 要求されたリソースへのアクセスがブロックされます。
     + `InvalidRequestCertificate` – ディストリビューションが、HTTPS 接続の確立に使用した SSL/TLS 証明書と一致しません。
     + `InvalidRequestHeader` – リクエストに無効なヘッダーが含まれていました。
     + `InvalidRequestMethod` – ディストリビューションは、使用された HTTP リクエストメソッドを処理するように設定されていません。これは、ディストリビューションがキャッシュ可能なリクエストのみをサポートしている場合に発生します。
     + `OriginCommError` — オリジンに接続中、またはオリジンからデータを読み取るときに、リクエストがタイムアウトしました。
     + `OriginConnectError` – サーバーがオリジンに接続できませんでした。
     + `OriginContentRangeLengthError` – オリジンのレスポンスの `Content-Length` ヘッダーが、`Content-Range` ヘッダーの長さと一致しません。
     + `OriginDnsError` – サーバーがオリジンのドメイン名を解決できませんでした。
     + `OriginError` – オリジンが誤ったレスポンスを返しました。
     + `OriginHeaderTooBigError` – オリジンから返されたヘッダーが大きすぎてエッジサーバーで処理できません。
     + `OriginInvalidResponseError` – オリジンが無効なレスポンスを返しました。
     + `OriginReadError` – サーバーがオリジンから読み取れませんでした。
     + `OriginWriteError` – サーバーがオリジンに書き込めませんでした。
     + `OriginZeroSizeObjectError` – オリジンから送信されたサイズゼロのオブジェクトがエラーになりました。
     + `SlowReaderOriginError` – オリジンエラーの原因となったメッセージの読み取りに時間がかかりました。

1. **`c-country`**

   ビューワーの IP アドレスによって決定される、ビューワーの地理的位置を表す国コード。国コードの一覧については、「[ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)」を参照してください。

1. **`cs-accept-encoding`**

    ビューワーリクエスト内の `Accept-Encoding` ヘッダーの値。

1. **`cs-accept`**

   ビューワーリクエスト内の `Accept` ヘッダーの値。

1. **`cache-behavior-path-pattern`**

   ビューワーリクエストに一致したキャッシュ動作を識別するパスパターン。

1. **`cs-headers`**

   ビューワーリクエスト内の HTTP ヘッダー (名前と値)。
**注記**  
このフィールドは 800 バイトに切り捨てられます。

1. **`cs-header-names`**

   ビューワーリクエスト内の HTTP ヘッダーの名前 (値ではない)。
**注記**  
このフィールドは 800 バイトに切り捨てられます。

1. **`cs-headers-count`**

    ビューワーリクエスト内の HTTP ヘッダーの数。

1. **`primary-distribution-id`**

   継続的デプロイが有効になっている場合、この ID は、どのディストリビューションが現在のディストリビューションでプライマリであるかを識別します。

1. **`primary-distribution-dns-name`**

   継続的デプロイが有効になっている場合、この値は、現在の CloudFront ディストリビューションに関連するプライマリドメイン名 (d111111abcdef8.cloudfront.net など) を示します。

1. **`origin-fbl`**

   CloudFront とオリジン間の先頭バイトのレイテンシーの秒数。

1. **`origin-lbl`**

   CloudFront とオリジン間の最終バイトのレイテンシーの秒数。

1. **`asn`**

   ビューワーの AS 番号 (ASN)。

1. <a name="CMCD-real-time-logging-fields"></a>
**リアルタイムのアクセスログの CMCD フィールド**  
これらのフィールドの詳細については、「[CTA Specification Web Application Video Ecosystem - Common Media Client Data CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf)」ドキュメントを参照してください。

1. **`cmcd-encoded-bitrate`**

   リクエストされたオーディオまたは動画オブジェクトのエンコードされたビットレート。

1. **`cmcd-buffer-length`**

   リクエストされたメディアオブジェクトのバッファ長。

1. **`cmcd-buffer-starvation`**

   前のリクエストからオブジェクトリクエストまでの特定の時点でバッファが不足していたかどうか。これにより、プレーヤーが再バッファリング状態になり、動画またはオーディオの再生が停止する可能性があります。

1. **`cmcd-content-id`**

   現在のコンテンツを識別する一意の文字列。

1. **`cmcd-object-duration`**

   リクエストされたオブジェクトの再生時間 (ミリ秒単位)。

1. **`cmcd-deadline`**

   バッファアンダーラン状態やその他の再生問題を回避するために、このオブジェクトの最初のサンプルが利用可能でなければならない、リクエスト時点からの期限。

1. **`cmcd-measured-throughput`**

   クライアントが測定した、クライアントとサーバー間のスループット。

1. **`cmcd-next-object-request`**

   次のリクエストされたオブジェクトの相対パス。

1. **`cmcd-next-range-request`**

   次のリクエストが部分的なオブジェクトリクエストである場合、この文字列はリクエスト対象のバイト範囲を示します。

1. **`cmcd-object-type`**

   リクエスト対象の現在のオブジェクトのメディアタイプ。

1. **`cmcd-playback-rate`**

   リアルタイムの場合は 1、倍速の場合は 2、再生しない場合は 0。

1. **`cmcd-requested-maximum-throughput`**

   クライアントがアセットの配信に十分であると判断した、リクエストされた最大スループット。

1. **`cmcd-streaming-format`**

   現在のリクエストを定義するストリーミングフォーマット。

1. **`cmcd-session-id`**

   現在の再生セッションを識別する GUID。

1. **`cmcd-stream-type`**

   セグメントの可用性を識別するトークン。`v` = すべてのセグメントが使用可能です。`l` = セグメントは時間が経つと使用可能になります。

1. **`cmcd-startup`**

   起動、シーク、またはバッファが空になった後の回復中にオブジェクトが緊急に必要になった場合は、値なしでキーが含まれます。

1. **`cmcd-top-bitrate`**

   クライアントが再生できる最高ビットレートのレンディション。

1. **`cmcd-version`**

   定義されたキーの名前と値を解釈するために使用する、この仕様のバージョン。このキーを省略した場合、クライアントとサーバーは、値がバージョン 1 で定義されたものとして解釈する必要があります。**

1. **`r-host`**

   このフィールドはオリジンリクエストに送信され、オブジェクトの提供に使用されるオリジンサーバーのドメインを示します。エラーが発生した場合は、このフィールドを使用して、最後に試行されたオリジンを見つけることができます (例: `cd8jhdejh6a.mediapackagev2.us-east-1.amazonaws.com`)。

1. **`sr-reason`**

   このフィールドは、オリジンが選択された理由を示します。プライマリオリジンへのリクエストが成功した場合は、空になります。

   オリジンフェイルオーバーが発生した場合、このフィールドには、フェイルオーバーの原因となった HTTP エラーコード (`Failover:403` や `Failover:502`) が含まれます。オリジンフェイルオーバーの場合、リクエストの再試行も失敗してカスタムエラーページも設定していなければ、`r-status` は 2 番目のオリジンのレスポンスを示します。一方、オリジンフェイルオーバーと共にカスタムエラーページを設定している場合、リクエストが失敗してカスタムエラーページが代わりに返されると、これには 2 番目のオリジンのレスポンスが含まれます。

   オリジンフェイルオーバーが発生せずにメディア品質対応レジリエンス (MQAR) オリジンの選択が発生すると、これは `MediaQuality` として記録されます。詳細については、「[Media Quality-Aware Resiliency](media-quality-score.md)」を参照してください。

1. **`x-edge-mqcs`**

   このフィールドは、CloudFront が MediaPackage v2 から CMSD レスポンスヘッダーで取得したメディアセグメントのメディア品質信頼スコア (MQCS) (範囲: 0～100) を示します。このフィールドは、MQAR 対応のオリジングループを持つキャッシュ動作と一致するリクエストで使用できます。CloudFront は、オリジンリクエストに加えてキャッシュからも提供されるメディアセグメントを、このフィールドでログに記録します。詳細については、「[Media Quality-Aware Resiliency](media-quality-score.md)」を参照してください。

1. **`distribution-tenant-id`**

   ディストリビューションテナントの ID。

1. **`connection-id`**

   TLS 接続の一意の識別子です。

   このフィールドの情報を取得する前に、ディストリビューションの mTLS を有効にする必要があります。詳細については、「[CloudFront による相互 TLS 認証 (Viewer mTLS)オリジンの相互 TLS と CloudFront](mtls-authentication.md)」を参照してください。

### エンドポイント (Kinesis Data Streams)
<a name="real-time-logs-endpoint"></a>

エンドポイントには、リアルタイムログを送信する Kinesis Data Streams に関する情報が含まれています。データストリームの Amazon リソースネーム (ARN) を指定します。

Kinesis データストリームの作成の詳細については、「Amazon Kinesis Data Streams 開発者ガイド」の以下のトピックを参照してください。**
+ [ストリームの作成と管理](https://docs.aws.amazon.com/streams/latest/dev/working-with-streams.html)
+ [ を使用した基本的な Kinesis Data Streams の操作を実行するAWS CLI](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html)
+ [ストリームの作成](https://docs.aws.amazon.com/streams/latest/dev/kinesis-using-sdk-java-create-stream.html) (AWS SDK for Java を使用)

データストリームを作成するときは、シャードの数を指定する必要があります。次の情報を使用して、必要なシャードの数を見積もることができます。

**Kinesis データストリームのシャード数を推定するには**

1. ご使用の CloudFront ディストリビューションが受信する 1 秒あたりのリクエスト数を計算 (または概算) します。

   1 秒あたりのリクエストを計算するには、[CloudFront の使用状況レポート](https://console.aws.amazon.com/cloudfront/v4/home#/usage) (CloudFront コンソール内) と [CloudFront メトリクス](viewing-cloudfront-metrics.md#monitoring-console.distributions) (CloudFront コンソールおよび Amazon CloudWatch コンソール内) を使用します。

1. 1 つのリアルタイムのアクセスログレコードの一般的なサイズを決定します。

   一般に、1 つのログレコードは約 500 バイトです。使用可能なすべてのフィールドを含む大きなレコードは、通常、約 1 KB です。

   ログレコードのサイズが不明な場合は、サンプルレートを低く (1% などに) 設定して、リアルタイムログを有効化し、Kinesis Data Streams でのデータのモニタリングを使用して平均的なレコードサイズを割り出します (受信バイト数の合計をレコード数の合計で割ります)。

1. [Amazon Kinesis Data Streams の料金ページ](https://aws.amazon.com/kinesis/data-streams/pricing/)の AWS 料金見積りツール の下にある **[今すぐカスタム見積もりを作成する]** をクリックします。
   + 計算ツールで、1 秒あたりのリクエスト数 (レコード) を入力します。
   + 単一のログレコードの平均レコードサイズを入力します。
   + **[計算を表示]** をクリックします。

   料金見積りツールが、必要なシャード数と推定コストを表示します。

### IAM ロール
<a name="real-time-logs-IAM"></a>

Kinesis のデータストリームにリアルタイムのアクセスログを配信するための許可を CloudFront に付与する AWS Identity and Access Management (IAM) ロールです。

CloudFront コンソールでリアルタイムのアクセスログ設定を作成する場合、**[新規サービスロールの作成]** を選択して、コンソールで IAM ロールを作成させることができます。

AWS CloudFormation または CloudFront API (AWS CLI もしくは SDK) を使用してリアルタイムのアクセスログ設定を作成する場合は、独自に IAM ロールを作成して、ロール ARN を提供する必要があります。IAM ロールを自分で作成するには、次のポリシーを使用します。

**IAM ロール信頼ポリシー**

次の IAM ロール信頼ポリシーを使用するには、*111122223333* を AWS アカウント 数字に置き換えます。このポリシーの `Condition` 要素は、CloudFront が AWS アカウント 内のディストリビューションの代理としてのみこのロールを引き受けることができるため、[「混乱した代理」問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)を防止するのに役立ちます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

**暗号化されていないデータストリーム用の IAM ロールアクセス許可ポリシー**

次のポリシーを使用するには、*arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* を Kinesis Data Streams の ARN に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-2:123456789012:stream/StreamName"
            ]
        }
    ]
}
```

------

**暗号化されたデータストリーム用の IAM ロールアクセス許可ポリシー**

次のポリシーを使用するには、*arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* を Kinesis Data Streams の ARN に、*arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486* を AWS KMS key の ARN に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-2:123456789012:stream/StreamName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486"
            ]
        }
    ]
}
```

------

****  

## Kinesis Data Streams コンシューマーを作成する
<a name="real-time-log-consumer-guidance"></a>

リアルタイムのアクセスログを読み取って分析するには、Kinesis Data Streams *コンシューマー*を構築または使用します。CloudFront リアルタイムのアクセスログ用のコンシューマーを構築する場合、すべてのリアルタイムログレコードのフィールドは、[フィールド](#real-time-logs-fields) セクションの一覧と常に同じ順序で配信されることを知っておくことが重要です。この固定注文に対応するためにコンシューマーを構築することを確認してください。

例えば、`time-to-first-byte`、`sc-status`、および `c-country` の 3 つのフィールドのみを含むリアルタイムのアクセスログ設定を考えてみます。このシナリオでは、最後のフィールド、`c-country` は、すべてのログレコードで常にフィールド番号 3 です。ただし、後でリアルタイムのアクセスログ設定にフィールドを追加すると、レコード内の各フィールドの配置が変更される可能性があります。

例えば、フィールド `sc-bytes` と `time-taken` をリアルタイムのアクセスログ設定に追加した場合、これらのフィールドは、[フィールド](#real-time-logs-fields) セクションに示されている順序に従って各ログレコードに挿入されます。5 つのフィールドすべての順序は `time-to-first-byte`、`sc-status`、`sc-bytes`、`time-taken`、および `c-country` です。`c-country` フィールドはもともとフィールド番号 3 でしたが、現在はフィールド番号 5 です。リアルタイムのアクセスログ設定にフィールドを追加する場合は、コンシューマーアプリケーションがログレコード内の位置を変更するフィールドを処理できることを確認してください。

## リアルタイムのアクセスログのトラブルシューティング
<a name="real-time-log-troubleshooting"></a>

リアルタイムのアクセスログ設定を作成した後、レコードが Kinesis Data Streams にまったく配信されない (または一部のレコードが配信されない) 場合があります。この場合、まず CloudFront ディストリビューションがビューワーリクエストを受信していることを確認する必要があります。その場合は、次の設定を確認してトラブルシューティングを続行できます。

**IAM ロールのアクセス許可**  
CloudFront では、リアルタイムのアクセスログレコードを Kinesis データストリームに配信するために、リアルタイムのアクセスログ設定の IAM ロールが使用されます。ロールの信頼ポリシーとロールのアクセス許可ポリシーが、[IAM ロール](#real-time-logs-IAM) に示されているポリシーと一致していることを確認してください。

**Kinesis Data Streams のスロットリング**  
CloudFront によってリアルタイムのアクセスログレコードが Kinesis データストリームに書き込まれる速度が、ストリームで処理できる速度を上回る場合、Kinesis Data Streams は CloudFront からのリクエストを抑制することがあります。この場合、Kinesis データストリームのシャードの数を増やすことができます。各シャードは、1 秒あたり 1,000 レコードまでの書き込みをサポートし、1 秒あたり 1 MB の最大データ書き込みをサポートします。

# エッジ関数のログ
<a name="edge-functions-logs"></a>

Amazon CloudWatch Logs を使用して、[Lambda@Edge](lambda-at-the-edge.md) と [CloudFront Functions](cloudfront-functions.md) の両方で、エッジ関数のログを取得できます。ログにアクセスするには、CloudWatch コンソールまたは CloudWatch Logs API を使用できます。

**重要**  
ログは、すべてのリクエストを完全に課金するためのものではなく、コンテンツに対するリクエストの本質を把握するものとして使用することをお勧めします。CloudFront はベストエフォートベースでエッジ関数のログを提供します。特定のリクエストのログエントリが、リクエストが実際に処理されてからかなり後に配信されることも、(まれに) 一切配信されないこともあります。ログエントリをエッジ関数のログから省略すると、エッジ関数のログ内のエントリ数は AWS の請求と使用状況レポートに表示される使用量と一致しなくなります。

**Topics**
+ [Lambda@Edge のログ](#lambda-at-edge-logs)
+ [CloudFront Functions のログ](#cloudfront-function-logs)

## Lambda@Edge のログ
<a name="lambda-at-edge-logs"></a>

Lambda@Edge は、関数ログを CloudWatch Logs に自動的に送信し、関数が呼び出された AWS リージョンにログストリームを作成します。AWS Lambda で関数を作成または変更するときは、デフォルトの CloudWatch ロググループ名を使用するか、カスタマイズできます。
+ デフォルトのロググループ名は `/aws/lambda/<FunctionName>` です。`<FunctionName>` は関数の作成時に指定した名前です。CloudWatch にログを送信する際、Lambda@Edge は関数名に `us-east-1` プレフィックスを自動的に追加し、ロググループ名は `/aws/lambda/us-east-1.<FunctionName>` になります。このプレフィックスは、関数が作成された AWS リージョンに対応します。このプレフィックスは、関数が呼び出される他のリージョンでも、ロググループ名の一部として残ります。
+ `/MyLogGroup` などのカスタムロググループ名を指定した場合、Lambda@Edge はリージョンプレフィックスを追加しません。ロググループ名は、関数が呼び出される他のすべてのリージョンで同じままです。

**注記**  
カスタムロググループを作成し、デフォルトの `/aws/lambda/<FunctionName>` と同じ名前を指定すると、Lambda@Edge は関数名に `us-east-1` プレフィックスを追加します。

ロググループ名をカスタマイズするだけでなく、Lambda@Edge 関数は JSON およびプレーンテキストのログ形式とログレベルのフィルタリングをサポートしています。詳細については、「*AWS Lambda デベロッパーガイド*」の「[Lambda 関数の高度なログ記録コントロールの設定](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-advanced.html)」を参照してください。

**注記**  
Lambda@Edge は、リクエストのボリュームとログのサイズに基づいてログを調整します。

Lambda@Edge 関数ログファイルを確認するには、正しい リージョンの CloudWatch ログファイルを確認する必要があります。Lambda@Edge 関数が実行されているリージョンを確認するには、CloudFront コンソールでその関数のメトリクスのグラフを表示します。メトリックスは リージョンごとに表示されます。同じページで、リージョンを選択してそのリージョンのログファイルを表示し、問題を調査することができます。

Lambda@Edge 関数で CloudWatch Logs を使用する方法の詳細については、以下のトピックを参照してください。
+ CloudFront コンソールの [**Monitoring (モニタリング)**] セクションでのグラフ表示の詳細については、「[Amazon CloudWatch で CloudFront メトリクスをモニタリングする](monitoring-using-cloudwatch.md)」を参照してください。
+ CloudWatch Logs にデータを送信するために必要なアクセス許可については、「[Lambda@Edge 用の IAM アクセス許可とロールのセットアップ](lambda-edge-permissions.md)」を参照してください。
+ Lambda@Edge 関数のログ作成の追加については、*AWS Lambda デベロッパーガイド*の「[Node.js の AWS Lambda 関数ログ作成](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-logging.html)」または「[Python の AWS Lambda 関数ログ作成](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html)」を参照してください。
+ CloudWatch Logs クォータ (以前は制限と呼ばれていました) の詳細については、*Amazon CloudWatch Logs ユーザーガイド*の「[CloudWatch Logs クォータ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)」を参照してください。

## CloudFront Functions のログ
<a name="cloudfront-function-logs"></a>

CloudFront 関数のコードに `console.log()` ステートメントが含まれている場合、CloudFront Functions はこれらのログ行を CloudWatch Logs に自動的に送信します。`console.log()` ステートメントがない場合、CloudWatch Logs には何も送信されません。

CloudFront Functions は、関数が実行されたエッジロケーションに関係なく、常に米国東部 (バージニア北部) リージョン (`us-east-1`) にログストリームを作成します。ログストリーム名の形式は `YYYY/M/D/UUID` です。

ロググループ名は次の形式に従います。
+ キャッシュ動作レベルでの CloudFront Functions の場合、形式は `/aws/cloudfront/function/<FunctionName>` です。
+ ディストリビューションレベルの CloudFront Functions (Connection Functions) の場合、形式は `/aws/cloudfront/connection-function/<FunctionName>` です。

`<FunctionName>` は、関数の作成時に付けられた名前です。

**Example ビューワーリクエスト**  
CloudWatch Logs に送信されるログメッセージの例を次に示します。各行は、CloudFront リクエストを一意に識別する ID で始まります。メッセージは、CloudFront ディストリビューション ID を含む `START` 行で始まり、`END` 行で終わります。`START` 行と `END` 行の間には、関数の `console.log()` ステートメントによって生成されるログ行があります。  

```
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADAXZZ
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== Example function log output
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
```

**Example 接続リクエスト**  
CloudWatch Logs に送信されるログメッセージの例を次に示します。各行は、CloudFront リクエストを一意に識別する ID で始まります。メッセージは、CloudFront ディストリビューション ID を含む `START` 行で始まり、`END` 行で終わります。`START` 行と `END` 行の間には、関数の `console.log()` ステートメントによって生成されるログ行があります。  

```
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADA123
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== 1.2.3.4
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
```

**注記**  
CloudFront Functions は、本番リクエストとレスポンスに応答して実行されるステージ `LIVE` の関数のみ、ログを CloudWatch に送信します。[関数をテスト](test-function.md)するとき、CloudFront は CloudWatch にログを送信しません。テスト出力には、エラー、コンピューティング使用率、関数ログ (`console.log()` ステートメント) に関する情報が表示されますが、この情報は CloudWatch に送信されません。

CloudFront Functions は、AWS Identity and Access Management (IAM) [サービスリンクロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用して、アカウントの CloudWatch Logs にログを送信します。サービスリンクロールは、AWS のサービスに直接リンクされた IAM ロールです。サービスリンクロールはサービスによって事前定義されており、サービスがお客様に他の AWS のサービスを呼び出す際に必要な、すべてのアクセス許可が含まれています。CloudFront Functions は、**AWSServiceRoleForCloudFrontLogger** サービスリンクロールを使用します。このロールの詳細については、「[Lambda@Edge 用のサービスにリンクされたロール](lambda-edge-permissions.md#using-service-linked-roles-lambda-edge)」を参照してください (Lambda@Edge は同じサービスリンクされたロールを使用します)。

関数が検証エラーまたは実行エラーで失敗すると、[標準ログ](AccessLogs.md)と[リアルタイムアクセスログ](real-time-logs.md)に情報が記録されます。エラーの詳細については、`x-edge-result-type`、`x-edge-response-result-type`、および `x-edge-detailed-result-type` フィールドを参照してください。

# AWS CloudTrail を使用した Amazon CloudFront API コールのログ記録
<a name="logging_using_cloudtrail"></a>

CloudFront は、ユーザー、ロール、または AWS のサービス が実行したアクションの記録を提供するサービスである [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) と統合されています。CloudTrail は、CloudFront のすべての API コールをイベントとしてキャプチャします。このキャプチャには、CloudFront コンソールからの呼び出しと、CloudFront API オペレーションへのコード呼び出しが含まれます。CloudTrail で収集した情報を使用して、CloudFront に対するリクエスト、リクエスト元の IP アドレス、リクエストの作成日時、その他の詳細を確認できます。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます。
+ ルートユーザーまたはユーザー認証情報のどちらを使用してリクエストが送信されたか。
+ リクエストが IAM Identity Center ユーザーに代わって行われたかどうか。
+ リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
+ リクエストが、別の AWS のサービス によって送信されたかどうか。

アカウントを作成すると、AWS アカウント で CloudTrail がアクティブになり、自動的に CloudTrail の**[イベント履歴]** にアクセスできるようになります。CloudTrail の **[イベント履歴]** では、AWS リージョン で過去 90 日間に記録された管理イベントの表示、検索、およびダウンロードが可能で、変更不可能な記録を確認できます。詳細については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail イベント履歴の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)」を参照してください。**[イベント履歴]** の閲覧には CloudTrail の料金はかかりません。

AWS アカウント で過去 90 日間のイベントを継続的に記録するには、証跡または [CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) イベントデータストアを作成します。

**CloudTrail 証跡**  
*証跡*により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。AWS マネジメントコンソール を使用して作成した証跡はマルチリージョンです。AWS CLI を使用する際は、単一リージョンまたは複数リージョンの証跡を作成できます。アカウント内のすべて AWS リージョン でアクティビティを把握するため、マルチリージョン証跡を作成することをお勧めします。単一リージョンの証跡を作成する場合、証跡の AWS リージョン に記録されたイベントのみを表示できます。証跡の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS アカウントの証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)」および「[組織の証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)」を参照してください。  
証跡を作成すると、進行中の管理イベントのコピーを 1 つ無料で CloudTrail から Amazon S3 バケットに配信できますが、Amazon S3 ストレージには料金がかかります。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。Amazon S3 の料金に関する詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

**CloudTrail Lake イベントデータストア**  
*[CloudTrail Lake]* を使用すると、イベントに対して SQL ベースのクエリを実行できます。CloudTrail Lake は、行ベースの JSON 形式の既存のイベントを [Apache ORC](https://orc.apache.org/) 形式に変換します。ORC は、データを高速に取得するために最適化された単票ストレージ形式です。イベントは、*イベントデータストア*に集約されます。イベントデータストアは、[高度なイベントセレクタ](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-concepts.html#adv-event-selectors)を適用することによって選択する条件に基づいた、イベントのイミュータブルなコレクションです。どのイベントが存続し、クエリに使用できるかは、イベントデータストアに適用するセレクタが制御します。CloudTrail Lake の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS CloudTrail Lake の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)」を参照してください。  
CloudTrail Lake のイベントデータストアとクエリにはコストがかかります。イベントデータストアを作成する際に、イベントデータストアに使用する[料金オプション](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-manage-costs.html#cloudtrail-lake-manage-costs-pricing-option)を選択します。料金オプションによって、イベントの取り込みと保存にかかる料金、および、そのイベントデータストアのデフォルトと最長の保持期間が決まります。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。

**注記**  
CloudFront はグローバルサービスです。CloudTrail は、CloudFront のイベントを米国東部 (バージニア北部) リージョンに記録します。詳細については、*AWS CloudTrail ユーザーガイド*の「[グローバルサービスイベント](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-concepts.html#cloudtrail-concepts-global-service-events)」を参照してください。  
AWS Security Token Service で一時的なセキュリティ認証情報を使用すると、`us-west-2` などのリージョンエンドポイントへの呼び出しは、CloudTrail で適切なリージョンに記録されます。  
CloudFront エンドポイントの詳細については、「AWS 全般のリファレンス」の「[CloudFront のエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/cf_region.html)」を参照してください。**

## CloudTrail の CloudFront データイベント
<a name="cloudtrail-data-events"></a>

[データイベント](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events)は、リソースで実行されたリソースオペレーション (CloudFront ディストリビューションに対する読み取りや書き込みなど) に関する情報を提供します。これらのイベントは、データプレーンオペレーションとも呼ばれます。データイベントは、多くの場合、高ボリュームのアクティビティです。デフォルトでは、CloudTrail はデータイベントをログ記録しません。CloudTrail **[イベント履歴]** にはデータイベントは記録されません。

追加の変更がイベントデータに適用されます。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。

CloudFront リソースタイプのデータイベントは、CloudTrail コンソール、AWS CLI、または CloudTrail API オペレーションを使用してログに記録できます。データイベントをログに記録する方法の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS マネジメントコンソール を使用したデータイベントのログ記録](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events-console)」および「[AWS Command Line Interface を使用したデータイベントのログ記録](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#creating-data-event-selectors-with-the-AWS-CLI)」を参照してください。

次の表に、データイベントをログに記録できる CloudFront リソースタイプを示します。**データイベントタイプ (コンソール)** 列には、CloudTrail コンソールの**[データイベントタイプ]**リストから選択する値が表示されます。**resources.type 値**列には、AWS CLI または CloudTrail API を使用して高度なイベントセレクタを設定するときに指定する `resources.type` 値が表示されます。**CloudTrail に記録されたデータ API** 列には、リソースタイプの CloudTrail にログ記録された API コールが表示されます。


| データイベントタイプ (コンソール) | resources.type 値 | CloudTrail にログ記録されたデータ API | 
| --- | --- | --- | 
| CloudFront KeyValueStore |  AWS::CloudFront::KeyValueStore  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/logging_using_cloudtrail.html)  | 

`eventName`、`readOnly`、および `resources.ARN` フィールドでフィルタリングして、自分にとって重要なイベントのみをログに記録するように高度なイベントセレクタを設定できます。オブジェクトの詳細については、「*AWS CloudTrail API リファレンス*」の「[https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_AdvancedFieldSelector.html)」を参照してください。

## CloudTrail の CloudFront 管理イベント
<a name="cloudtrail-management-events"></a>

[管理イベント](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)では、AWS アカウント のリソースに対して実行される管理オペレーションについての情報が得られます。これらのイベントは、コントロールプレーンオペレーションとも呼ばれます。CloudTrail は、デフォルトで管理イベントをログ記録します。

Amazon CloudFront は、すべての CloudFront コントロールプレーンオペレーションを管理イベントとして記録します。CloudFront が CloudTrail に記録する Amazon CloudFront コントロールプレーンオペレーションのリストについては、「[Amazon CloudFront API リファレンス](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_Operations_Amazon_CloudFront.html)」を参照してください。

## CloudFront イベントの例
<a name="cloudtrail-event-examples"></a>

各イベントは任意の送信元からの単一のリクエストを表し、リクエストされた API オペレーション、オペレーションの日時、リクエストパラメータなどに関する情報を含みます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、イベントは特定の順序で表示されません。

**Contents**
+ [例:UpdateDistribution](#example-cloudfront-service-cloudtrail-log)
+ [例:UpdateKeys](#example-cloudfront-kvs-cloudtrail-log)

### 例:UpdateDistribution
<a name="example-cloudfront-service-cloudtrail-log"></a>

次は、[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) オペレーションを示す CloudTrail イベントの例です。

CloudFront API への呼び出しの場合、`eventSource` は `cloudfront.amazonaws.com` です。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AIDACKCEVSQ6C2EXAMPLE:role-session-name",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/role-session-name",
        "accountId": "111122223333",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AIDACKCEVSQ6C2EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-02-02T19:23:50Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2024-02-02T19:26:01Z",
    "eventSource": "cloudfront.amazonaws.com",
    "eventName": "UpdateDistribution",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "52.94.133.137",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
    "requestParameters": {
        "distributionConfig": {
            "defaultRootObject": "",
            "aliases": {
                "quantity": 3,
                "items": [
                    "alejandro_rosalez.awsps.myinstance.com",
                    "cross-testing.alejandro_rosalez.awsps.myinstance.com",
                    "*.alejandro_rosalez.awsps.myinstance.com"
                ]
            },
            "cacheBehaviors": {
                "quantity": 0,
                "items": []
            },
            "httpVersion": "http2and3",
            "originGroups": {
                "quantity": 0,
                "items": []
            },
            "viewerCertificate": {
                "minimumProtocolVersion": "TLSv1.2_2021",
                "cloudFrontDefaultCertificate": false,
                "aCMCertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
                "sSLSupportMethod": "sni-only"
            },
            "webACLId": "arn:aws:wafv2:us-east-1:111122223333:global/webacl/testing-acl/a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
            "customErrorResponses": {
                "quantity": 0,
                "items": []
            },
            "logging": {
                "includeCookies": false,
                "prefix": "",
                "enabled": false,
                "bucket": ""
            },
            "priceClass": "PriceClass_All",
            "restrictions": {
                "geoRestriction": {
                    "restrictionType": "none",
                    "quantity": 0,
                    "items": []
                }
            },
            "isIPV6Enabled": true,
            "callerReference": "1578329170895",
            "continuousDeploymentPolicyId": "",
            "enabled": true,
            "defaultCacheBehavior": {
                "targetOriginId": "d111111abcdef8",
                "minTTL": 0,
                "compress": false,
                "maxTTL": 31536000,
                "functionAssociations": {
                    "quantity": 0,
                    "items": []
                },
                "trustedKeyGroups": {
                    "quantity": 0,
                    "items": [],
                    "enabled": false
                },
                "smoothStreaming": false,
                "fieldLevelEncryptionId": "",
                "defaultTTL": 86400,
                "lambdaFunctionAssociations": {
                    "quantity": 0,
                    "items": []
                },
                "viewerProtocolPolicy": "redirect-to-https",
                "forwardedValues": {
                    "cookies": {"forward": "none"},
                    "queryStringCacheKeys": {
                        "quantity": 0,
                        "items": []
                    },
                    "queryString": false,
                    "headers": {
                        "quantity": 1,
                        "items": ["*"]
                    }
                },
                "trustedSigners": {
                    "items": [],
                    "enabled": false,
                    "quantity": 0
                },
                "allowedMethods": {
                    "quantity": 2,
                    "items": [
                        "HEAD",
                        "GET"
                    ],
                    "cachedMethods": {
                        "quantity": 2,
                        "items": [
                            "HEAD",
                            "GET"
                        ]
                    }
                }
            },
            "staging": false,
            "origins": {
                "quantity": 1,
                "items": [
                    {
                        "originPath": "",
                        "connectionTimeout": 10,
                        "customOriginConfig": {
                            "originReadTimeout": 30,
                            "hTTPSPort": 443,
                            "originProtocolPolicy": "https-only",
                            "originKeepaliveTimeout": 5,
                            "hTTPPort": 80,
                            "originSslProtocols": {
                                "quantity": 3,
                                "items": [
                                    "TLSv1",
                                    "TLSv1.1",
                                    "TLSv1.2"
                                ]
                            }
                        },
                        "id": "d111111abcdef8",
                        "domainName": "d111111abcdef8.cloudfront.net",
                        "connectionAttempts": 3,
                        "customHeaders": {
                            "quantity": 0,
                            "items": []
                        },
                        "originShield": {"enabled": false},
                        "originAccessControlId": ""
                    }
                ]
            },
            "comment": "HIDDEN_DUE_TO_SECURITY_REASONS"
        },
        "id": "EDFDVBD6EXAMPLE",
        "ifMatch": "E1RTLUR9YES76O"
    },
    "responseElements": {
        "distribution": {
            "activeTrustedSigners": {
                "quantity": 0,
                "enabled": false
            },
            "id": "EDFDVBD6EXAMPLE",
            "domainName": "d111111abcdef8.cloudfront.net",
            "distributionConfig": {
                "defaultRootObject": "",
                "aliases": {
                    "quantity": 3,
                    "items": [
                        "alejandro_rosalez.awsps.myinstance.com",
                        "cross-testing.alejandro_rosalez.awsps.myinstance.com",
                        "*.alejandro_rosalez.awsps.myinstance.com"
                    ]
                },
                "cacheBehaviors": {"quantity": 0},
                "httpVersion": "http2and3",
                "originGroups": {"quantity": 0},
                "viewerCertificate": {
                    "minimumProtocolVersion": "TLSv1.2_2021",
                    "cloudFrontDefaultCertificate": false,
                    "aCMCertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
                    "sSLSupportMethod": "sni-only",
                    "certificateSource": "acm",
                    "certificate": "arn:aws:acm:us-east-1:111122223333:certificate/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
                },
                "webACLId": "arn:aws:wafv2:us-east-1:111122223333:global/webacl/testing-acl/a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
                "customErrorResponses": {"quantity": 0},
                "logging": {
                    "includeCookies": false,
                    "prefix": "",
                    "enabled": false,
                    "bucket": ""
                },
                "priceClass": "PriceClass_All",
                "restrictions": {
                    "geoRestriction": {
                        "restrictionType": "none",
                        "quantity": 0
                    }
                },
                "isIPV6Enabled": true,
                "callerReference": "1578329170895",
                "continuousDeploymentPolicyId": "",
                "enabled": true,
                "defaultCacheBehavior": {
                    "targetOriginId": "d111111abcdef8",
                    "minTTL": 0,
                    "compress": false,
                    "maxTTL": 31536000,
                    "functionAssociations": {"quantity": 0},
                    "trustedKeyGroups": {
                        "quantity": 0,
                        "enabled": false
                    },
                    "smoothStreaming": false,
                    "fieldLevelEncryptionId": "",
                    "defaultTTL": 86400,
                    "lambdaFunctionAssociations": {"quantity": 0},
                    "viewerProtocolPolicy": "redirect-to-https",
                    "forwardedValues": {
                        "cookies": {"forward": "none"},
                        "queryStringCacheKeys": {"quantity": 0},
                        "queryString": false,
                        "headers": {
                            "quantity": 1,
                            "items": ["*"]
                        }
                    },
                    "trustedSigners": {
                        "enabled": false,
                        "quantity": 0
                    },
                    "allowedMethods": {
                        "quantity": 2,
                        "items": [
                            "HEAD",
                            "GET"
                        ],
                        "cachedMethods": {
                            "quantity": 2,
                            "items": [
                                "HEAD",
                                "GET"
                            ]
                        }
                    }
                },
                "staging": false,
                "origins": {
                    "quantity": 1,
                    "items": [
                        {
                            "originPath": "",
                            "connectionTimeout": 10,
                            "customOriginConfig": {
                                "originReadTimeout": 30,
                                "hTTPSPort": 443,
                                "originProtocolPolicy": "https-only",
                                "originKeepaliveTimeout": 5,
                                "hTTPPort": 80,
                                "originSslProtocols": {
                                    "quantity": 3,
                                    "items": [
                                        "TLSv1",
                                        "TLSv1.1",
                                        "TLSv1.2"
                                    ]
                                }
                            },
                            "id": "d111111abcdef8",
                            "domainName": "d111111abcdef8.cloudfront.net",
                            "connectionAttempts": 3,
                            "customHeaders": {"quantity": 0},
                            "originShield": {"enabled": false},
                            "originAccessControlId": ""
                        }
                    ]
                },
                "comment": "HIDDEN_DUE_TO_SECURITY_REASONS"
            },
            "aliasICPRecordals": [
                {
                    "cNAME": "alejandro_rosalez.awsps.myinstance.com",
                    "iCPRecordalStatus": "APPROVED"
                },
                {
                    "cNAME": "cross-testing.alejandro_rosalez.awsps.myinstance.com",
                    "iCPRecordalStatus": "APPROVED"
                },
                {
                    "cNAME": "*.alejandro_rosalez.awsps.myinstance.com",
                    "iCPRecordalStatus": "APPROVED"
                }
            ],
            "aRN": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE",
            "status": "InProgress",
            "lastModifiedTime": "Feb 2, 2024 7:26:01 PM",
            "activeTrustedKeyGroups": {
                "enabled": false,
                "quantity": 0
            },
            "inProgressInvalidationBatches": 0
        },
        "eTag": "E1YHBLAB2BJY1G"
    },
    "requestID": "4e6b66f9-d548-11e3-a8a9-73e33example",
    "eventID": "5ab02562-0fc5-43d0-b7b6-90293example",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "apiVersion": "2020_05_31",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "cloudfront.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
}
```

### 例:UpdateKeys
<a name="example-cloudfront-kvs-cloudtrail-log"></a>

次は、[UpdateKeys](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_kvs_UpdateKeys.html) オペレーションを示す CloudTrail イベントの例です。

CloudFront KeyValueStore API への呼び出しの場合、`eventSource` は `cloudfront.amazonaws.com` ではなく、`edgekeyvaluestore.amazonaws.com` になります。

```
{
    "eventVersion": "1.09",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AIDACKCEVSQ6C2EXAMPLE:role-session-name",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/role-session-name",
        "accountId": "111122223333",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AIDACKCEVSQ6C2EXAMPLE",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin"
            },
            "attributes": {
                "creationDate": "2023-11-01T23:41:14Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2023-11-01T23:41:28Z",
    "eventSource": "edgekeyvaluestore.amazonaws.com",
    "eventName": "UpdateKeys",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "3.235.183.252",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36,
    "requestParameters": {
        "kvsARN": "arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "ifMatch": "KV3O6B1CX531EBP",
        "deletes": [
            {"key": "key1"}
        ]
    },
    "responseElements": {
        "itemCount": 0,
        "totalSizeInBytes": 0,
        "eTag": "KVDC9VEVZ71ZGO"
    },
    "requestID": "5ccf104c-acce-4ea1-b7fc-73e33example",
    "eventID": "a0b1b5c7-906c-439d-9925-90293example",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::CloudFront::KeyValueStore",
            "ARN": "arn:aws:cloudfront::111122223333:key-value-store/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": false,
    "recipientAccountId": "111122223333",
    "eventCategory": "Data",
    "tlsDetails": {
        "tlsVersion": "TLSv1.3",
        "cipherSuite": "TLS_AES_128_GCM_SHA256",
        "clientProvidedHostHeader": "111122223333.cloudfront-kvs.global.api.aws"
    }
}
```

CloudTrail レコードの内容については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail record contents](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)」を参照してください。