Contents
Slack Incoming Webhook の作成と権限設定
手順概要
- Slack 管理画面 → Apps → Create New App → From scratch
- アプリ名例:
ESET‑Protect‑Notifier - OAuth & Permissions で以下のスコープを追加
chat:write(チャンネルへの投稿)- 左メニューの Incoming Webhooks を ON にし、Add New Webhook to Workspace → 通知したいチャンネル(例:#security‑alerts)を選択。生成された URL をコピーして安全に保管する。
重要 Webhook URL は機密情報です。環境変数 (
SLACK_WEBHOOK_URL) や Azure Key Vault、AWS Secrets Manager などのシークレット管理サービスで扱いましょう。
権限のポイント
chat:writeが無いと HTTP 401 エラーが返ります。- 必要最低限のチャンネルだけに限定すれば、権限乱用リスクを低減できます。
ESET Protect 側テンプレートでマルチライン変数を扱うコツ
ESET Protect の通知テンプレートでは以下の変数が標準で利用可能です。
| 変数 | 内容 |
|---|---|
$description |
アラート概要(複数行) |
$details |
詳細情報・ログ(複数行) |
改行が失われる原因
JSON にそのまま埋め込むと、実際の LF (\n) がエスケープされずに空白として処理されます。Slack の mrkdwn では \n(バックスラッシュ+n)を文字列中に入れることで改行が再現できます。
テンプレート作成手順
- コンソール → 通知 → テンプレート に移動
- 「新規作成」→「Webhook」タイプでテンプレート名(例:
Slack‑Alert)を入力 - JSON エディタに下記ベース構造を貼り付け、変数位置を調整
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "*ESET Protect アラート*\n$description" } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "$details" } } ] } |
- 保存 → テスト送信 でプレビューを確認し、期待通りに改行が表示されるかチェックします。
Slack で改行を残すメッセージフォーマット
1. mrkdwn の \n エスケープ(最もシンプル)
|
1 2 3 4 5 6 7 8 |
{ "type": "section", "text": { "type": "mrkdwn", "text": "*概要*\n$description" } } |
ESET Protect 側で $description.replace("\n", "\\n") が利用できない場合は、テンプレートエディタの「置換」機能や外部スクリプトで事前に \n に変換してください。
2. Preformatted block(コードブロック)
長文・ログをそのまま表示したいときはバッククオート3つで囲みます。
|
1 2 3 4 5 6 7 8 |
{ "type": "section", "text": { "type": "mrkdwn", "text": "*検出詳細*\n```$details```" } } |
3. Block Kit の組み合わせ例
| 用途 | 推奨構成 |
|---|---|
| タイトル+概要(短文) | section + mrkdwn、\n エスケープ |
| 複数行テキスト・ログ | section + preformatted block |
| 区切り線で視認性向上 | divider |
| 画像やボタンなどリッチ要素 | image, actions |
JSON ペイロード例と curl / PowerShell によるテスト送信
完全サンプル(改行保持済み)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "*ESET Protect アラート*\n$description" } }, { "type": "divider" }, { "type": "section", "text": { "type": "mrkdwn", "text": "```$details```" } } ] } |
\nが mrkdwn の改行、バッククオートで囲むと$details内のインデントや改行がそのまま表示されます。
curl による送信
|
1 2 3 4 5 6 7 |
# payload.json に上記 JSON を保存した前提 export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX" curl -X POST "$SLACK_WEBHOOK_URL" \ -H "Content-Type: application/json" \ --data @payload.json |
PowerShell による送信
|
1 2 3 4 5 6 7 8 |
$webhookUrl = $env:SLACK_WEBHOOK_URL # 環境変数から取得 $payload = Get-Content -Raw .\payload.json Invoke-RestMethod -Uri $webhookUrl ` -Method Post ` -ContentType 'application/json' ` -Body $payload |
デバッグヒント
失敗した場合は-v(curl)や-Debug(PowerShell)オプションで HTTP ステータスとレスポンス本文を確認してください。
Microsoft Sentinel データコネクタでの高度連携(出典付き)
Microsoft Sentinel は ESET Protect の検知情報を 公式データコネクタ 経由で自動的に取り込めます。これにより、Slack だけでなく SIEM 全体で統合監視が可能です。
| 設定項目 | 内容 |
|---|---|
| コネクタ名 | ESET Protect Platform |
| 必要情報 | API キー、エンドポイント https://api.eset.com/v1/events |
| 手順概要 | Azure ポータル → Sentinel → Data connectors → + Add connector → 「ESET Protect Platform」→ API キーとエンドポイントを入力し Connect |
出典: Microsoft Docs – ESET Protect platform data connector(2026‑04‑06 更新)[^1]
連携のメリット
- アラートが Sentinel のワークブックや自動化プレイブックで即時利用可能
- 複数データソースを横断した相関分析ができ、インシデントの根本原因特定が高速化
よくあるエラーと対処法
| エラーコード / メッセージ | 原因 | 推奨対策 |
|---|---|---|
| Invalid webhook URL | URL のコピー漏れ、前後に空白 | 再取得し、環境変数やシークレットで管理。trim() で余分な空白を除去 |
| rate_limited (429) | 短時間に多数送信 | 1 秒 ≤ 1 件のレートに抑える。指数バックオフ実装(例: Retry-After ヘッダー確認) |
| JSON parse error | カンマ抜け、クオート未エスケープなど構文ミス | jq -e . payload.json や VS Code の JSON バリデータで事前検証 |
| 改行が消える | $description/$details をそのまま埋め込んだ |
前述の \n エスケープまたは preformatted block に切り替え |
| missing_scope | アプリに chat:write が未付与 |
OAuth & Permissions でスコープ追加後、再インストール |
トラブルシューティング手順
1. HTTP ステータスとレスポンス本文を取得。
2. エラー文字列で公式ドキュメント検索(Slack API, Sentinel コネクタ)。
3. 必要に応じてシークレットや環境変数の再設定、JSON 構文チェックを実施。
ベストプラクティス & まとめ
実装上のベストプラクティス
| 項目 | 内容 |
|---|---|
| 機密情報管理 | Webhook URL・API キーは環境変数/シークレットマネージャで保管。コードにハードコーディングしない |
| テンプレートのテスト | 本番導入前に必ず「保存 → テスト送信」→ Slack で表示確認 |
| JSON バリデーション | CI パイプラインに jq や jsonlint を組み込み、プルリクエスト時に検証 |
| レート制御 | 1 秒あたり最大 1 件送信を目安に、バックオフロジック実装 |
| 監査ログの活用 | Sentinel コネクタで取り込んだイベントは Azure Monitor に保存し、長期保管と検索が可能 |
記事の要点
- Slack Incoming Webhook は
chat:write権限だけで完結。取得した URL を安全に管理すれば即利用可能です。 - ESET Protect のマルチライン変数(
$description,$details)はそのままだと改行が失われるため、テンプレート側で\nエスケープまたはコードブロックで包む必要があります。 - 改行保持の主な手段は mrkdwn の
\nと **preformatted block(section)** です。用途に合わせて,divider,image,actions` を組み合わせると可読性が向上します。 - curl / PowerShell によるテスト送信で JSON の構文を検証し、エラーは HTTP ステータスとレスポンス本文から速やかに切り分けます。
- Microsoft Sentinel データコネクタ(公式ドキュメント[^1])を併用すれば、Slack だけでなく SIEM 全体で ESET Protect の情報を統合的に監視できます。
以上の手順とポイントを押さえれば、ESET Protect の脅威検知を Slack にリアルタイムで共有しつつ、必要に応じて Sentinel へも自動インジェストできる堅牢なインシデント対応フローが構築できます。
参考文献
[^1]: Microsoft Docs, ESET Protect platform data connector, 2026‑04‑06. https://learn.microsoft.com/azure/sentinel/data-connectors/eset-protect (閲覧日: 2026‑04‑19)