こんにちは、 ネクストモード株式会社のSaaSおじさん久住です。
KeeperのBreachWatchは、ダークウェブ上に漏洩したパスワードを検知し、危険なパスワードの数を可視化してくれる便利な機能です。
今回は「BreachWatchで検出された危険なパスワード数を、APIを使わずに定期的にファイル出力したい」という要望を実現するために試した方法をまとめます。
bw reportコマンドを定期実行する今回は、最も手軽かつ柔軟に自動化できる「①Keeper CommanderのCLIをOSのスケジューラで定期実行する」方式を、実際にMacで動くところまで検証してみました。
まずKeeper CommanderにログインしPersistent Login(永続ログイン)を設定します。
これにより、以降はパスワードやOTPの入力なしでコマンドを実行できるようになります。
設定後は、ログインし直してもパスワード入力を求められなくなり、非対話的にコマンドを実行できるようになります。例えば以下は、BreachWatchのレポートをCSVファイルとして出力するコマンドです。
このコマンドの各要素は以下の通りです。
--config "/path/to/config.json":先ほどのPersistent Login設定(デバイストークンなどの認証情報)が保存された設定ファイルを指定します。これによりパスワードやOTPの入力なしで認証されます-c "...":対話型シェルを起動せず、指定したコマンドを1回だけ実行して終了するオプションです。スケジューラからの自動実行に適していますbw report:BreachWatchのレポート(漏洩が検出されたレコードの一覧)を生成するコマンドです--format csv:レポートの出力形式をCSVに指定します--output /path/to/output.csv:レポートの出力先ファイルパスを指定しますMacではcronよりもlaunchdの利用が推奨されています(cronはmacOSのセキュリティ制限に引っかかりやすいため)。
ファイル名にレポート出力月を含めたかったため(例:breachwatch-report-202607.csv)、日付を都度計算するシェルスクリプトを用意しました。
毎月1日を待たなくても、launchctl startコマンドで即座にテスト実行できるのが地味に便利でした。
実行後、~/keeper-reports/にbreachwatch-report-202607.csvのようなファイルが生成され、エラーログも空であることを確認し、無事自動化に成功しました
this-device timeout 30dは、公式ドキュメントにも明記されている設定可能な上限値(最大30日)です。ただしこれは絶対的な有効期限ではなく、「その日数の間まったくアクセスがなければ自動ログアウトする」という非アクティブタイマーです。
月次実行(例:毎月1日)の場合、月によっては前回実行から31日空くことがあるため、タイムアウトの30日をわずかに超え、2回目以降の実行で再ログインが必要になってしまう可能性があります。
タイムアウトはアクセスのたびにリセットされるため、月次のレポート出力とは別に、毎週や隔週など30日より十分短い間隔で軽量なコマンド(keep-aliveやwhoamiなど)を実行するジョブをlaunchdにもう1つ追加しておくと安全です。
このように毎週アクセスを発生させておけば、30日のタイムアウトに引っかかることなく、月次のレポート出力も安定して自動実行を継続できます。
cronではなくlaunchdを使うのが安全Desktopなどの保護フォルダにすると権限エラーになるので注意keep-aliveなど)を別途仕込んでおくと安心開発コストをかけずに、まずは非APIな方法でBreachWatchの状況を定期的に可視化したい、という場合の参考になれば幸いです。