経緯
こんにちにおいて、プライベートでも仕事でもパスワードの管理は手間がかかる課題の一つといえると思います。
「パスワード管理アプリ」と検索すれば比較サイトが、「パスワード管理 課題」と検索すればどのような点が問題で、どのような方法で解決するか問題提起とソリューションを紹介するような記事がいくつもヒットします。
- 企業のパスワード管理の重要性|パスワード管理の現状や問題点、安全なパスワード管理方法について紹介 :: GMOトラスト・ログイン ブログ | シングルサインオン(SSO)や認証に関する話題
- 社内システムのID管理によくある課題と解決して効率化するための方法 | 株式会社FGLテクノソリューションズ
- パスワード忘れが授業に影響?SaaS利用拡大で変わる大学のID管理〜事例とともに考える「新しい統合ID認証基盤」
- パスワードレスに関する記事は以下
よんどころなき事情により、管理しなければいけない個人的なパスワードが増えた場合は管理だけでも一苦労です。
そこで、パスワード管理の方法として Bitwarden のオンプレ版 (Bitwarden 自体に SaaS 版とオンプレミス版がある。ただしオンプレミス版もインストールキーの請求が開発元へ必要) の非公式な代替実装 Vaultwarden を使ってみようかと考えました。
成果物
早速成果物を。
今回は Docker 上で Vaultwarden を動作させました。
ディレクトリ構成
ディレクトリ構成とファイルは以下の通り。
/
├ ac-data/
│ └ .gitkeep
├ im-portals/
│ └ .gitkeep
├ sample.env
├ .gitignore
├ compose.yml
├ readme.md
├ reflesh_all.ps1
└ reflesh_all.sh
ac-data
: Vaultwarden のパスワードデータ配置場所im-portal
: https-portal の設定や証明書の配置場所.env
: 環境変数。今回は以下の3つを定義。ACCESS_DOMAIN
: ドメイン名- 起動後にホスト側のPCからWeb画面を開くときに使用するホスト名です。
HOST_PORTNUM
- ホスト側で待ち受けるポート番号。
CONTAINER_PORTNUM
- コンテナ側で待ち受けるポート番号。
HOST_PORTNUM
のポート番号にアクセスすると、CONTAINER_PORTNUM
へマッピングされる。
- コンテナ側で待ち受けるポート番号。
compose.yml
- 設定の本体。
reflesh_all.ps1
‘or (reflesh_all.sh
)- Vaultwarden のデータも含めて全て削除する。どうしても動かなくて全部真っ新からやり直してパスワードもひたすら手打ちで移植していく場合や、テストのためで中がどうなっても良い場合を想定。基本的には使用しない。
compose.yml
services:
app:
image: vaultwarden/server:latest
labels:
akashic.chokidar: "Akashic Chokidar is Docker Container of Vaultwarden."
volumes:
- ./ac-data:/data
tty: true
https:
image: steveltn/https-portal:1
labels:
iha.mukha: "Iha Mukha is Docker Container of HTTPS portal gateway."
ports:
- '${HOST_PORTNUM}:${CONTAINER_PORTNUM}'
restart: always
depends_on:
- app
environment:
DOMAINS: '${ACCESS_DOMAIN} -> http://app:80'
STAGE: local
volumes:
- ./im-portal:/var/lib/https-portal
tty: true
中身は比較的シンプル。参考サイトをベースにして、ホスト名やポート番号を環境変数へ逃がした程度のもの。
.env
ACCESS_DOMAIN=akashic.chokidar.local
HOST_PORTNUM=10443
CONTAINER_PORTNUM=443
先述の通り3つの変数を定義し、 compose.yml
に認識させています。
使い方
準備として、 sample.env
をファイルコピーして .env
にリネームし、 ACCESS_DOMAIN
と HOST_PORTNUM
を適宜編集します。
次に、ローカルで動作させることを前提にしているので、 hosts
等で名前解決を自前で何とかします。
127.0.0.1 akashic.chokidar.local
※右辺(ホスト名)は .env
の ACCESS_DOMAIN
に合わせてください。
その上で、 docker compose up -d
でコンテナをビルド&起動させます。
オレオレ証明書の発行を伴うので多少時間がかかりますが、vaultwarden
のコンテナが以下のメッセージが出力されている状態

[yyyy-mm-dd hh:ii:ss.xxx][start][INFO] Rocket has launched from http://0.0.0.0:80
かつ、 https-portal
のコンテナが以下のメッセージが出力されている状態

s6-rc: info: service legacy-services successfully started
であれば起動した状態なので、ブラウザで https://{ACCESS_DOMAIN}:{HOST_PORTNUM}
(e.x. https://akashic.chokidar.local:10443
) へアクセスします。

アクセスすると Vaultwarden のログイン画面が表示されます。初回はアカウントがないので下部の「アカウントの作成」をクリックします。

必要事項を記入して「アカウントの作成」ボタンをクリック。マスターパスワードが Vaultwarden で管理する全てのデータへアクセスするための情報になるため、取り扱い注意ですね。

アカウントの作成が完了したら、入力したメールアドレスでログインします。「続ける」ボタンをクリックし、早速先程のマスターパスワードを入力します。

ログイン成功すると最初のダッシュボード画面へ遷移します。

早速パスワード情報を入力していきます。


作成したアイテムの右のエリプスというかハンバーガーメニューを展開すると、ユーザ名・パスワードのクリップボードへのコピーができたり、 URL を開いたりすることができます。
実際にはここから URL を開いて、ユーザ名・パスワードをコピペする運用になるかと。
フォルダ分けもできるのである程度の整理もできそうです。後は、ログイン情報だけでなくカードやID情報といったものも覚えさせることができるようです (流石にカードの情報を覚えさせるのは怖いですが……)。
バックアップとリカバリ
肝心のデータのバックアップですが、今回の Vaultwarden のコンテナは SQLite を使用しているため DB がファイルで完結しているようです。
暗号化・復号化の証明書も含めて、全て vw-data
ディレクトリで完結しており、このディレクトリを丸ごとファイルコピーしておくことで、その時点でのバックアップになるようです。
実際、以下の手順を試してバックアップから復元できたことを確認しました。
- 一度コンテナをシャットダウンさせた後でこのディレクトリを丸ごとコピーして
vw-data
ディレクトリの中身を全部吹き飛ばし (全削除)- いったん
docekr compose up -d
でコンテナを起動して再度初期データを生成させ、設定しておいたマスターパスワードではログインできない & 新たにマスターパスワードを発行してログインして中身が空っぽであることを確認し (確かに全削除されていることを確認) - 3.をした上でコンテナをシャットダウンして
vw-data
のコピーを再度vw-data
内に配置して (バックアップデートを復元) - コンテナを起動させたところ、吹き飛ばす前に設定していたマスターパスワードでログインでき、かつ中身も復元されていてそのまま動作したことを確認した
バックアップ・リカバリが簡単なのもアドですね……。
所感
思ったよりも簡単にコンテナを起動して中身を触ることができました。使い勝手も良さそうなので、検討に値しますね。
余談
今回の名前は Vaultwarden から、 Vault を金庫ではなく天蓋の方の意味を採用して天空で Akasha (आकाश) 、 warden は番人なので
以前調べてストックしていた Chokidar (चौकीदार) を採用。むしろ warden → chokidar が先にあったので同じくサンスクリット語から天空で Akasha という流れで「アカシック・コーキダー」。
で、ポータルは口ということで同じくサンスクリット語から mukha (मुख) と「この場所」という意味の iha (इह) で「イーハ・ムカ」という感じです。
参考
比較
Vaultwarden 概要
- クラウドから撤退して自前サーバに自分でwebアプリを建てるおはなし #Docker – Qiita
- 最初にここで知った。
- パスワードマネージャーVaultwardenのサーバをオンプレに構築して使ってみた – 虎の穴ラボ技術ブログ
- Vaultwardenで家族全員のパスワードセキュリティレベルを激アゲした話 #Azure – Qiita
- Vaultwarden: 自宅で安全にパスワードを管理するBitwarden互換サーバー
- 第807回 Vaultwardenでパスワードをセキュアに管理しよう | gihyo.jp
Vaultwarden を Docker で使用する
- Vaultwarden: 自宅で安全にパスワードを管理するBitwarden互換サーバー
- 設定はここのものをベースにさせていただきました。
- Windows 10 PCでパスワード管理サーバVaultwardenを起動してみました | 日記というほどでも
- vaultwardenをセルフホストする for Docker #docker-compose – Qiita
- Vaultwardenで家族全員のパスワードセキュリティレベルを激アゲした話 #Azure – Qiita