パスワードマネージャー比較:Vaultwarden vs Bitwarden vs Passbolt でセルフホストする
オープンソースラボ編集部 ・ 2026年6月14日
パスワードマネージャー比較:Vaultwarden vs Bitwarden vs Passbolt でセルフホストする
パスワード管理はセキュリティの根幹です。1Password($3/ユーザー/月)やLastPass(データ漏洩の実績あり)に依存せず、自社サーバーで完全にコントロールするOSSセルフホスト型パスワードマネージャーが企業・チームに採用されています。Vaultwarden(Bitwardenクライアント互換・軽量Rust実装)・Bitwarden(公式セルフホスト版)・Passbolt(チーム共有特化・PGP暗号化)の3つが2026年のデファクトスタンダードです。
セルフホスト型パスワードマネージャーを使う理由
- セキュリティ管理: 暗号化されたボルトデータが自社サーバーのみに保存→クラウドサービスの漏洩リスクゼロ
- コスト削減: 1Password Teams($4/ユーザー/月)→セルフホストで$10/月のVPS費用のみ
- コンプライアンス: SOC2・ISO27001・GDPRでの社内パスワード管理要件をオンプレ管理で満足
- 完全制御: ユーザー管理・ポリシー・共有ルールを自社ポリシーに完全準拠させる
主要ツールの概要
Vaultwarden
Rustで実装したBitwarden Server互換の非公式OSSです。GitHubスター40k+。最軽量のBitwarden互換サーバーで、オリジナルBitwardenが必要とする複数コンテナ・SQLサーバーを不要にし、SQLiteを使って単一コンテナで動作します。Bitwarden公式クライアント(Desktop・Mobile・ブラウザ拡張)をすべてそのまま使えます。
# docker-compose.yml: Vaultwarden
version: "3.8"
services:
vaultwarden:
image: vaultwarden/server:latest
restart: unless-stopped
ports:
- "80:80"
volumes:
- vw_data:/data
environment:
DOMAIN: https://vault.example.com
ADMIN_TOKEN: ${VW_ADMIN_TOKEN}
SIGNUPS_ALLOWED: "false"
INVITATIONS_ALLOWED: "true"
SMTP_HOST: ${SMTP_HOST}
SMTP_FROM: vault@example.com
SMTP_PORT: 587
SMTP_SECURITY: starttls
SMTP_USERNAME: ${SMTP_USER}
SMTP_PASSWORD: ${SMTP_PASS}
EMERGENCY_ACCESS_ALLOWED: "true"
SENDS_ALLOWED: "true"
ORG_CREATION_USERS: admin@example.com
volumes:
vw_data:
# Nginx リバースプロキシ(HTTPS必須)
# server {
# listen 443 ssl;
# server_name vault.example.com;
# location / { proxy_pass http://vaultwarden:80; proxy_set_header Host $host; }
# }
# Python: Bitwarden CLI (bw) でシークレット管理を自動化
import subprocess
import json
import os
import base64
BW_CLIENT_ID = os.environ['BW_CLIENTID']
BW_CLIENT_SECRET = os.environ['BW_CLIENTSECRET']
BW_SERVER_URL = 'https://vault.example.com'
BW_MASTER_PASSWORD = os.environ['BW_MASTER_PASSWORD']
def bw_sync() -> bool:
'''Bitwarden CLIでセッション管理とシークレット取得を行う'''
# サーバー設定
subprocess.run(['bw', 'config', 'server', BW_SERVER_URL], check=True)
# ログイン(APIキー使用)
env = {
**os.environ,
'BW_CLIENTID': BW_CLIENT_ID,
'BW_CLIENTSECRET': BW_CLIENT_SECRET,
}
subprocess.run(['bw', 'login', '--apikey'], env=env, check=True)
# マスターパスワードでセッションをアンロック
result = subprocess.run(
['bw', 'unlock', '--passwordenv', 'BW_MASTER_PASSWORD', '--raw'],
env={**env, 'BW_MASTER_PASSWORD': BW_MASTER_PASSWORD},
capture_output=True,
text=True,
check=True,
)
session_key = result.stdout.strip()
# 同期
subprocess.run(['bw', 'sync', '--session', session_key], check=True)
return session_key
def get_secret(session_key: str, item_name: str, field: str = 'password') -> str:
'''Bitwardenアイテムからシークレットを取得'''
result = subprocess.run(
['bw', 'get', field, item_name, '--session', session_key],
capture_output=True, text=True, check=True,
)
return result.stdout.strip()
def inject_secrets_to_env(session_key: str, mapping: dict[str, tuple[str, str]]):
'''Bitwardenからシークレットを取得してDockerサービスの環境変数に注入'''
secrets = {}
for env_var, (item_name, field) in mapping.items():
secrets[env_var] = get_secret(session_key, item_name, field)
return secrets
# 使用例: デプロイ時にVaultwardenからDBパスワードを取得
session = bw_sync()
env_secrets = inject_secrets_to_env(session, {
'DB_PASSWORD': ('Production Database', 'password'),
'API_KEY': ('Stripe API', 'notes'),
'JWT_SECRET': ('App JWT Secret', 'password'),
})
print('シークレット注入完了:', list(env_secrets.keys()))
Bitwarden(公式セルフホスト)
Bitwardenの公式セルフホスト版です。企業向け機能(エンタープライズポリシー・ディレクトリコネクター・LDAP/AD連携・SSO/SAML統合)を完備しています。重量級でKubernetes・オンプレ大規模環境に向きます。
# Bitwarden 公式セルフホスト(Docker統合インストーラー)
curl -Lso bitwarden.sh https://func.bitwarden.com/api/dl/?app=self-host&platform=linux
chmod 700 bitwarden.sh
./bitwarden.sh install # インストーラーがdocker-compose.ymlを自動生成
./bitwarden.sh start
# Bitwarden管理者ポータル: https://your-domain/admin
Passbolt
2016年公開、PHP製のOSSです。GitHubスター5k+。PGP暗号化ベースのチームパスワード共有に特化したパスワードマネージャーで、すべてのパスワードをユーザーの公開鍵で暗号化して共有します。エンドツーエンド暗号化のままチームへの共有・フォルダー管理・監査ログが使えます。
# docker-compose.yml: Passbolt CE
version: "3.8"
services:
db:
image: mariadb:11
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "true"
MYSQL_DATABASE: passbolt
MYSQL_USER: passbolt
MYSQL_PASSWORD: ${PASSBOLT_DB_PASS}
volumes:
- passbolt_db:/var/lib/mysql
passbolt:
image: passbolt/passbolt:latest-ce
restart: unless-stopped
ports:
- "443:443"
environment:
APP_FULL_BASE_URL: https://passbolt.example.com
DATASOURCES_DEFAULT_HOST: db
DATASOURCES_DEFAULT_USERNAME: passbolt
DATASOURCES_DEFAULT_PASSWORD: ${PASSBOLT_DB_PASS}
DATASOURCES_DEFAULT_DATABASE: passbolt
EMAIL_TRANSPORT_DEFAULT_HOST: ${SMTP_HOST}
EMAIL_TRANSPORT_DEFAULT_USERNAME: ${SMTP_USER}
EMAIL_TRANSPORT_DEFAULT_PASSWORD: ${SMTP_PASS}
EMAIL_DEFAULT_FROM: no-reply@passbolt.example.com
volumes:
- passbolt_gpg:/etc/passbolt/gpg
- passbolt_jwt:/etc/passbolt/jwt
depends_on: [db]
volumes:
passbolt_db:
passbolt_gpg:
passbolt_jwt:
機能比較表
| 比較項目 | Vaultwarden | Bitwarden(公式) | Passbolt |
|---|---|---|---|
| 軽量・単一コンテナ | ✅(SQLite) | △(重量) | 中 |
| 公式クライアント互換 | ✅ | ✅ | 独自拡張のみ |
| チームPGP共有 | △ | △ | ✅ 最強 |
| LDAP/SSO統合 | 限定 | ✅ | ✅(Pro) |
| GitHub Stars | 40k+ | 15k+ | 5k+ |
セキュリティカテゴリ/categories/securityのKeycloak(IdP)とVaultwardenを連携させてSSO+パスワードマネージャー一元管理するセキュリティスタックが採用されています。DevOpsカテゴリ/categories/devopsのCI/CDパイプラインでBitwarden CLIを使ってシークレット管理を自動化するパターンが多くの開発チームで活用されています。
FAQ
Q. Vaultwardenを本番環境で安全に運用するポイントは?
A. HTTPS必須・管理トークンの保護・自動バックアップ・シグナップ無効化が重要です。①HTTPS設定: VaultwardenはHTTPS必須(証明書なしでは動作しない)—Nginxリバースプロキシ + Let's EncryptでDOMAIN=https://vault.example.comを設定②シグナップ無効化: 初期セットアップ後にSIGNUPS_ALLOWED=falseに変更してパブリックアクセスを阻止→管理者がAdmin画面から招待を送る③管理トークン: ADMIN_TOKENには最低32文字のランダム文字列を使用—openssl rand -base64 48で生成④自動バックアップ: vw_data/ディレクトリを毎日S3/B2に自動バックアップ(rclone使用)→SQLiteファイルdb.sqlite3が主要データ。
Q. PassboltのPGP暗号化でチームにパスワードを安全に共有するには?
A. 各ユーザーのPGP公開鍵でパスワードを暗号化してシェアします。仕組み: ①Passboltブラウザ拡張がユーザーのPGP鍵ペアをブラウザ内に生成・保管②パスワードを共有する際、サーバーは「受信者の公開鍵でパスワードを再暗号化」して渡す③サーバー側ではパスワードの平文を一切保持しない(エンドツーエンド暗号化)→仮にDBが漏洩してもパスワードは保護される。チーム共有: パスワードをフォルダーに整理→チーム(グループ)に共有→グループメンバーの公開鍵で一括暗号化→各メンバーが自分の秘密鍵で復号。監査ログ: 誰がいつどのパスワードにアクセスしたかをタイムスタンプ付きで全記録。
Q. VaultwardenとBitwarden公式版のどちらを選ぶべきですか?
A. 小規模チーム(〜50人)・リソース節約・シンプル運用ならVaultwarden、大企業・AD/LDAP統合・SAML SSO・コンプライアンスレポートが必要ならBitwarden公式が向いています。Vaultwarden優位: ①SQLite使用で単一Dockerコンテナ(RAM 50MB程度)で運用可能②Bitwarden公式クライアント(Desktop・iOS・Android・Chrome)がすべてそのまま動作③設定が単純でメンテナンスコストが低い。Bitwarden公式版優位: ①エンタープライズポリシー(マスターパスワード強度・2FA強制)②ディレクトリコネクター(AD/LDAP自動ユーザー同期)③SAML 2.0 SSO(Azure AD・Okta・Keycloak連携)④SOC2 Type2レポート(コンプライアンス証明)。
Q. CI/CDパイプラインでBitwarden CLIを使ってシークレットを注入するには?
A. GitHub ActionsでBitwarden CLI を使ってシークレットを取得してデプロイ環境変数に注入します。設定: ①BW_CLIENTID・BW_CLIENTSECRET・BW_PASSWORDをGitHub Secretsに設定②GitHub Actionsワークフローでbitwarden/sm-action@v2(Bitwarden Secrets Manager Action)を使う③または手動でbw login --apikey && bw unlock --passwordenv BW_PASSWORD --rawでセッションキーを取得→bw get password <item-name>でシークレット取得→環境変数にecho "DB_PASS=$(bw get password 'Prod DB')" >> $GITHUB_ENV。Bitwarden Secrets Manager(BSM): 専用のCI/CD向けシークレット管理SaaS(セルフホスト版あり)でGitHub Actions・GitLab CI・Kubernetes Operatorと直接統合。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 小規模チーム・軽量・Bitwarden互換 | Vaultwarden |
| 大企業・AD/LDAP・SAML SSO | Bitwarden公式 |
| PGP暗号化・チーム共有特化 | Passbolt |