こんにちは。CTOの馬場です。
なんだかんだでひとつの機密情報を複数人で管理する必要があるケース、ありますよね。 人に紐付いていないユーザのパスワードとか、 管理者権限をユーザひとりしか指定できないサービスとか...。 なんだかんだでまだまだあると思います。 弊社にもあります。
今回はそのソリューションの選択肢になるかもしれない、 ブラウザから使える共有型パスワードマネージャ RatticWeb と、 そのCLIクライアント go-ratticcli を紹介します。
RatticWeb
Python + Django のWebアプリケーションです。 まあまあ欲しい機能はひととおり揃っています。
- RatticWeb内でグループを作り、グループ内のユーザでパスワードなどを共有できる
- RatticWeb自体のユーザ認証もできるし、LDAPやGoogle OAuth2ログインもできる
- APIキーを発行しHTTP/HTTPS + JSONで利用できる
- RatticWeb上で管理者が「どのパスワードを誰がいつ閲覧したか・操作したか」の監査ログを確認できる
推奨プログラミング言語がPythonとGo、推奨データ通信インターフェースがHTTPS + JSONの弊社としては、 なかなか使いやすいツールです。
もともとのリポジトリ tildaslash/RatticWeb がさっぱりメンテナンスされていないようなので、 わたしがforkしていろいろ手を入れました。
- Python 2.6サポートをやめてPython2.7のみサポート
- 現時点でPython 3未対応。PR welcome
- Django 1.11 LTSまでバージョンアップ
- 伴って各種プラグインやパッケージをバージョンアップ
- 2要素認証のOTPクライアント機能を追加
- 共有型OTPクライアントとしての機能を追加
- 各ユーザの個人用OTPクライアントとしての機能を追加
go-ratticcli
Single binary RatticCLI for RatticWeb. Written by golang. heartbeatsjp/go-ratticcli - GitHub
RatticWebのAPIを操作するGo製のコマンドラインツールです。 RatticWebを使っていくために必要だと思ったのでわたしがイチから作りました。 しばらく使ってみていい感じになったと思うので、メジャーバージョンをリリースしました!
コマンド名は rattic
にしました。
最新版のバイナリをGitHubからダウンロードして置くだけで利用可能です。
releases heartbeatsjp/go-ratticcli - GitHub
peco
と組み合わせて高速検索し、
pbcopy
や xsel
と組み合わせてパスワードをクリップボードに書き込むことで、
操作の快適性・高速性を実現しました。
エントリの一覧はローカルにキャッシュするので、2回目以降の操作からはさらに快適です。
(もちろんパスワード自体はキャッシュしません)
rattic list | peco | rattic show | pbcopy
キャッシュが古くなった時にバックグラウンドでキャッシュを更新する処理を書いたのですが、 Goなので goroutine を使ってとても簡単に書けて感動的でした。
なおこのRatticWebとgo-ratticcliは、まだ弊社で完全な本番導入には至っていません。 RatticWebはシンプルでわかりやすい反面、実現できていないことが多々あります。 弊社の場合は24/365でどんな大規模システムトラブル発生時でも迅速に利用できる必要があるなど要求が複雑なこともあり、他の選択肢も視野に入れつついろいろな準備を進めている一環でして、本エントリはコードを書いてPoCを作って検証していますという紹介です。