Akamai WAF のログを収集する

以下でサポートされています。

このドキュメントでは、 Google Cloud Storage または AWS S3 を使用して Akamai WAF ログをエクスポートし、Google Security Operations に取り込む方法について説明します。パーサーはログを処理し、syslog 形式と CEF 形式の両方をサポートします。IP アドレス、URL、HTTP メソッド、レスポンス コード、ユーザー エージェント、セキュリティ ルール情報などのフィールドを抽出し、一貫した表現のために統合データモデル(UDM)にマッピングします。また、パーサーは attackDataclientReputation などの特定の Akamai フィールドも処理し、必要なデータ変換を実行して UDM 出力を拡充します。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Google Cloud または AWS への特権アクセス
  • Akamai への特権アクセス

Cloud Storage から Akamai WAF ログをエクスポートして取り込む

このセクションでは、プロセスの最初の手順として、Akamai WAF ログに必要なストレージを設定する方法について説明します。

Google Cloud Storage バケットの作成

  1. Google Cloud コンソールにログインします。
  2. [Cloud Storage バケット] のページに移動します。

    [バケット] に移動

  3. [作成] をクリックします。

  4. [バケットの作成] ページで、バケット情報を入力します。以下のステップでは、操作を完了した後に [続行] をクリックして、次のステップに進みます。

    1. [始める] セクションで、次の操作を行います。

      • バケット名の要件を満たす一意の名前を入力します(例: akamai-waf-logs)。
      • 階層名前空間を有効にするには、展開矢印をクリックして [Optimize for file oriented and data-intensive workloads] セクションを開き、[このバケットで階層的な名前空間を有効にする] を選択します。
      • バケットラベルを追加するには、展開矢印をクリックして [ラベル] セクションを開きます。
      • [ラベルを追加] をクリックし、ラベルのキーと値を指定します。
    2. [データの保存場所の選択] セクションで、次の操作を行います。

      • ロケーション タイプを選択してください。
      • ロケーション タイプのプルダウン メニューを使用して、バケット内のオブジェクト データが永続的に保存されるロケーションを選択します。
      • クロスバケット レプリケーションを設定するには、[クロスバケット レプリケーションを設定する] セクションを開きます。
    3. [データのストレージ クラスを選択する] セクションで、バケットのデフォルトのストレージ クラスを選択します。あるいは、Autoclass を選択して、バケットデータのストレージ クラスを自動的に管理します。

    4. [オブジェクトへのアクセスを制御する方法を選択する] セクションで、[なし] を選択して公開アクセスの防止を適用し、バケットのオブジェクトの [アクセス制御モデル] を選択します。

    5. [オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。

      • [データ保護] で、バケットに設定するオプションを選択します。
      • オブジェクト データの暗号化方法を選択するには、[データ暗号化] というラベルの付いた展開矢印をクリックし、データの暗号化方法を選択します。
  5. [作成] をクリックします。

Cloud Storage の権限を構成する

  1. [サービス アカウントの作成] ページに移動します。

    [サービス アカウントの作成] に移動

  2. Google Cloud プロジェクトを選択します。

  3. Google Cloud コンソールに表示するサービス アカウント名を入力します。

  4. [作成して続行] をクリックします。

  5. バケットに対する roles/storage.admin を付与します。

  6. [完了] をクリックして、サービス アカウントの作成を完了します。

Google Cloud サービス アカウント キー ファイルを作成してダウンロードする

  1. [サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. Google Cloud プロジェクトを選択します。

  3. 新しく作成したサービス アカウントのメールアドレスをクリックします。

  4. [キー] タブをクリックします。

  5. [鍵を追加] メニューをクリックして、[新しい鍵を作成] を選択します。

  6. 鍵のタイプとして [JSON] を選択し、[作成] をクリックします。

    • [作成] をクリックすると、サービス アカウント キーファイルがダウンロードされます。鍵ファイルをダウンロードした後、再度ダウンロードすることはできません。
    • ダウンロードされる鍵の形式は次のとおりです。ここで PRIVATE_KEY は公開鍵 / 秘密鍵ペアの非公開部分です。

Cloud Storage にログを送信するように Akamai WAF を構成する

  1. Akamai コントロール センターにログインします。
  2. [セキュリティ] セクションに移動します。
  3. [ログ] を選択します。
  4. 新しいログ配信を構成します。
    • ログソース: WAF 構成を選択します。
    • 宛先: [Google Cloud Storage] を選択します。
    • 表示名: 一意の名前の説明を入力します。
    • バケット: 作成した Cloud Storage バケットの名前を指定します(例: gs://akamai-waf-logs)。
    • プロジェクト ID: Google Cloud プロジェクトの一意の ID を入力します。
    • サービス アカウント名: 先ほど作成したサービス アカウントの名前を入力します。
    • 秘密鍵: 先ほど生成してダウンロードした JSON キーの private_key 値を入力します。(秘密鍵は PEM 形式で、改行(\n)記号を使用して入力する必要があります。例: -----BEGIN PRIVATE KEY-----\nprivate_key\n-----END PRIVATE KEY-----\n
    • ログ形式: 必要なログ形式(JSON など)を選択します。
    • Push Frequency: ログ配信の頻度を選択します(例: every 60 seconds)。
  5. [検証して保存] をクリックして、宛先への接続を検証し、指定した詳細を保存します。

  6. [次へ] をクリックして、[概要] タブに移動します。

フィードを設定する

Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。

  • [SIEM 設定] > [フィード]
  • [Content Hub] > [Content Packs]

[SIEM 設定] > [フィード] で Google Cloud ストレージを使用してフィードを設定する

フィードを構成する手順は次のとおりです。

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで [単一のフィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Akamai WAF ログ)。
  5. [Source type] として [Google Cloud Storage] を選択します。
  6. [ログタイプ] として [Akamai WAF] を選択します。
  7. Chronicle サービス アカウントとして [サービス アカウントを取得する] をクリックします。
  8. [次へ] をクリックします。
  9. 次の入力パラメータの値を指定します。

    • Storage Bucket URI: Google Cloud ストレージ バケットの URL(例: gs://akamai-waf-logs)。
    • URI Is A: [サブディレクトリを含むディレクトリ] を選択します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
  10. [次へ] をクリックします。

  11. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

コンテンツ ハブからフィードを設定する

次のフィールドに値を指定します。

  • Storage Bucket URI: Google Cloud ストレージ バケットの URL(例: gs://akamai-waf-logs)。
  • URI Is A: [サブディレクトリを含むディレクトリ] を選択します。
  • Source deletion options: 必要に応じて削除オプションを選択します。

詳細オプション

  • フィード名: フィードを識別する事前入力された値。
  • ソースタイプ: Google SecOps にログを収集するために使用される方法。
  • アセットの名前空間: フィードに関連付けられた名前空間。
  • Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。

AWS S3 から Akamai WAF ログをエクスポートして取り込む

このセクションでは、Akamai WAF ログを受信して保存するように Amazon S3 バケットを設定する最初の手順について説明します。

Amazon S3 バケットを構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. 後で参照できるように、バケットの名前リージョンを保存します。
  3. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  4. 作成した [ユーザー] を選択します。
  5. [セキュリティ認証情報] タブを選択します。
  6. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  7. [ユースケース] として [サードパーティ サービス] を選択します。
  8. [次へ] をクリックします。
  9. 省略可: 説明タグを追加します。
  10. [アクセスキーを作成] をクリックします。
  11. [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、今後の参照に備えます。
  12. [完了] をクリックします。
  13. [権限] タブを選択します。
  14. [権限ポリシー] セクションの [権限を追加] をクリックします。
  15. [権限を追加] を選択します。
  16. [ポリシーを直接アタッチする] を選択します。
  17. AmazonS3FullAccess ポリシーを検索します。
  18. ポリシーを選択します。
  19. [次へ] をクリックします。
  20. [権限を追加] をクリックします。

ログを Amazon S3 に送信するように Akamai WAF を構成する

  1. Akamai コントロール センターにログインします。
  2. [セキュリティ] セクションに移動します。
  3. [ログ] を選択します。
  4. 新しいログ配信を構成します。

    • ログソース: WAF 構成を選択します。
    • 宛先: [Amazon S3] を選択します。
    • S3 バケット: 作成した S3 バケットの名前を指定します。
    • リージョン: S3 バケットが配置されている AWS リージョンを選択します。
    • アクセスキー ID とシークレット アクセスキー: 生成した認証情報を指定します。
    • ログ形式: 必要なログ形式(JSON など)を選択します。
    • 配信頻度: ログ配信の頻度を選択します(例: 5 分ごと)。

  5. ログ配信を確認します。

    • LDS を構成したら、S3 バケットで受信ログファイルをモニタリングします。

[SIEM 設定] > [フィード] で AWS S3 を使用してフィードを設定する

フィードを構成する手順は次のとおりです。

  1. [SIEM 設定] > [フィード] に移動します。
  2. [Add New Feed] をクリックします。
  3. 次のページで [単一のフィードを設定] をクリックします。
  4. [フィード名] フィールドに、フィードの名前を入力します(例: Akamai WAF ログ)。
  5. [ソースタイプ] として [Amazon S3] を選択します。
  6. [ログタイプ] として [Akamai WAF] を選択します。
  7. [次へ] をクリックします。
  8. 次の入力パラメータの値を指定します。

    • リージョン: Amazon S3 バケットが配置されているリージョン。
    • S3 URI: バケット URI。s3:/BUCKET_NAME 次のように置き換えます。
      • BUCKET_NAME: バケットの名前。
    • URI is a: ログストリームの構成([単一ファイル] | [ディレクトリ] | [サブディレクトリを含むディレクトリ])に応じて URI タイプを選択します。
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • アクセスキー ID: s3 バケットにアクセスできるユーザー アクセスキー。
    • シークレット アクセスキー: s3 バケットにアクセスできるユーザーのシークレット キー。
  9. [次へ] をクリックします。

  10. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログフィールド(昇順) UDM マッピング 論理
attackData.clientIP principal.ipprincipal.asset.ip リクエストを開始したクライアントの IP アドレス。akamai_siem ログの attackData.clientIP フィールドから抽出されます。
attackData.configId metadata.product_log_id セキュリティ構成 ID。akamai_siem ログの attackData.configId フィールドから抽出されます。security_result オブジェクトの detection_field としても追加されました。
attackData.policyId なし パーサー ロジックで使用され、security_result.summary に値 PolicyId:[value] を入力します。
attackData.ruleActions security_result.actionsecurity_result.action_details トリガーされたルールに基づいて実行されたアクション。akamai_siem ログの attackData.ruleActions フィールドから抽出されます。「deny」は BLOCK にマッピングされ、その他の値(「alert」、「monitor」、「allow」、「tarpit」)は ALLOW にマッピングされます。元の値は action_details にも保存されます。
attackData.ruleData security_result.detection_fields トリガーされたルールに関連付けられたデータ。akamai_siem ログの attackData.ruleData フィールドから抽出されます。キー「RuleData」で security_result.detection_fields に追加されます。
attackData.ruleMessages security_result.threat_name トリガーされたルールに関連付けられているメッセージ。akamai_siem ログの attackData.ruleMessages フィールドから抽出されます。
attackData.ruleSelectors security_result.detection_fields トリガーされたルールに関連付けられたセレクタ。akamai_siem ログの attackData.ruleSelectors フィールドから抽出されます。キー「RuleSelector」で security_result.detection_fields に追加されます。
attackData.ruleTags security_result.category_details トリガーされたルールに関連付けられたタグ。akamai_siem ログの attackData.ruleTags フィールドから抽出されます。
attackData.ruleVersions security_result.detection_fields トリガーされたルールのバージョン。akamai_siem ログの attackData.ruleVersions フィールドから抽出されます。キー「Rule Version」で security_result.detection_fields に追加されます。
clientReputation principal.labels クライアントの評判に関する情報。akamai_siem ログの clientReputation フィールドから抽出されます。キー「reputation」のラベルとしてプリンシパルに追加されます。
cliIPcli_ipprincipal_ip principal.ipprincipal.asset.ip クライアント IP アドレス。ログ形式に応じて、cliIPcli_ipprincipal_ip のいずれかから抽出されます。
cp additional.fields CP コード。cp フィールドから抽出されます。キー「cp」で additional.fields に追加されます。
eventId metadata.product_log_id イベント ID。eventId フィールドから抽出されます。
eventTimelog_date metadata.event_timestamp イベントのタイムスタンプ。ログ形式に応じて、eventTime から抽出されるか、log_date から解析されます。
eventType.eventDefinition.eventDefinitionId target.resource.product_object_id イベント定義 ID。eventType.eventDefinition.eventDefinitionId から抽出されます。
eventType.eventDefinition.eventDescription metadata.description イベントの説明。eventType.eventDefinition.eventDescription から抽出されます。
eventType.eventDefinition.eventName metadata.product_event_type イベント名。eventType.eventDefinition.eventName から抽出されます。
eventType.eventTypeId additional.fields イベントタイプ ID。eventType.eventTypeId から抽出されます。キー「eventTypeId」で additional.fields に追加されます。
eventType.eventTypeName additional.fields イベントタイプの名前。eventType.eventTypeName から抽出されます。キー「eventTypeName」で additional.fields に追加されます。
format なし パーサーがログ形式を特定するために使用します。
geo.asn principal.location.name 自律システム番号(ASN)。ログ形式に応じて geo.asn または AkamaiSiemASN から抽出されます。値の先頭には「ASN 」が付きます。
geo.city principal.location.city 市区町村。ログ形式に応じて geo.city または AkamaiSiemCity から抽出されます。
geo.country principal.location.country_or_region 国。ログ形式に応じて geo.country または AkamaiSiemContinent から抽出されます。
httpMessage.bytes network.sent_bytes HTTP メッセージで送信されたバイト数。httpMessage.bytes から抽出されます。
httpMessage.host target.hostnametarget.asset.hostname ホスト名。ログ形式に応じて httpMessage.host または reqHost から抽出されます。
httpMessage.method network.http.method HTTP メソッド。ログ形式に応じて、httpMessage.methodnetwork_http_methodreqMethod のいずれかから抽出されます。大文字に変換されました。
httpMessage.path target.url リクエストパス。ログ形式に応じて、httpMessage.pathtarget_urlreqPath のいずれかから抽出されます。httpMessage.query が存在する場合は、区切り文字「?」を使用してパスに追加されます。
httpMessage.port target.port ポート。ログ形式に応じて httpMessage.port または reqPort から抽出されます。
httpMessage.protocol なし パーサーがプロトコルを特定するために使用します。
httpMessage.query なし パーサー ロジックで使用され、存在する場合は httpMessage.path に追加されます。
httpMessage.requestId network.session_id リクエスト ID。ログ形式に応じて httpMessage.requestId または reqId から抽出されます。
httpMessage.requestHeadersAkamaiSiemRequestHeaders additional.fields リクエスト ヘッダー。ログ形式に応じて httpMessage.requestHeaders または AkamaiSiemRequestHeaders から抽出されます。キー「AkamaiSiemRequestHeaders」で additional.fields に追加されます。
httpMessage.responseHeadersAkamaiSiemResponseHeaders additional.fields レスポンス ヘッダー。ログ形式に応じて httpMessage.responseHeaders または AkamaiSiemResponseHeaders から抽出されます。キー「AkamaiSiemResponseHeaders」で additional.fields に追加されます。
httpMessage.statusAkamaiSiemResponseStatusnetwork_http_response_codestatusCode network.http.response_code HTTP レスポンス コードログ形式に応じて、httpMessage.statusAkamaiSiemResponseStatusnetwork_http_response_codestatusCode のいずれかから抽出されます。
httpMessage.tlsAkamaiSiemTLSVersiontlsVersion network.tls.version TLS バージョン。ログ形式に応じて、httpMessage.tlsAkamaiSiemTLSVersiontlsVersion のいずれかから抽出されます。
httpMessage.useragentnetwork_http_user_agentUAuseragent network.http.user_agent ユーザー エージェント。ログ形式に応じて、httpMessage.useragentnetwork_http_user_agentUAuseragent のいずれかから抽出されます。
log_description metadata.description ログの説明。log_description から抽出されます。
log_rule security_result.rule_name ログルール。log_rule から抽出されます。
message なし 未加工のログ メッセージ。さまざまな抽出のためにパーサーで使用されます。
network_http_referral_url network.http.referral_url HTTP 参照 URL。network_http_referral_url から抽出されます。
proto なし attackData.policyId が存在しない場合に security_result.summary を入力するために、パーサー ロジックで使用されます。
reqHost target.hostnametarget.asset.hostname ホストをリクエストします。reqHost から抽出されます。
reqId metadata.product_log_idnetwork.session_id リクエスト ID。reqId から抽出されます。
reqMethod network.http.method リクエスト メソッド。reqMethod から抽出されます。
reqPath target.url リクエストパス。reqPath から抽出されます。
reqPort target.port リクエスト ポート。reqPort から抽出されます。
rspContentType target.file.mime_type レスポンスのコンテンツ タイプ。rspContentType から抽出されます。
securityRules security_result.rule_namesecurity_result.about.resource.attribute.labels セキュリティ ルール。securityRules から抽出されます。最初の部分は rule_name にマッピングされ、残りの部分はキー「non_deny_rules」と「deny_rule_format」を持つラベルとして追加されます。
statusCode network.http.response_code ステータス コード。statusCode から抽出されます。
state principal.location.statetarget.user.personal_address.state State。state から抽出されます。
tlsVersion network.tls.version TLS バージョン。tlsVersion から抽出されます。
type metadata.product_event_type イベントタイプ。type から抽出されます。
UA network.http.user_agent ユーザー エージェント。UA から抽出されます。
version metadata.product_versionprincipal.asset.software.version バージョン。version から抽出されます。
なし metadata.event_timestamp イベントのタイムスタンプは、akamai_lds ログの _ts フィールド、akamai_siem ログの httpMessage.start フィールド、または他の形式の log_date フィールドから取得されます。
なし metadata.vendor_name 「Akamai」にハードコードされています。
なし metadata.product_name 「Kona」にハードコードされています。
なし metadata.log_type 「AKAMAI_WAF」にハードコードされています。
なし network.application_protocol akamai_siem ログと akamai_lds ログの場合は「HTTP」、その他の形式の場合は「DNS」に設定します。
なし security_result.severity 「alert」アクションの場合は MEDIUM、「deny」アクションの場合は CRITICAL、その他のアクションの場合は HIGH に設定します。
なし event.idm.read_only_udm.metadata.event_type ほとんどのログ形式では「NETWORK_HTTP」に設定します。eventId フィールドまたは eventData フィールドを含むイベントでは「GENERIC_EVENT」に設定します。cli_ip フィールドまたは p_ip フィールドを含むが reqHost フィールドを含まないイベントでは「STATUS_UPDATE」に設定します。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。