虎の穴ラボ技術ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

パスワードマネージャーVaultwardenのサーバをオンプレに構築して使ってみた

パスワードマネージャーVaultwardenのサーバをオンプレに構築して使ってみた

こんにちは。虎の穴ラボのサカガミです。

この記事は 虎の穴ラボ Advent Calendar 2024 21日目の記事です。

qiita.com

今回は「パスワードマネージャーVaultwardenのサーバをオンプレに構築して使ってみた」 というテーマで書かせていただきます。

目的

一般的に、パスワードの利用には以下のようなリスクがあると言われています。

  • 短くて単純なパスワードの設定
  • パスワードの使いまわし
  • 管理の難しさ

理想的には、Passkey などのパスワードレス認証へ移行することが望ましいですが、 利用するサービスすべてが対応しているわけではありません。 よってパスワードマネージャーを導入してみました。

Vaultwarden とは?

今回は Vaultwarden というオープンソースのパスワードマネージャーを導入しました。 Vaultwarden は、オープンソースのパスワードマネージャーであり、 このジャンルで有名な Bitwarden との互換性を持っています。 オンプレミスでのホスティングが可能であるため、データを自社内に保持することができます。 また、無料で利用が可能です。

Bitwarden もオンプレミスでの運用が可能ですが、 オンプレミス利用時にも Bitwarden 社への登録が必要である点を考慮し Vaultwarden を採用しました。

github.com

実行環境

今回の実行環境は以下のとおりです。

  • 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.yamlenvironment にある 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