標準ログ記録 (v2) を設定する
ディストリビューションの作成時または更新時に標準ログ記録を有効にすることができます。標準ログ記録 (v2) には、以下の機能が含まれています。
-
アクセスログを Amazon CloudWatch Logs、Amazon Data Firehose、Amazon Simple Storage Service (Amazon S3) に送信します。
-
必要なログフィールドを選択します。リアルタイムログフィールドのサブセットを選択することもできます。
-
追加の出力ログファイル形式を選択します。
Amazon S3 を使用している場合は、以下のオプション機能を利用できます。
-
ログをオプトイン AWS リージョン に送信します。
-
パーティショニングを使用してログを整理します。
-
Hive 互換ファイル名を有効にします。
詳細については、「Amazon S3 にログを送信する」を参照してください。
標準ログ記録の使用を開始するには、次の手順を実行します。
-
ログの受信先として指定する AWS のサービスに必要なアクセス許可を設定します。
-
CloudFront コンソールまたは CloudWatch API を使用して標準ログ記録を設定します。
-
アクセスログを表示します。
注記
-
標準ログ記録 (v2) を有効にしても、標準ログ記録 (レガシー) には影響や変更はありません。標準ログ記録 (v2) を使用しながら、標準ログ記録 (レガシー) も引き続きディストリビューションで使用できます。詳細については、「標準ログ記録 (レガシー) を設定する」を参照してください。
-
標準ログ記録 (レガシー) を既に有効にしていて、Amazon S3 への標準ログ記録 (v2) を有効にする場合は、別の Amazon S3 バケットを指定するか、同じバケット内の別のパスを使用する (例: ログプレフィックスやパーティショニングを使用する) ことをお勧めします。これにより、どのログファイルがどのディストリビューションに関連付けられているかを追跡し、ログファイルが互いに上書きされるのを防ぐことができます。
アクセス許可
CloudFront は CloudWatch 提供のログを使用してアクセスログを配信します。そのためには、ログ記録を配信できるように、指定した AWS のサービスへのアクセス許可が必要です。
各ログ記録先への必要なアクセス許可を確認するには、「Amazon CloudWatch Logs User Guide」の以下のトピックから選択します。
ログ記録先へのアクセス許可を設定したら、ディストリビューションの標準ログ記録を有効にできます。
注記
CloudFront は、複数の異なる AWS アカウント (クロスアカウント) へのアクセスログの送信をサポートしています。クロスアカウント配信を有効にするには、両方のアカウント (自分のアカウントと受信アカウント) に該当するアクセス許可が必要です。詳細については、「クロスアカウント配信の標準ログ記録を有効にする」セクションまたは「Amazon CloudWatch Logs User Guide」の「Cross-account delivery example」を参照してください。
標準ログ記録を有効にする
標準ログ記録を有効にするには、CloudFront コンソールまたは CloudWatch API を使用できます。
標準ログ記録を有効にする (CloudFront コンソール)
CloudFront ディストリビューションの標準ログ記録を有効にするには (コンソール)
-
CloudFront コンソールを使用して、既存のディストリビューションを更新します。
-
[Logging] (ログ) タブを選択します。
[追加] を選択し、ログを受信するサービスを選択します。
-
CloudWatch Logs
-
Firehose
-
Amazon S3
-
-
[送信先] で、サービスのリソースを選択します。リソースをまだ作成していない場合は、[作成] を選択するか、次のドキュメントを参照することができます。
-
CloudWatch Logs の場合は、[ロググループ名] に入力します。
-
Firehose の場合は、[Firehose 配信ストリーム] に入力します。
-
Amazon S3 の場合は、[バケット名] に入力します。
ヒント
プレフィックスを指定するには、バケット名の後にプレフィックスを入力します (例:
amzn-s3-demo-bucket.s3.amazonaws.com/
)。プレフィックスを指定しないと、CloudFront が自動的にプレフィックスを追加します。詳細については、「Amazon S3 にログを送信する」を参照してください。MyLogPrefix
-
-
[追加設定 – オプション] で、以下のオプションを指定できます。
-
[フィールド選択] で、送信先に配信するログのフィールド名を選択します。アクセスログフィールドと、リアルタイムログフィールドのサブセットを選択できます。
-
(Amazon S3 のみ) [パーティショニング] で、ログファイルデータをパーティション分割するパスを指定します。
-
(Amazon S3 のみ) [Hive 互換ファイル形式] でチェックボックスをオンにして、Hive 互換 S3 パスを使用できます。これにより、Hive 互換ツールへの新しいデータのロードを簡素化できます。
-
[出力形式] で、希望する形式を指定します。
注記
[Parquet] を選択した場合、このオプションではアクセスログを Apache Parquet に変換するための CloudWatch 料金が発生します。詳細については、「CloudWatch 料金表」の「Vended Logs」セクション
を参照してください。 -
[フィールド区切り文字] で、ログフィールドを区切る方法を指定します。
-
-
ディストリビューションを更新または作成するステップを完了します。
-
別の送信先を追加するには、ステップ 3~6 を繰り返します。
-
[ログ] ページで、標準ログのステータスが、ディストリビューションの横で [有効] になっていることを確認します。
(オプション) Cookie ログ記録を有効にするには、[管理]、[設定] を選択し、[cookie ログ記録] をオンにしてから、[変更を保存] を選択します。
ヒント
cookie ログ記録は、ディストリビューションのすべての標準ログ記録に適用されるグローバル設定です。この設定を個別の配信先で上書きすることはできません。
標準ログ記録の配信とログフィールドの詳細については、「標準ログ記録リファレンス」を参照してください。
標準ログ記録を有効にする (CloudWatch API)
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 のログ作成」を参照してください。
ディストリビューションの標準ログ記録を有効にするには (CloudWatch API)
-
ディストリビューションを作成したら、Amazon リソースネーム (ARN) を取得します。
ARN は、CloudFront コンソールの [ディストリビューション] ページで見つけるか、GetDistribution API オペレーションを使用して見つけることができます。ディストリビューション ARN は次の形式に従います:
arn:aws:cloudfront::123456789012:distribution/d111111abcdef8
-
次に、CloudWatch PutDeliverySource API オペレーションを使用して、ディストリビューションの配信ソースを作成します。
-
配信ソースの名前を入力します。
-
ディストリビューションの
resourceArn
を渡します。 -
logType
で、収集するログのタイプとしてACCESS_LOGS
を指定します。 -
例 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" } }
-
-
PutDeliveryDestination API オペレーションを使用してログの保存先を設定します。
-
destinationResourceArn
で、送信先の ARN を指定します。これは、CloudWatch Logs ロググループ、Firehose 配信ストリーム、Amazon S3 バケットのいずれかにすることができます。 -
outputFormat
で、ログの出力形式を指定します。 -
例 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 API オペレーションを使用して AWS Identity and Access Management (IAM) ポリシーを送信先アカウントに割り当てる必要があります。IAM ポリシーは、あるアカウントから別のアカウントへの配信を許可します。
-
-
CreateDelivery API オペレーションを使用して、配信ソースを、前のステップで作成した送信先にリンクします。この API オペレーションは、配信ソースを最終配信先と関連付けます。
-
deliverySourceName
で、ソース名を指定します。 -
deliveryDestinationArn
で、配信先の ARN を指定します。 -
fieldDelimiter
で、各ログフィールドを区切る文字列を指定します。 -
recordFields
で、必要なログフィールドを指定します。 -
S3 を使用している場合は、
enableHiveCompatiblePath
とsuffixPath
を使用するかどうかを指定します。
例 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": "" }
-
-
CloudFront コンソールの [ログ] ページで、ディストリビューションの横で標準ログのステータスが [有効] になっていることを確認します。
標準ログ記録の配信とログフィールドの詳細については、「標準ログ記録リファレンス」を参照してください。
注記
AWS CloudFormation を使用して CloudFront の標準ログ記録 (v2) を有効にするには、以下の CloudWatch Logs プロパティを使用できます。
ResourceArn
は CloudFront ディストリビューションであり、LogType
は ACCESS_LOGS
をサポートされているログタイプとする必要があります。
クロスアカウント配信の標準ログ記録を有効にする
AWS アカウントの標準ログ記録を有効にし、アクセスログを別のアカウントに配信する場合は、送信元アカウントと送信先アカウントを正しく設定します。CloudFront ディストリビューションの送信元アカウントは、アクセスログを送信先アカウントに送信します。
この手順の例では、送信元アカウント (111111111111
) がアクセスログを送信先アカウント (222222222222
) の Amazon S3 バケットに送信します。アクセスログを送信先アカウントの Amazon S3 バケットに送信するには、AWS CLI を使用します。
送信先アカウントを設定する
送信先アカウントの場合は、次の手順を実行します。
送信先アカウントを設定するには
-
ログ配信先を作成するには、次の 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/
をプレフィックスとして自動的に追加します。このプレフィックスは S3 配信先の<account-ID>
/CloudFrontsuffixPath
に表示されます。詳細については、「S3DeliveryConfiguration」を参照してください。 -
ログ配信先のリソースポリシーを追加して、送信元アカウントでログ配信を作成できるようにします。
次のポリシーでは、
111111111111
を送信元アカウント ID に置き換え、ステップ 1 の出力から配信先 ARN を指定します。{ "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
" } ] } -
ファイル (
deliverypolicy.json
など) を保存します。 -
前のポリシーを配信先にアタッチするには、次の AWS CLI コマンドを入力します。
aws logs put-delivery-destination-policy --delivery-destination-name
cloudfront-delivery-destination
--delivery-destination-policy file://deliverypolicy.json -
次のステートメントを送信先の 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:*"} } } -
バケットに 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:*"} } }
送信元アカウントを設定する
送信先アカウントを設定したら、次の手順に従って配信ソースを作成し、送信元アカウントでディストリビューションのログ記録を有効にします。
送信元アカウントを設定するには
-
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" } } -
送信元アカウントのログ配信元と送信先アカウントのログ配信先をマッピングする配信を作成します。
次の AWS CLI コマンドで、「ステップ 1: 送信先アカウントを設定する」の出力から配信先 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" } }
-
クロスアカウント配信が成功したことを確認します。
-
source
アカウントから、CloudFront コンソールにサインインし、ディストリビューションを選択します。[ログ記録] タブの [タイプ] に、S3 クロスアカウントログ配信用に作成されたエントリが表示されます。 -
destination
アカウントから、Amazon S3 コンソールにサインインし、Amazon S3 バケットを選択します。バケット名にプレフィックス
と、そのフォルダに配信されたアクセスログが表示されます。MyLogPrefix
-
出力ファイル形式
選択した配信先に応じて、ログファイルに以下のいずれかの形式を指定できます。
-
JSON
-
Plain
-
w3c
-
Raw
-
Parquet (Amazon S3 のみ)
注記
出力形式を設定できるのは、配信先を初めて作成するときのみです。後で更新することはできません。出力形式を変更するには、配信を削除し、別の配信を作成します。
詳細については、「Amazon CloudWatch Logs API Reference」の「PutDeliveryDestination」を参照してください。
標準ログ記録設定を編集する
CloudFront コンソール
詳細については、以下の各トピックを参照してください。
-
CloudFront コンソールを使用してディストリビューションを更新するには、「ディストリビューションを更新する」を参照してください。
-
CloudFront API を使用してディストリビューションを更新するには、「Amazon CloudFront API Reference」の「UpdateDistribution」を参照してください。
-
CloudWatch Logs の API オペレーションの詳細については、「Amazon CloudWatch Logs API Reference」を参照してください。
アクセスログフィールド
標準ログ記録 (レガシー) がサポートしているものと同じログフィールドを選択できます。詳細については、「ログファイルフィールド」を参照してください。
さらに、以下のリアルタイムログフィールドを選択できます。
-
timestamp(ms)
– タイムスタンプ (ミリ秒単位)。 -
origin-fbl
– CloudFront とオリジン間の先頭バイトのレイテンシーの秒数。 -
origin-lbl
– CloudFront とオリジン間の最終バイトのレイテンシーの秒数。 -
asn
– ビューワーの AS 番号 (ASN)。 c-country
– ビューワーの IP アドレスによって決定される、ビューワーの地理的位置を表す国コード。国コードの一覧については、「ISO 3166-1 alpha-2」を参照してください。 cache-behavior-path-pattern
– ビューワーリクエストに一致したキャッシュ動作を識別するパスパターン。
CloudWatch Logs にログを送信する
CloudWatch Logs にログを送信するには、CloudWatch Logs ロググループを作成するか、既存のものを使用します。CloudWatch Logs ロググループの設定の詳細については、「Working with Log Groups and Log Streams」を参照してください。
ロググループを作成したら、標準ログ記録を許可するために必要なアクセス許可が必要です。必要なアクセス許可の詳細については、「Amazon CloudWatch Logs User Guide」の「Logs sent to CloudWatch Logs」を参照してください。
メモ
-
CloudWatch Logs ロググループの名前を指定する場合は、正規表現パターン
[\w-]
のみを使用します。詳細については、「Amazon CloudWatch Logs API Reference」の「PutDeliveryDestination」 API オペレーションを参照してください。 -
ロググループリソースポリシーがサイズ制限を超えていないことを確認します。CloudWatch Logs トピックの「Log group resource policy size limit considerations」セクションを参照してください。
CloudWatch Logs に送信されたアクセスログの例
{ "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 にログを送信する
Firehose にログを送信するには、Firehose 配信ストリームを作成するか、既存のものを使用します。
配信ストリームの作成の詳細については、「Creating an Amazon Data Firehose delivery stream」を参照してください。
配信ストリームを作成したら、標準ログ記録を許可するために必要なアクセス許可が必要です。詳細については「Amazon CloudWatch Logs User Guide」の「Logs sent to Firehose」を参照してください。
注記
Firehose ストリームの名前を指定する場合は、正規表現パターン [\w-]
のみを使用します。詳細については、「Amazon CloudWatch Logs API Reference」の「PutDeliveryDestination」 API オペレーションを参照してください。
Firehose に送信されたアクセスログの例
{"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 にログを送信する
Amazon S3 にアクセスログを送信するには、S3 バケットを作成するか、既存のものを使用します。CloudFront でログ記録を有効にする場合は、バケット名を指定します。バケットの作成方法については、「Amazon Simple Storage Service ユーザーガイド」の「バケットの作成」を参照してください。
バケットを作成したら、標準ログ記録を許可するために必要なアクセス許可が必要です。詳細については「Amazon CloudWatch Logs User Guide」の「Logs sent to Amazon S3」を参照してください。
-
ログ記録を有効にすると、必要なバケットポリシーを AWS が自動的に追加します。
-
オプトイン AWS リージョンで S3 バケットを使用することもできます。
注記
標準ログ記録 (レガシー) を既に有効にしていて、Amazon S3 への標準ログ記録 (v2) を有効にする場合は、別の Amazon S3 バケットを指定するか、同じバケット内の別のパスを使用する (例: ログプレフィックスやパーティショニングを使用する) ことをお勧めします。これにより、どのログファイルがどのディストリビューションに関連付けられているかを追跡し、ログファイルが互いに上書きされるのを防ぐことができます。
S3 バケットを指定する
S3 バケットを配信先として指定する場合は、次の点に注意してください。
S3 バケット名には正規表現パターン [\w-]
のみを使用できます。詳細については、「Amazon CloudWatch Logs API Reference」の「PutDeliveryDestination」 API オペレーションを参照してください。
S3 バケットにプレフィックスを指定している場合、ログはそのパスの下に表示されます。プレフィックスを指定しない場合、CloudFront は自動的に AWSLogs/
プレフィックスを追加します。{account-id}
/CloudFront
詳細については、「アクセスログへのパスの例」を参照してください。
パーティション
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 互換ファイル名形式
このオプションを使用すると、配信されたアクセスログを含む S3 オブジェクトが、Apache Hive との統合を可能にするプレフィックス構造を使用できるようになります。詳細については、CreateDelivery API オペレーションを参照してください。
例
/
cloudfront
/DistributionId={DistributionId}/my_distribution_log_data
/year={yyyy}/month={MM}/day={dd}/hour={HH}/logs
パーティショニングと Hive 互換オプションの詳細については、「Amazon CloudWatch Logs API Reference」の「S3DeliveryConfiguration」要素を参照してください。
アクセスログへのパスの例
S3 バケットを送信先として指定する場合、以下のオプションを使用してアクセスログへのパスを作成できます。
-
Amazon S3 バケット (プレフィックス付き、またはプレフィックスなし)
-
パーティショニング (CloudFront が提供する変数を使用するか、独自の変数を入力)
-
Hive 互換オプションの有効化
以下の表は、選択したオプションに応じて、アクセスログがバケット内でどのように表示されるかを示しています。
Amazon S3 バケット (プレフィックス付き)
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/{yyyy} |
myFolderA/{yyyy} |
はい | amzn-s3-demo-bucket/MyLogPrefix/myFolderA/year=2025 |
Amazon S3 バケット (プレフィックスなし)
Amazon S3 バケット名 | サフィックスパスで指定したパーティション | サフィックスパスの更新 | Hive 互換の有効化? | アクセスログの送信先 |
---|---|---|---|---|
amzn-s3-demo-bucket |
なし | AWSLogs/{account-id}/CloudFront/ |
いいえ | amzn-s3-demo-bucket/AWSLogs/ |
amzn-s3-demo-bucket |
myFolderA/ |
AWSLogs/{account-id}/CloudFront/myFolderA/ |
いいえ | amzn-s3-demo-bucket/AWSLogs/ |
amzn-s3-demo-bucket |
myFolderA/ |
AWSLogs/{account-id}/CloudFront/myFolderA/ |
はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
amzn-s3-demo-bucket |
myFolderA/{yyyy} |
AWSLogs/{account-id}/CloudFront/myFolderA/{yyyy} |
はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
パーティションとしての AWS アカウント ID
Amazon S3 バケット名 | サフィックスパスで指定したパーティション | サフィックスパスの更新 | Hive 互換の有効化? | アクセスログの送信先 |
---|---|---|---|---|
amzn-s3-demo-bucket |
なし | AWSLogs/{account-id}/CloudFront/ |
はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
amzn-s3-demo-bucket |
myFolderA/{accountid} |
AWSLogs/{account-id}/CloudFront/myFolderA/{accountid} |
はい | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
メモ
-
{account-id}
変数は CloudFront 用に予約されています。Amazon S3 バケットをプレフィックスなしで指定すると、CloudFront はこの変数をサフィックスパスに自動的に追加します。ログが Hive 互換である場合、この変数はaws-account-id
として表示されます。 -
{accountid}
変数を使用すると、CloudFront がアカウント ID をサフィックスパスに追加できます。ログが Hive 互換である場合、この変数はaccountid
として表示されます。 -
サフィックスパスの詳細については、「S3DeliveryConfiguration」を参照してください。
Amazon S3 に送信されたアクセスログの例
#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
標準ログ記録を無効にする
不要になった場合は、ディストリビューションの標準ログ記録を無効にすることができます。
標準ログ記録を無効にするには
-
CloudFront コンソールにサインインします。
-
[ディストリビューション] を選択し、ディストリビューション ID を選択します。
-
[ログ記録] を選択し、[標準ログ送信先] で送信先を選択します。
-
[管理]、[削除] の順に選択します。
-
複数の標準ログ記録がある場合は、前のステップを繰り返します。
注記
CloudFront コンソールから標準ログ記録を削除すると、このアクションは配信と配信先のみを削除します。配信ソースは AWS アカウントから削除されません。配信ソースを削除するには、aws logs delete-delivery-source --name DeliverySourceName
コマンドで配信ソース名を指定します。詳細については、「Amazon CloudWatch Logs API Reference」の「DeleteDeliverySource」を参照してください。
トラブルシューティング
CloudFront 標準ログ記録 (v2) を使用する際の一般的な問題を修正するには、次の情報を使用します。
配信ソースが既に存在している
ディストリビューションの標準ログ記録を有効にすると、配信ソースが作成されます。次に、この配信ソースを使用して、必要な送信先タイプ (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」を参照してください。
サフィックスパスを変更したら、Amazon S3 バケットがログを受信できなくなった
標準ログ記録 (v2) を有効にし、プレフィックスなしでバケット ARN を指定すると、CloudFront はサフィックスパスに以下のデフォルトを追加します。AWSLogs/{account-id}/CloudFront
。CloudFront コンソールまたは UpdateDeliveryConfiguration API オペレーションを使用して別のサフィックスパスを指定する場合は、同じパスを使用するように Amazon S3 バケットポリシーを更新する必要があります。
例: サフィックスパスの更新
-
デフォルトのサフィックスパスは
AWSLogs/{account-id}/CloudFront
で、myFolderA
に置き換えます。 -
新しいサフィックスパスは Amazon S3 バケットポリシーで指定されたパスとは異なるため、アクセスログは配信されません。
-
次のいずれかの手順を実行します。
-
Amazon S3 バケットのアクセス許可を
amzn-s3-demo-bucket/AWSLogs/
から<your-account-ID>
/CloudFront/*amzn-s3-demo-bucket/myFolderA/*
に更新します。 -
ログ記録設定を更新して、デフォルトのサフィックス (
AWSLogs/{account-id}/CloudFront
) を再度使用します。
-
詳細については、「アクセス許可」を参照してください。
ログファイルを削除する
CloudFront は、送信先からログファイルを自動的には削除しません。ログファイルの削除方法については、以下のトピックを参照してください。
Amazon S3
-
「Amazon Simple Storage Service Console ユーザーガイド」の「オブジェクトの削除」
CloudWatch Logs
-
「Amazon CloudWatch Logs User Guide」の「Working with log groups and log streams」
-
「Amazon CloudWatch Logs API Reference」の「DeleteLogGroup」
Firehose
-
「Amazon Data Firehose API Reference」の「DeleteDeliveryStream」
料金
CloudFront では、標準ログの有効化には料金がかかりません。ただし、選択したログ配信先によっては、配信、取り込み、ストレージ、またはアクセスに対して料金が発生する場合があります。詳細については、「Amazon CloudWatch Logs 料金表
各 AWS のサービスの料金の詳細については、以下のトピックを参照してください。
-
注記
Amazon S3 へのログ配信に追加料金はかかりませんが、ログファイルの保存とアクセスには Amazon S3 料金が発生します。[Parquet] オプションを有効にしてアクセスログを Apache Parquet に変換すると、このオプションには CloudWatch 料金が発生します。詳細については、「CloudWatch 料金表」の「Vended Logs」セクション
を参照してください。