パスワード管理にKeePassXCを導入した話

パスワード管理にKeePassXCを導入した話

namihira|2021年12月18日
SRE

この記事はランサーズAdvent Calendar 2021の18日目の記事です。

こんにちは。SREチームのnamihira(@kata_dev)です。本稿では、SREチーム内にKeePassXCというパスワードマネージャーを導入した話を書きたいと思います。

導入のきっかけ

ランサーズでは、以下のサービスを展開しています。

  • Lancers
  • Lancers Agent/PROSheet
  •  Lancers Assistant
  •  MENTA

SREチームでは、上記の各サービスにおけるクレデンシャルを一括して管理しています。パスワードマネージャーの導入以前は、各サービスのクレデンシャル情報をGoogleドライブにて管理していましたが、Googleドライブでの運用では以下のような問題がありました。

  • クレデンシャル管理方法が統一されていない
    • Googleドキュメントにかかれてたりスプレッドシートに書かれていたり
    • どのサービスのどこで使うクレデンシャルなのかきちんと明記されていない
  •  クレデンシャル情報の検索が大変
    • Googleドライブ上で管理しているデータが多いため、うまくgrepできない

    特にSREチームでは、Terraform開発環境で使用するAWSクレデンシャルなど、ローカルでクレデンシャルを使用することもあるため、使いたい時にサッと探せるような利便性が求められていました。このような問題を解決できないかと思い、パスワードマネージャーとしてKeePassXCの導入を行いました。

    KeePassXCとは

    KeePassXCはマルチプラットフォームに対応したオープンソースのパスワードマネージャーです。SREチームにはMacOSユーザ・Windowsユーザが両方いるため、マルチプラットフォーム対応していることは必須でした。

    また、オープンソースなので無料で利用できるため比較的導入しやすいと思い、KeePassXCを選択しました。

    UIはこんな感じです。

    KeePassXCのUI

    KeePassXCの使い方

    KeePassXCはエントリーとグループという要素で構成されています。
    エントリはユーザID・パスワードのようなクレデンシャルのセットを管理する要素になっており、RDSやIAMのユーザごとにエントリを作成しています。

    エントリにはユーザ名・パスワードの他にURLやメモ欄などもあるため、RDSのエンドポイントのようなURL情報やIAMユーザのAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYも簡単に管理できます。

    エントリの追加画面

    エントリの追加画面

    グループはファイルシステムにおけるディレクトリと同じような感じで、SREチームでは以下の内容でグループを分けています。

    • 各サービスごと
    • AWSなどのクラウドごと
    • RDSやIAMユーザのようなリソースごと

    グループ・エントリには独自のアイコンを設定することができるので、サービスや環境に応じたアイコンを設定しており視覚的にもクレデンシャル情報の検索性向上やクレデンシャルの選択ミスが発生しないような工夫を行っています。

    例えば、AWSやGCPのようなクラウドサービス・本番環境やステージング環境の環境差異をアイコンで表現するようにしています。(RDSやIAMのようなクラウドリソースのアイコンは分かりにくいためあえて設定していません)

    Lancersの例

    導入・運用方法

    上述したように、サービスのクレデンシャル情報は基本的にはSREチームのみが管理しているため、KeePassXCについてもSREチーム内にのみ導入しました。

    KeePassXCのデータベースファイル自体をGoogleドライブで管理し、SREチームはGoogleドライブのアプリを使い、Googleドライブ上のデータベースファイルをローカルに自動同期するようにしています。
    これにより、各自の手元のKeePassXCの状態は常に最新になるようにしています。

    ただしこの管理方法では気をつけないといけない点があります。
    上述したようにGoogleドライブ上に保存しているKeePassXCのデータベースファイルをローカルに自動同期しているため、KeePassXC上のクレデンシャル情報を同時に別々のユーザが更新してしまうと、変更の競合が発生したり、片方の変更が上書きされてしまうようなケースが発生してしまいます。

    これを防止するために、簡易的ですがKeePassXC更新のためのSlackチャンネルを作り、事前に以下の内容を実施した上で更新を行うようにしています。

    • チームの誰かが更新を行っていないか確認する
    • Slackチャンネルに更新する旨を周知する
    •  Slackチャンネルに更新完了の旨を周知する(スタンプなど)
    更新用チャンネル

    更新用チャンネル

    SREチームの人数は多くないこともあり、上記のやり方で現状問題なく運用できています。

    導入してみて

    KeePassXCを導入したことの大きなメリットとしては、やはり検索性の向上がありました。
    Googleドライブで運用していた時と比較して、IAMやRDSの認証情報にサッとアクセスできるようになったので、バタバタせずにスムーズに業務できるようになりました。

    一方で、現状の運用方法には課題があると感じており、特に今後SREチームの人数に比例して更新頻度も上がると思われるので、運用方法については試行錯誤していきたいと思っています。

    終わりに

    いかがだったでしょうか。
    KeePassXCはシンプルで使いやすくとても優れたツールだと感じています。
    機会があれば是非使ってみてほしいツールの一つです。

    ランサーズAdvent Calendar 2021の19日目は@tomorisさんです。 お楽しみにッッ!!!!