Django の admin 画面へのログインは、侵入検知・運用監査の観点でかなり重要なイベントです。
本記事では、Django Admin へのログイン成功をフックして、Email / Slack / Discord に通知する方法を、実装・設定・運用の観点でまとめます。
なぜ Admin ログイン通知を入れるのか
- 不正アクセスの早期検知
- 管理者操作の可視化(監査)
- 深夜・想定外 IP からのログイン検知
- 「気づけなかった」を防ぐ
特に Slack / Discord の即時通知 + Email の冗長化は、実運用でよく使われる構成です。
全体構成(今回の方針)
- Django 標準の **ログインシグナル**を使用
- admin ログインのみ通知
- 通知先は以下を想定 * Slack(即時・チーム共有) * Discord(Slack の代替 / 個人用途) * Email(監査・バックアップ)
使用する Django の仕組み
ログイン成功シグナル
- 認証成功時に必ず発火
- admin / 通常ログインの両方で呼ばれる
- `request` が取れるため、パスや IP 判定が可能
実装手順
1. signals.py を作成
2. AppConfig でシグナルを有効化
※ ready() で import しないと本番で発火しないので注意
通知先ごとの実装
Slack 通知(定番・おすすめ)
必要なもの
- Slack Incoming Webhook URL
- ライブラリ: `requests`
実装例
Discord 通知(Slack の代替)
特徴
- Webhook が無料
- 認証不要
- 実装が非常に簡単
実装例
Email 通知(監査・冗長化)
必要な設定
実装例
通知処理の統合
※ 実運用では 常に全部送らないのが一般的
運用上のおすすめ設計
よくある実運用パターン
| イベント | Slack | Discord | |
|---|---|---|---|
| admin ログイン成功 | ✅ | 任意 | ❌ |
| ログイン失敗 | ✅ | 任意 | ✅ |
| 深夜ログイン | ✅ | ❌ | ✅ |
| 重要操作 | ✅ | ❌ | ✅ |
セキュリティ観点での補足
- 可能なら以下も含める * User-Agent * 国情報(Cloudflare 使用時) * staff / superuser 判定
- ログイン失敗も検知
まとめ
- Django Admin ログイン通知は **シグナル利用が王道**
- 通知先は * 即時性:Slack / Discord * 冗長性・監査:Email
- **通知チャネルは and、通知条件は絞る**のが現実解
小規模でも本番でも流用できるので、最初から入れておくのがおすすめ。

