パスワードマネージャーVaultwardenのサーバをオンプレに構築して使ってみた
こんにちは。虎の穴ラボのサカガミです。
この記事は 虎の穴ラボ Advent Calendar 2024 21日目の記事です。
今回は「パスワードマネージャーVaultwardenのサーバをオンプレに構築して使ってみた」 というテーマで書かせていただきます。
目的
一般的に、パスワードの利用には以下のようなリスクがあると言われています。
- 短くて単純なパスワードの設定
- パスワードの使いまわし
- 管理の難しさ
理想的には、Passkey などのパスワードレス認証へ移行することが望ましいですが、 利用するサービスすべてが対応しているわけではありません。 よってパスワードマネージャーを導入してみました。
Vaultwarden とは?
今回は Vaultwarden というオープンソースのパスワードマネージャーを導入しました。 Vaultwarden は、オープンソースのパスワードマネージャーであり、 このジャンルで有名な Bitwarden との互換性を持っています。 オンプレミスでのホスティングが可能であるため、データを自社内に保持することができます。 また、無料で利用が可能です。
Bitwarden もオンプレミスでの運用が可能ですが、 オンプレミス利用時にも Bitwarden 社への登録が必要である点を考慮し Vaultwarden を採用しました。
実行環境
今回の実行環境は以下のとおりです。
- AlmaLinux 9.5
- Docker 27.3.1
サーバの構築
Vaultwarden 公式の GitHub に Docker Compose を用いた構築方法が記載されています。 これを参考に以下のかたちで構築しました。
compose.yaml の作成
まず、vaultwarden
ディレクトリを作成し、以下の内容を compose.yaml
に書き込みます。
vaultwarden.example.com
は稼働させる Vaultwarden の FQDN です。
公式の構築方法に含まれていない nginx-proxy については後ほど説明します。
services: vaultwarden: image: vaultwarden/server restart: unless-stopped environment: - TZ=Asia/Tokyo - DOMAIN=https://vaultwarden.example.com - VIRTUAL_HOST=vaultwarden.example.com volumes: - type: bind source: ./vw-data/ target: /data/ nginx-proxy: image: jwilder/nginx-proxy restart: unless-stopped environment: - TZ=Asia/Tokyo - TRUST_DOWNSTREAM_PROXY=false volumes: - type: bind source: /var/run/docker.sock target: /tmp/docker.sock read_only: true - type: bind source: ./certs/ target: /etc/nginx/certs read_only: true ports: - '443:443' depends_on: - vaultwarden
HTTPS 化する設定
Usage に記載されている通り、 Vaultwarden が Web Crypto API を利用するために HTTPS 化が必要です。 今回はリバースプロキシとして jwilder/nginx-proxy を利用し HTTPS 化します。
compose.yaml
の environment
にある VIRTUAL_HOST
は
指定したドメインでアクセスされた場合にコンテナへ割り振る設定です。
certs
ディレクトリを作成し nginx 用の証明書を配置します。
- ドメイン名.crt: 証明書 + 中間証明書
- ドメイン名.key: 秘密鍵
サーバの起動
以上で準備が整ったため、以下のコマンドでサーバを起動します。
docker compose up -d
起動後に Web ブラウザで開き、ログイン画面が表示されれば構築は完了です。
Vaultwarden を使ってみる
アカウントの作成
まずは「アカウントの作成」をクリックします。
メールアドレスとマスターパスワードを入力し、 「アカウントの作成」をクリックします。
「続ける」をクリックします。
「マスターパスワードでログイン」をクリックします。
Vaultwarden の画面が表示されました。
Google Chrome の拡張機能から利用する
次に Google Chrome の拡張機能 Bitwarden パスワードマネージャー をインストールします。
拡張機能へ追加された Bitwarden をクリックするとログイン画面が表示されます。
デフォルトでは「bitwarden.com」が選択されているため、 「自己ホスト型」へ変更します。
「サーバーURL」へ今回構築したサーバの URL を入力し保存します。 ログイン画面に戻ったら、先程登録したメールアドレスとマスターパスワードでログインしましょう。
試しに GitHub のログイン画面を表示してみると ユーザー名の入力欄に「+新しいアイテム」と表示されました。
これをクリックすると「アイテムの追加」画面が表示されます。
ユーザー名、パスワード、認証キー (TOTP) を入力し保存します。
ログイン画面へ戻ると今度は「アカウントのロックを解除」になりました。
これをクリックすると「本人確認を行う」画面が表示されます。
マスターパスワードを入力し「ロック解除」をクリックします。
再びログイン画面へ戻ると「github.com」が表示されました。 これをクリックするとユーザー名とパスワードが自動で入力されます。
「Sign in」をクリックしてログインします。
二要素認証の画面が表示されたら 右クリックで表示されるメニューから [Bitwarden > 自動入力ログイン > github.com] を選択します。
二要素認証のコードが入力され、ログインできるはずです。
まとめ
今回のブログ記事では、オープンソースのパスワードマネージャーである Vaultwarden をオンプレミス環境で構築し、 実際に利用する手順について解説しました。
Vaultwarden は、パスワード管理を効率化し、セキュリティを向上させる有力なツールです。 オンプレミスでの運用が可能なため、 データ保護に厳しい企業にとって魅力的な選択肢となるのではないでしょうか? 今後もセキュリティ強化のため、パスワードレス認証への移行など、 新しい技術の導入を検討していきたいと思います。
採用情報
虎の穴ラボでは一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧ください。
toranoana-lab.co.jp