Area 1 のログを収集する
このドキュメントでは、AWS S3 を使用して Area 1 Email Security(Cloudflare 提供)のログを Google Security Operations に取り込む方法について説明します。パーサーは JSON 形式のログを処理します。ネストされた JSON 構造から関連するフィールドを抽出し、統合データモデル(UDM)にマッピングして、地理情報やセキュリティの詳細(添付ファイルのハッシュや処分など)でデータを拡充します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Windows 2016 以降、または
systemd
を使用する Linux ホスト - プロキシの背後で実行されている場合、ファイアウォール ポートが開いている
- Area 1 Email Security(Cloudflare 提供)への特権アクセス
AWS IAM と S3 バケットを構成する
- バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
- AWS コンソールにログインします。
- [S3] > [バケットを作成] に移動します。
- バケットの名前を入力します(例:
area1-security-logs
)。 - 他のデフォルトはそのままにします(必要に応じて暗号化とバージョン管理を構成します)。
- [作成] をクリックします。
- バケットの名前とリージョンを後で参照できるように保存します。
- IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
- 作成した [ユーザー] を選択します。
- [セキュリティ認証情報] タブを選択します。
- [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
- [ユースケース] として [サードパーティ サービス] を選択します。
- [次へ] をクリックします。
- (省略可)説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [CSV ファイルをダウンロード] をクリックし、[アクセスキー] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] で、[権限を追加] をクリックします。
- [ポリシーを直接アタッチする] を選択します。
- AmazonS3FullAccess ポリシーを検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
Area 1 API 認証情報を取得する
- Area 1 Security(Cloudflare)ダッシュボードにログインします。
- [設定] > [API アクセス] に移動します。
- API キー(トークン)を生成します。
- トークンをコピーして、安全な場所に保存します。
必要な Python パッケージを構成する
ログ収集ホスト(AWS VM など)にログインし、次のコマンドを実行して AWS 認証情報を構成します。
pip install boto3 requests aws configure
エリア 1 のログ取得スクリプトを作成する
sudo vi area1_to_s3.py
と入力して次のファイルを作成し、次のコードをコピーします。- 以下を調整します。
#!/usr/bin/env python3 import os import requests import boto3 import datetime import json # Configuration AREA1_API_TOKEN = os.environ.get("AREA1_API_TOKEN") # Load securely from env AWS_PROFILE = os.environ.get("AWS_PROFILE", None) # Optional, for named profiles S3_BUCKET_NAME = "area1-security-logs" LOG_TYPE = "events" # Time range end_time = datetime.datetime.utcnow() start_time = end_time - datetime.timedelta(days=1) def fetch_area1_logs(): url = f"https://api.area1security.com/v1/{LOG_TYPE}" headers = { "Authorization": f"Bearer {AREA1_API_TOKEN}", "Accept": "application/json" } params = { "startDate": start_time.strftime("%Y-%m-%dT%H:%M:%SZ"), "endDate": end_time.strftime("%Y-%m-%dT%H:%M:%SZ") } response = requests.get(url, headers=headers, params=params) response.raise_for_status() return response.json() def upload_to_s3(data): filename = f"area1_{LOG_TYPE}_{start_time.strftime('%Y%m%d')}.json" session = boto3.Session(profile_name=AWS_PROFILE) if AWS_PROFILE else boto3.Session() s3 = session.client("s3") s3.put_object( Bucket=S3_BUCKET_NAME, Key=f"logs/{filename}", Body=json.dumps(data).encode("utf-8"), ContentType="application/json" ) print(f"[✓] Uploaded {filename} to s3://{S3_BUCKET_NAME}/logs/") if __name__ == "__main__": logs = fetch_area1_logs() upload_to_s3(logs)
保存して終了
vi
:esc
をクリックし、:wq
と入力します。
環境変数を保存する
/etc/area1.env
(または/home/user/.area1.env
)に環境変数を格納する安全なファイルを作成するexport AREA1_API_TOKEN="your_actual_area1_api_token" export AWS_PROFILE="<your_aws_programmatic_username>"
ファイルのセキュリティを確保します。
chmod 600 /etc/area1.env
スクリプトを実行してテストする
次のスクリプトを実行します。
python3 area1_to_s3.py
以下のように表示されます。
Uploaded area1_events_20250701.json to s3://area1-security-logs/logs/
Cron を使用して自動化する
sudo vi /usr/local/bin/run_area1.sh
を実行して Cron のラッパー スクリプトを作成し、次のコードをコピーします。#!/usr/bin/env bash set -euo pipefail source /etc/area1.env /usr/bin/python3 /opt/scripts/area1_to_s3.py
ファイルを実行可能にします。
chmod +x /usr/local/bin/run_area1.sh
毎日午前 1 時(UTC)に実行するように設定します。
crontab -e 0 1 * * * /usr/local/bin/run_area1.sh >> /var/log/area1_to_s3.log 2>&1
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
フィードを構成する手順は次のとおりです。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Area1 Logs
)。 - [ソースタイプ] として [Amazon S3] を選択します。
- [ログタイプ] として [Area1 Security] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI(形式は
s3://<your-log-bucket-name>
にする必要があります)。次の内容を置き換えます。your-log-bucket-name
: バケットの名前。
- URI is a: [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 必要に応じて削除オプションを選択します。
- アクセスキー ID: s3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: s3 バケットにアクセスできるユーザーのシークレット キー。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
リージョン: Amazon S3 バケットが配置されているリージョン。
- S3 URI: バケット URI(形式は
s3://<your-log-bucket-name>
にする必要があります)。次の内容を置き換えます。your-log-bucket-name
: バケットの名前。
- URI is a: [サブディレクトリを含むディレクトリ] を選択します。
- Source deletion options: 必要に応じて削除オプションを選択します。
- アクセスキー ID: s3 バケットにアクセスできるユーザー アクセスキー。
- シークレット アクセスキー: s3 バケットにアクセスできるユーザーのシークレット キー。§
- S3 URI: バケット URI(形式は
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- アセットの名前空間: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
alert_id | security_result.rule_id | 値は alert_id フィールドから取得されます。 |
alert_reasons | security_result.description | 値は alert_reasons フィールドから取得されます。 |
attachments.att_size | security_result.about.file.size | 値は attachments.att_size フィールドから取得され、符号なし整数に変換されます。 |
attachments.disposition | security_result.about.user.attribute.labels.value | 値は attachments.disposition フィールドから取得されます。 |
attachments.extension | security_result.about.file.mime_type | 値は attachments.extension フィールドから取得されます。 |
attachments.md5 | security_result.about.file.md5 | 値は attachments.md5 フィールドから取得されます。 |
attachments.name | security_result.about.file.full_path | 値は attachments.name フィールドから取得されます。 |
attachments.sha1 | security_result.about.file.sha1 | 値は attachments.sha1 フィールドから取得されます。 |
attachments.sha256 | security_result.about.file.sha256 | 値は attachments.sha256 フィールドから取得されます。 |
attachments.ssdeep | security_result.about.file.ssdeep | 値は attachments.ssdeep フィールドから取得されます。 |
delivery_mode | security_result.detection_fields.value | 値は delivery_mode フィールドから取得されます。 |
envelope_from | principal.user.email_addresses、network.email.from | 値は envelope_from フィールドから取得されます。 |
envelope_to | network.email.to、target.user.email_addresses | 値は envelope_to フィールドから取得されます。 |
final_disposition | security_result.category_details | 値は final_disposition フィールドから取得されます。 |
message_id | metadata.product_log_id | 値は、'<' と '>' の文字を削除した後の message_id フィールドから取得されます。 |
replyto | network.email.bounce_address | 値は replyto フィールドから取得されます。 |
smtp_helo_server_ip | principal.ip | 値は smtp_helo_server_ip フィールドから取得されます。 |
smtp_helo_server_ip_as_name | principal.location.name | 値は smtp_helo_server_ip_as_name フィールドから取得されます。 |
smtp_helo_server_ip_as_number | principal.asset_id | 値は smtp_helo_server_ip_as_number フィールドから取得され、asset_id: が先頭に追加されます。 |
smtp_helo_server_ip_geo | principal.location.country_or_region、principal.location.state、principal.location.city | 値は、Grok パターンを使用して smtp_helo_server_ip_geo フィールドから抽出されます。 |
smtp_helo_server_name | principal.administrative_domain | 値は smtp_helo_server_name フィールドから取得されます。 |
ソース | metadata.vendor_name | 値は source フィールドから取得されます。フィールドが空の場合、値は area1security に設定されます。 |
件名 | network.email.subject | 値は subject フィールドから取得されます。 |
時間 | metadata.event_timestamp | 値は time フィールドから取得され、タイムスタンプに変換されます。 |
metadata.event_type | 値は EMAIL_TRANSACTION に設定されています。 |
|
metadata.product_name | 値は AREA1 に設定されています。 |
|
metadata.log_type | 値は AREA1 に設定されています。 |
|
security_result.about.user.attribute.labels.key | 値は disposition に設定されています。 |
|
security_result.category | 値は SOFTWARE_MALICIOUS に設定されています。 |
|
security_result.detection_fields.key | 値は delivery_mode に設定されています。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。