TL;DR
- 人事システム連動の AD は退職日に止まる。SaaS は止まらないことが多い
- 「退職日 +7 日 / +30 日 / +90 日」の 3 段階監査で取りこぼしを潰す
- 部門独自 SaaS / 共有アカウント / API トークンが盲点
対象読者
- セキュリティ担当・情シス・IDM 担当
- 退職プロセスの監査責任を持つ方
- 「うちは人事連動してるから大丈夫」と思っている方
起きたこと
ある日、退職して 3 ヶ月たった元社員から、IT 部に電話がかかってきた。「実は私、まだログインできるんですけど…」。
人事連動 AD は退職日に止まっていた。Slack / M365 も止まっていた。しかし、営業部門独自契約の SaaS が残っていた。情シスは契約自体を把握していなかった。
なぜ 3 ヶ月、権限が残るのか
| ID 種別 | 失効トリガ | 退職時運用 |
|---|---|---|
| AD / 基幹 | 人事連動 | 自動 |
| 主要 SaaS (Slack/M365) | SCIM 連動 | 半自動 |
| 部門独自 SaaS | 担当者の手動 | 見落とされやすい |
| 共有アカウント | 失効処理対象外 | 永続して生きている |
3 段階監査
Day 7
- 退職者の全 SaaS 横断ログイン監査
- 経費精算データ + SSO 連携リスト + 部門独自 SaaS 一覧で対象を特定
Day 30
- API トークン / PAT / サービスアカウント紐付け監査
- GitHub / GitLab / Slack Bot / クラウド IAM をスポットチェック
Day 90
- 共有アカウント (○○_admin) の退職前 / 後の利用ログ比較
- 退職者しか触っていなかった共有 ID を特定 → ローテーション
突合スクリプト例
import requests, csv
from datetime import datetime
LEAVERS = fetch_leavers_within(days=90)
SAAS_APIS = [SlackAdmin, M365Admin, GitHubOrg, BoxAdmin]
with open("audit_leavers_login.csv", "w") as f:
w = csv.writer(f)
w.writerow(["leaver_id", "saas", "last_login_at", "should_revoke"])
for leaver in LEAVERS:
for api in SAAS_APIS:
last = api.get_last_login(leaver.email)
if last and last > leaver.leaving_date:
w.writerow([leaver.id, api.name, last, "YES"])
よくある盲点 4 つ
- SSO を切ったが個別ログインが可能だった
- 退職者がオーナーの共有メーリングリスト
- CI/CD パイプラインに退職者の個人 PAT
- 部門独自の Zapier / IFTTT 連携
まとめ
人事連動だけでは不十分。退職日 +7/+30/+90 の 3 段階監査で確認運用に切り替える。
退職題材シリーズ #2。シリーズ全文・運用テンプレ・自動化スクリプト全文は note メンバーシップ (初月無料) で公開しています。
#セキュリティ #退職 #ID管理 #SaaS #IDM #SCIM