別の AWS アカウントまたは AWS リージョンにある Amazon Simple Storage Service (Amazon S3) バケットに AWS WAF ログを送信したいです。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
S3 バケットを作成する
選択したリージョンの一元化されたログ記録アカウントに S3 バケットを作成します。バケット名には、aws-waf-logs-example-bucket など、aws-waf-logs- プレフィックスで始まるバケット名を入力します。
バケットポリシーを S3 バケットに追加する
次の S3 バケットポリシーを S3 バケットに追加します。
{
"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/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceAccount": [
"111111111111",
"222222222222"
]
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:logs:region:111111111111:*",
"arn:aws:logs:region:222222222222:*"
]
}
}
},
{
"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": [
"111111111111",
"222222222222"
]
},
"ArnLike": {
"aws:SourceArn": [
"arn:aws:logs:region:111111111111:*",
"arn:aws:logs:region:222222222222:*"
]
}
}
}
]
}
前述のポリシーで、次の値を置き換えます。
- aws:SourceAccount 内のアカウント ID を、ログを送信するソースアカウントの ID に置き換えます。
- aws:SourceArn 内の Amazon リソースネーム (ARN) を、ログを発行するソースリソースの ARN に置き換えます。次の形式を使用してください: arn:aws:logs:region:source-account-id:*。
- aws-waf-logs-example-bucket を実際の S3 バケット名に置き換えます。
S3 バケットにログを送信するようにウェブ ACL を設定する
次の例では、S3 バケットは AWS WAF とは異なるアカウントまたはリージョンにあります。ウェブアクセスコントロールリスト (ウェブ ACL) を設定するには、ウェブ ACL を所有するアカウントから put-logging-configuration コマンドを実行する必要があります。
aws wafv2 put-logging-configuration --logging-configuration ResourceArn=arn:aws:wafv2:us-west-1:111111111111:regional/webacl/testing/b4a768c9-4895-4f35-9354-3049ab8acc29,LogDestinationConfigs=arn:aws:s3:::aws-waf-logs-example-bucket --region us-west-1
上記のコマンドで、次の値を置き換えます。
- ResourceArn の arn を ウェブ ACL の ARN に置き換えます。
- LogDestinationConfigs の arn を、一元化されたログ記録アカウントにある S3 バケットの ARN に置き換えます。
- us-west-1 を、ウェブ ACL が配置されているリージョンに置き換えます。Amazon CloudFront リージョン (グローバル) にあるウェブ ACL については、us-west-1 を us-east-1 に置き換えてください。
AWS WAF のウェブ ACL ごとに前のステップを繰り返します。
S3 バケットを暗号化する
AWS WAF は、Amazon S3 および AWS Key Management Service (AWS KMS) のサーバー側暗号化キーの S3 バケットによる暗号化をサポートしています。AWS WAF は AWS マネージドキーの暗号化をサポートしていません。
次の設定の両方を使用する場合、AWS WAF には KMS キーを使用するアクセス許可が必要です。
- ログ記録送信先が、AWS KMS が保存するサーバー側の暗号化キーを使用する。
- カスタマーマネージドキーを使用する。
AWS WAF が S3 バケットにログインできるようにするには、KMS キーに次のキーポリシーを追加します。
{
"Sid": "Allow AWS WAF to use the key",
"Effect": "Allow",
"Principal": {
"Service": [
"delivery.logs.amazonaws.com"
]
},
"Action": "kms:GenerateDataKey*",
"Resource": "*"
}
関連情報
Permissions required to publish logs to Amazon S3 (Amazon S3 にログを発行するために必要なアクセス許可)