セットアップ¶
1. 最小権限のサービスアカウント¶
roles/logging.viewer のみを付与したサービスアカウントを作成し、鍵を発行します。
gcloud iam service-accounts create waf-log-viewer --project=YOUR_PROJECT
gcloud projects add-iam-policy-binding YOUR_PROJECT \
--member=serviceAccount:waf-log-viewer@YOUR_PROJECT.iam.gserviceaccount.com \
--role=roles/logging.viewer
gcloud iam service-accounts keys create key.json \
--iam-account=waf-log-viewer@YOUR_PROJECT.iam.gserviceaccount.com
人間のアカウントを使わない理由
多くの組織では人間の Google アカウントに再認証ポリシーが設定されています。
リフレッシュトークン自体は有効なまま、アクセストークンの取得時に1日程度の
間隔で対話的な本人確認を求められる、という挙動です。人間のアカウントで
バックグラウンドの点検を回すと、予測できないタイミングで
Reauthentication failed で止まり、しかもポリシーではなく障害のように
見えます。サービスアカウントはこのポリシーの対象外なので、本サーバーは
サービスアカウント前提で作られています。
鍵ファイルはパーミッション 600 にし、バージョン管理には入れないでください。
2. インストール¶
pip install cloudarmor-mcp
# または
uv tool install cloudarmor-mcp
3. 環境変数¶
| 変数 | 必須 | 意味 |
|---|---|---|
CLOUDARMOR_PROJECT |
○ | ロードバランサのログが入る GCP プロジェクト ID |
GOOGLE_APPLICATION_CREDENTIALS |
○ | サービスアカウント鍵ファイルのパス |
CLOUDARMOR_BACKEND_SERVICES |
絞り込むバックエンドサービス名(カンマ区切り。既定は全て) | |
CLOUDARMOR_HOME_REGION |
自組織のトラフィックとみなす ISO リージョンコード(例 JP)。誤検知レンズが有効になる |
|
CLOUDARMOR_RULES_INI |
ルール INI のパス(下記) | |
CLOUDARMOR_MAX_ENTRIES |
1クエリあたりの取得上限(既定 2000) |
バックエンドサービス名は次で調べられます。
gcloud compute backend-services list --project=YOUR_PROJECT --format='value(name)'
CLOUDARMOR_BACKEND_SERVICES を未設定にするとプロジェクト内の全バックエンドが
対象になります。ロードバランサが1つなら正しい設定ですが、複数ある環境では
ノイズになります。
4. ルール INI(任意)¶
ログ上のルール優先度はただの数字です。この設定で名前を付け、自リージョン発の 遮断のうちどれが想定内かを指定します。
[rules]
101 = 自リージョン外からの深いパス巡回をブロック
500 = AutoDiscover 探索のブロック
1002 = OWASP LFI 対策
[home]
; 自リージョン発でもこの優先度での遮断は想定内(誤検知ではない)
known_normal_priorities = 500, 600
どちらのセクションも任意です。[rules] が無ければ優先度は数字のまま表示され、
[home] が無ければ自リージョン発の遮断はすべて suspicious として列挙されます。
優先度は整数の文字列として照合されます
Cloud Logging はルール優先度を JSON の数値で返すため、実際には 101.0 の
形で届きます。サーバー側で整数値の float を 101 に戻してから照合するので、
INI には 101.0 ではなく 101 と素直に書いてください。
5. MCP クライアントへの登録¶
Claude Code の場合:
claude mcp add cloudarmor -- cloudarmor-mcp
サーバーの環境に上記の環境変数を設定します。定期実行に組み込む前に、設定・ 認証情報・API アクセスまで一気通貫で確認しておきます。
cloudarmor-mcp --check # exit 0 かつ "healthy — cloudarmor-mcp <version> project=<id>"