AI

パスワードマネージャー比較: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:

機能比較表

比較項目VaultwardenBitwarden(公式)Passbolt
軽量・単一コンテナ✅(SQLite)△(重量)
公式クライアント互換独自拡張のみ
チームPGP共有✅ 最強
LDAP/SSO統合限定✅(Pro)
GitHub Stars40k+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_CLIENTIDBW_CLIENTSECRETBW_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 SSOBitwarden公式
PGP暗号化・チーム共有特化Passbolt

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。