はじめに
今回は Amazon CloudFrontの標準ログ(アクセスログ)を試します
デベロッパーガイドの標準ログ (アクセスログ) の設定および使用を参考に、アクセスログの設定を行います
事前に作成済みのCloudFrontディストリビューションの設定変更を行い、アクセスログをS3バケットに保存します。
設定
- 事前に作成済みのCloudFrontディストリビューションの設定画面の「編集」をクリックします
- 標準ログ記録をオンにします
- S3バケットを指定します
- 指定したS3バケットのACLが無効の場合、エラー表示が出ます
- 「Enable ACLs」をクリックします
- エラー表示が消え、バケットの準備が完了します
- 「変更を保存」をクリックします
追記: S3バケット用CloudFormation
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: CloudFront AccessLogs Sample
Parameters:
ApplicationName:
Type: String
Default: 'CloudFrontAccessLogsSample'
Resources:
AccessLogsBucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: LogDeliveryWrite
OwnershipControls:
Rules:
- ObjectOwnership: ObjectWriter
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: 'AES256'
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
LifecycleConfiguration:
Rules:
- Id: 30days
Status: Enabled
ExpirationInDays: 30
NoncurrentVersionExpirationInDays: 30
DeletionPolicy: Retain
AccessLogsBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref AccessLogsBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: SampleCloudFrontAccessLogsBucketRead
Effect: Allow
Principal:
Service: cloudfront.amazonaws.com
Action: s3:GetBucketAcl
Resource: !Sub "arn:aws:s3:::${AccessLogsBucket}"
- Sid: SampleCloudFrontAccessLogsBucketWrite
Effect: Allow
Principal:
Service: cloudfront.amazonaws.com
Action: s3:PutBucketAcl
Resource: !Sub "arn:aws:s3:::${AccessLogsBucket}"
Outputs:
BucketName:
Description: "BucketName"
Value: !Ref AccessLogsBucket
- 前述の「ACL無効のエラー」が出ない設定です
確認
- 指定したS3バケットにログファイルが保存されます
- gunzipコマンド等で解凍し、内容を確認します
アクセスログのフィールドは以下の通りです
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
終わりに
今回はCloudFrontの標準ログ(アクセスログ)を設定しました。
リアルタイムログやエッジ関数のログも取得できるため、必要に応じて試そうと思います。