Amazon Simple Storage Service - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

Amazon Simple Storage Service

このトピックは、ウェブ ACL トラフィックログの Amazon S3 バケットへの送信に関する情報を提供します。

注記

AWS WAF の使用料金に加えて、ログ記録の料金が請求されます。詳細については、「ウェブ ACL トラフィックのログ記録の料金に関する情報」を参照してください。

ウェブ ACL トラフィックログを Amazon S3 に送信するには、ログ用の Amazon S3 バケットを設定する必要があります。AWS WAF へのログインを有効にする場合、バケット ARN を指定します。ログ記録バケットの作成については、「Amazon Simple Storage Service ユーザーガイド」の「バケットの作成」を参照してください。

注記

AWS WAF は、キータイプ Amazon S3 キー (SSE-S3) および AWS Key Management Service (SSE-KMS) AWS KMS keys の Amazon S3 バケットによる暗号化をサポートします。AWS WAF は、AWS によって管理される AWS Key Management Service キーの暗号化をサポートしていません。

ウェブ ACL は、5 分間隔でログファイルを Amazon S3 バケットに発行します。各ログファイルには、前の 5 分間に記録されたトラフィックのログレコードが含まれています。

ログファイルの最大ファイルサイズは 75 MB です。ログファイルが 5 分以内にファイルサイズの上限に達した場合、ログはレコードの追加を停止し、Amazon S3 バケットに発行してから、新しいログファイルを作成します。

1 つのログファイルには、複数のレコードを含むインターリーブされたエントリが含まれます。ウェブ ACL のすべてのログファイルを表示するには、ウェブ ACL 名、リージョン、およびアカウント ID で集約されたエントリを探します。

命名要件と構文

AWS WAF ログ記録用のバケット名は aws-waf-logs- で始まる必要があり、末尾は任意のサフィックスにすることができます。例えば、aws-waf-logs-DOC-EXAMPLE-BUCKET-SUFFIX です。

バケットの場所は次の構文を使用します。

s3://aws-waf-logs-DOC-EXAMPLE-BUCKET-SUFFIX/

バケットの Amazon リソースネーム (ARN) の形式は次のとおりです。

arn:aws:s3:::aws-waf-logs-DOC-EXAMPLE-BUCKET-SUFFIX

バケット内では、AWS WAF ログは、アカウント ID、リージョン、ウェブ ACL 名、および日時によって決定されるフォルダ構造の下で書き込まれます。

AWSLogs/account-id/WAFLogs/Region/web-acl-name/YYYY/MM/dd/HH/mm

フォルダ内では、ログファイル名は同様の形式になります。

account-id_waflogs_Region_web-acl-name_timestamp_hash.log.gz

フォルダ構造およびログファイル名で使用される時間の指定は、タイムスタンプ形式の仕様 YYYYMMddTHHmmZ に準拠しています。

DOC-EXAMPLE-BUCKET という名前のバケット用の Amazon S3 バケットに存在するログファイルの例を次に示します。AWS アカウント は、11111111111 です。ウェブ ACL は TEST-WEBACL であり、リージョンは us-east-1 です。

s3://DOC-EXAMPLE-BUCKET/AWSLogs/11111111111/WAFLogs/us-east-1/TEST-WEBACL/2021/10/28/19/50/11111111111_waflogs_us-east-1_TEST-WEBACL_20211028T1950Z_e0ca43b5.log.gz
注記

AWS WAF ログ記録用のバケット名は aws-waf-logs- で始まる必要があり、末尾は任意のサフィックスにすることができます。

Amazon S3 にログを発行するための許可

Amazon S3 バケットのウェブ ACL トラフィックログ記録を設定するには、次の許可設定が必要です。AWS WAF フルアクセスマネージドポリシーのいずれか (AWSWAFConsoleFullAccess または AWSWAFFullAccess) を使用すると、これらの許可が設定されます。ログ記録と AWS WAF リソースへのよりきめ細かいアクセスを管理したい場合は、自分でこれらの許可を設定できます。許可の管理については、「IAM ユーザーガイド」の「AWS リソースの アクセス管理」を参照してください。AWS WAF マネージドポリシーの詳細については、「AWS WAF の AWS マネージドポリシー」を参照してください。

次の許可を使用すると、ウェブ ACL ログ記録設定を変更し、Amazon S3 バケットへのログ配信を設定できます。これらの許可は、AWS WAF の管理に使用するユーザーにアタッチされる必要があります。

注記

以下に示すアクセス許可を設定すると、AWS CloudTrail にアクセスが拒否されたことを示すエラーが表示されることがありますが、AWS WAF のログ記録に対するアクセス許可は適切です。

{ "Version":"2012-10-17", "Statement":[ { "Action":[ "wafv2:PutLoggingConfiguration", "wafv2:DeleteLoggingConfiguration" ], "Resource":[ "*" ], "Effect":"Allow", "Sid":"LoggingConfigurationAPI" }, { "Sid":"WebACLLogDelivery", "Action":[ "logs:CreateLogDelivery", "logs:DeleteLogDelivery" ], "Resource": "*", "Effect":"Allow" }, { "Sid":"WebACLLoggingS3", "Action":[ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": [ "arn:aws:s3:::aws-waf-logs-example-bucket" ], "Effect":"Allow" } ] }

すべての AWS リソースでアクションが許可されている場合、その旨はポリシーの "*""Resource" 設定で示されます。これは、各アクションがサポートするすべての AWS リソースでアクションが許可されることを意味します。例えば、アクション wafv2:PutLoggingConfiguration は、wafv2 のログ記録設定リソースでのみサポートされます。

デフォルトでは、Amazon S3 バケットとそれに含まれているオブジェクトはプライベートです。バケット所有者のみが、そのバケットとそれに含まれているオブジェクトにアクセスできます。ただし、バケット所有者は、アクセスポリシーを記述することで他のリソースおよびユーザーに許可を付与することができます。

フローログを作成しているユーザーがバケットを所有している場合、そのバケットにログを発行する許可をフローログに付与するため、サービスは次のポリシーを自動的にバケットにアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::aws-waf-logs-example-bucket/AWSLogs/account-id/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["account-id"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:region:account-id:*"] } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::aws-waf-logs-example-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["account-id"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:region:account-id:*"] } } } ] }
注記

AWS WAF ログ記録用のバケット名は aws-waf-logs- で始まる必要があり、末尾は任意のサフィックスにすることができます。

ログを作成しているユーザーがバケットを所有していないか、バケットに対する GetBucketPolicy および PutBucketPolicy 許可がない場合、ログの作成は失敗します。この場合、バケット所有者はバケットに手動で前述のポリシーを追加して、ログ作成者の AWS アカウント ID を指定する必要があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットポリシーを追加する方法」を参照してください。バケットが複数のアカウントからログを受け取る場合は、各アカウントの AWSLogDeliveryWrite ポリシーステートメントに Resource エレメントエントリを追加します。

例えば、次のバケットポリシーは、AWS アカウント 111122223333aws-waf-logs-doc-example という名前のバケットにログを発行することを許可します:

{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::aws-waf-logs-example-bucket/AWSLogs/111122223333/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["111122223333"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:111122223333:*"] } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::aws-waf-logs-example-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["111122223333"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:111122223333:*"] } } } ] }

Amazon S3 ログファイルのアクセス

Amazon S3 は、必須のバケットポリシーに加えて、アクセスコントロールリスト (ACL) を使用して、AWS WAF ログによって作成されたログファイルへのアクセスを管理します。デフォルトでは、バケット所有者が各ログファイルで FULL_CONTROL 許可を持ちます。ログ配信の所有者 (バケット所有者とは異なる場合) は、許可を持ちません。ログ配信アカウントには、READ および WRITE 許可があります。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「アクセスコントロールリスト (ACL) の概要」を参照してください。

ログファイルは圧縮されます。Amazon S3 コンソールを使用してファイルを開くと、Amazon S3 はログレコードを解凍して表示します。ログファイルをダウンロードする場合、レコードを表示するには解凍する必要があります。