導入:なぜログ管理が重要なのか
DevOpsやシステム運用の現場において、ログは「インシデント発生時の原因究明」や「セキュリティ監査」の要となります。特にSaaSを利用している場合、サーバー側のログに直接アクセスできないため、提供されているログ機能をどう活用するかが重要です。本記事では、Backlogを例に、アクセスログと監査ログの違いと、エンジニアが実務でログを扱う際のポイントを解説します。
基礎知識:アクセスログと監査ログの違い
ログを活用する上で、まずはそれぞれの役割を正しく理解しましょう。
アクセスログ:
サーバーとの通信記録です。「いつ、誰が、どのIPから、どのURLにアクセスしたか」という接続情報を記録します。主に「意図しないIPからのアクセスはないか」「異常な通信量が発生していないか」といった通信レベルの監視に使います。
監査ログ:
操作の記録です。「誰が、いつ、課題を作成・更新・削除したか」といったデータに対する操作を記録します。セキュリティ事故やデータの不正操作を追跡するためのもので、コンプライアンス遵守に不可欠です。
実装・解決策:ログの取得と活用
Backlogの場合、プランによって利用可能なログが異なります。
1. プランの確認: アクセスログはプラチナプラン以上、監査ログは「Nulab Pass」契約が前提となります。自社のセキュリティ要件に基づき、必要なプランを契約しましょう。
2. 自動化の検討: 毎月送られてくるダウンロードリンクを手動で管理するのは非効率です。自動化ツールやスクリプトを用いて、定期的にログを取得・保存するパイプラインを構築することをお勧めします。
サンプルプログラム:ログのダウンロードを自動化する(イメージ)
以下は、取得したログのダウンロードURLを定期的にチェックし、ログをダウンロードする処理のイメージコードです。実際には認証処理を組み込む必要があります。
Pythonサンプルコード
import requests
import os
ログのダウンロード先ディレクトリ
DOWNLOAD_DIR = ‘./backlog_logs’
os.makedirs(DOWNLOAD_DIR, exist_ok=True)
def download_backlog_log(year_month, space_id):
# ログのダウンロードURL構成
# 実際には認証情報(ID/Password等)をヘッダーに付与する必要がある
base_url = f”https://backlog.com/download/{space_id}/backlog_access_log.{year_month}.zip”
print(f”{year_month} のログをダウンロード中…”)
# HTTP GETリクエストでファイルを取得
response = requests.get(base_url, stream=True)
if response.status_code == 200:
file_path = os.path.join(DOWNLOAD_DIR, f”access_log_{year_month}.zip”)
with open(file_path, ‘wb’) as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f”ダウンロード完了: {file_path}”)
else:
print(f”ダウンロード失敗: ステータスコード {response.status_code}”)
実行例: 2023年10月のログを取得
download_backlog_log(‘202310’, ‘your_space_id’)
応用・注意点:現場で陥りやすい罠
1. 参照操作の記録漏れ:
監査ログはあくまで「更新系」の操作が中心です。「誰がどの課題を見たか(参照)」までは記録されないことが多いため、機密情報の漏洩対策としては、これだけで完結させず、権限管理(IAMやSSO)と組み合わせることが重要です。
2. 保存期間の制約:
クラウドサービス側の保存期間は、しばしば「契約期間中のみ」や「一定期間」と定められています。退職者やインシデント発生時の長期的な追跡に備え、自社のログサーバー(SIEMなど)に定期的に転送・集約しておくのが、DevOpsエンジニアとして推奨されるベストプラクティスです。
3. 認証情報の取り扱い:
ダウンロードURLには機密情報が含まれる場合があります。スクリプトにURLをハードコーディングせず、環境変数やシークレット管理サービス(AWS Secrets ManagerやHashiCorp Vaultなど)を使って保護してください。

コメント