スキップしてコンテンツを表示

一元化されたログ記録アカウントで Amazon S3 バケットに AWS WAF ログを送信する方法を教えてください。

所要時間2分
0

別の 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

上記のコマンドで、次の値を置き換えます。

  • ResourceArnarn を ウェブ ACL の ARN に置き換えます。
  • LogDestinationConfigsarn を、一元化されたログ記録アカウントにある S3 バケットの ARN に置き換えます。
  • us-west-1 を、ウェブ ACL が配置されているリージョンに置き換えます。Amazon CloudFront リージョン (グローバル) にあるウェブ ACL については、us-west-1us-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 にログを発行するために必要なアクセス許可)

AWS公式更新しました 6ヶ月前
1コメント

This article was reviewed and updated on 2026-02-23.

エキスパート

応答済み 15日前