【入門編】GitLab「Audit Events」で組織の行動を可視化!セキュリティ監査ログの活用とSlackアラート自動化 – バージョン管理・CI/CD活用バイブル

エンジニアの皆さん、こんにちは。現場で長く開発をしていると、ふと不安になる瞬間がありませんか?「誰かが大事なリポジトリを消してしまったら?」「いつの間にか権限が昇格されている人がいたら?」

大規模開発になればなるほど、「誰が、いつ、何をしたか」というトレーサビリティ(追跡可能性)は、単なる管理職の仕事ではなく、我々エンジニアの「開発環境を守るための生命線」になります。

今回は、GitLabの知る人ぞ知る最強の守護神、「Audit Events(監査イベント)」を使い倒して、組織の動きをリアルタイムでSlackに流し込む「現場の防犯システム」を構築しましょう。

—

1. GitLab Audit Eventsとは何か?

一言で言えば、「GitLab内で起きた全ての“ヤバいこと”を記録するブラックボックス」です。

リポジトリの削除、プロジェクトの設定変更、ユーザーの権限昇格、SSHキーの登録など、組織のセキュリティに直結する操作はすべてここに蓄積されます。ただ、管理画面に張り付いてログを見るのは現実的ではありませんよね。

そこで私たちがやるべきは、「重要なイベントをAPIで叩き出し、Slackにリアルタイムで通知する」という自動化です。

—

2. 準備:監視の第一歩を踏み出す

GitLabのAudit Eventsを利用するには、通常はPremium/Ultimateプランが必要ですが、その価値は計り知れません。まずは、最も重要な「誰が何をしたか」を可視化する準備をしましょう。

ステップ1:個人アクセストークンの発行

APIを叩くための権限が必要です。
1. GitLabの「User Settings」→「Access Tokens」へ。
2. `api` スコープを持つトークンを発行します。
3. 重要: このトークンは環境変数(`GITLAB_TOKEN`)として保存し、絶対にコードに直書きしないでください。

—

3. HelloWorld:特定の権限変更をSlackに飛ばす

今回は、「誰かがプロジェクトのメンバー権限を変更したら即座にSlackへ報告する」というスクリプトを実装します。

Pythonで記述します。GitLabのAPIを定期的にポーリングし、新しいイベントがあればSlackへWebhookを飛ばすシンプルな構成です。

import requests
import time

設定項目
GITLAB_URL = “https://gitlab.example.com”
GITLAB_TOKEN = “your_secret_token”
SLACK_WEBHOOK_URL = “https://hooks.slack.com/services/…”

def fetch_audit_events():
headers = {“PRIVATE-TOKEN”: GITLAB_TOKEN}
# 直近のイベントを取得(entity_typeがprojectのものに絞るのがコツ)
url = f”{GITLAB_URL}/api/v4/audit_events?entity_type=Project&entity_id=123″
response = requests.get(url, headers=headers)
return response.json()

def send_to_slack(message):
requests.post(SLACK_WEBHOOK_URL, json={“text”: f”🚨 セキュリティ通知: {message}”})

初回実行時は最新のイベントIDを保持して、差分のみ検知するのがプロのやり方です
last_event_id = None

while True:
events = fetch_audit_events()
if events and events[0][‘id’] != last_event_id:
event = events[0]
msg = f”ユーザー {event[‘author_name’]} が {event[‘entity_name’]} の設定を変更しました。”
send_to_slack(msg)
last_event_id = event[‘id’]

time.sleep(60) # 1分おきに監視

—

4. 現場で「震えるほど」役立つ運用のコツ

このスクリプトを動かし始めたら、次は「運用」のフェーズです。以下の3点を意識するだけで、あなたのチームのセキュリティレベルは段違いに上がります。

1. ノイズを減らす:
すべてのイベントを通知するとSlackが埋まります。`target_details` を解析して、「Owner権限の付与」や「リポジトリの削除」など、本当に危険なものだけをフィルタリングしてください。
2. Webhookの活用:
今回はポーリング方式でしたが、GitLabの「System Hooks」を使えば、イベント発生時にGitLabから直接通知を飛ばすことも可能です。負荷を下げたい場合はこちらを検討しましょう。
3. 「何もしない」ことの自動化:
監査ログを取る目的は「怒るため」ではなく「異常を早期発見し、即座にヒアリングできる体制を作るため」です。通知が来た瞬間に、「今の操作、大丈夫でしたか?」とチャットで聞ける文化こそが、最強のセキュリティです。

—

まとめ:自動化で「安心」を買い取る

「ツールに管理を任せる」ということは、その分、私たちは「創造的な仕事」に集中できるということです。

今回のAudit Events連携をマスターすれば、もう「誰がリポジトリを消したんだ!?」と青ざめてGitLabのログを血眼で探す必要はありません。スクリプトが24時間365日、あなたの代わりに組織を守ってくれます。

まずは、自分のプロジェクトで小さなイベントを拾うところから始めてみてください。その一歩が、チームの信頼を支える大きな基盤になりますよ。

何か詰まったら、いつでも聞いてくださいね。エンジニア同士、共に高みを目指しましょう!

タイトルとURLをコピーしました