オンプレミスでVaultwardenをホスティングする。

Vaultwardenロゴ画像

パスワード管理のBitwardenをオンプレミスで運用するために、Vaultwardenを導入する。

2024年7月21日

VaultwardenBitwardenパスワード管理

パスワード管理には頭を悩まされることが多いです。セキュリティの観点ではランダムで十分に長いパスワードをウェブサイトやデバイス別に設定されることが推奨されています。しかし、頻繁にログインするウェブサイトに複雑なパスワードを設定すると思い出して入力するだけで一苦労です。

ウェブサイト側のセキュリティによっては、セッション持続時間が短く設定されていて、数分操作しないと強制ログアウトされてしまって、再ログインが必要な場合もあります。

そのような問題を解消したい場合、何らかのパスワードマネージャーが役に立ちます。最近ではGoogle Chrome/Microsoft EdgeやiOSなどのインターネットブラウザやOSにパスワードマネージャー機能が搭載されている場合も多くありますが、これらはクラウド上にパスワードが保存される仕組みです。

パスワードは暗号化されて、暗号鍵がアカウントに紐付けられたかたちで保管されるので、本人以外はパスワードを照会できないようにな仕組みなっています。しかしながら、自分で管理できないクラウド上に重要な情報が保管されているのは何となく気味が悪いものです。

Bitwardenとは

BitwardenはブラウザやOSベンダーから独立したパスワードマネージャーアプリで、ブラウザアドオンやiOS/Androidアプリをつかって、パスワードの入力を補助してくれます。 アドオンやスマホアプリで一度マスターパスワードによる認証を行えば、各ウェブサイトやデバイスのパスワード入力はURL等から判断して自動で行ってくれます。 パスワード入力を素早く行って、本来やりたかった作業が中断しなくて済むので、非常に助かってます。さらに、Bitwardenは基本的にはSaaS型で、パスワードはクラウド上に保存されるのですが、オンプレミスで用意したサーバで稼働させることもできます。そのため、パスワードの保存先を自分でコントロールすることが可能です。

Vaultwarden

Bitwardenをオンプレミス環境で利用する場合は公式サイトからインストールIDとキーを取得しなければいけません。ですが、BitwardenのAPI互換サービスであるVaultwardenを使用すると、ユーザ登録なしで環境構築ができます。

Bitwarden利用の注意点

ひとつ注意しなければいけないのが、Bitwardenはサーバとの通信をHTTPSに限定している点です。たとえサーバがイントラネット内に配置されていて、暗号化する必要がない場合でもSSL/TLSで保護しなければいけません。さらに、SSL/TLS通信に使用する証明書は信頼できるルート認証局から発行されていないといけないため、オレオレ証明書の利用は不可となります。

この条件を満たす場合、2パターンの構成が考えられます。

  1. オンプレミスサーバをインターネットに公開し、Let's Encrypt等からサーバ証明書を無償で取得する。
  2. オンプレミスサーバをイントラネット等プライベートな環境に配置して、自前で認証局を設置する。認証局からサーバ証明書を発行し、ルート証明書をブラウザやOS等の信頼できるルート証明機関に追加する。

今回構築した環境

パスワードマネージャーのサーバをインターネットに公開するのは抵抗があるため、今回は「2.オンプレミスサーバをイントラネット等プライベートな環境に配置する」としました。Bitwardenはサーバとパスワードを同期すると自立的に動作するので、パスワード入力時にはサーバとの通信が不要です。そのためパスワード同期する場合だけイントラネットに接続する運用でも十分可能です。

構成図で表現すると下図のようになり、イントラネット内に認証局とVaultwardenのサーバを構築し、ラップトップやモバイル端末等のクライアントで動作しているBitwardenのブラウザアドインやアプリとVaultwardenサーバでパスワードを同期させます。

システム構成図

具体的な構築手順

構築手順は長くなるので、別な記事にまとめたいと思っていますが、おおむね次の通りになりました。

  1. 認証局を構築してVaultwarden用のサーバ証明書を発行する。
  2. Vaultwardenサーバを構築する。
  3. Nginxリバースプロキシを構築して、サーバ証明書をつかってVaultwardenの通信をSSL/TLSで保護する。
  4. クライアントにルート証明書をインストールし、サーバ証明書がエラーにならないようにする。