AI

シークレット管理比較:HashiCorp Vault vs Infisical vs Doppler でシークレットを管理する

オープンソースラボ編集部2026年6月13日

シークレット管理比較:HashiCorp Vault vs Infisical vs Doppler でシークレットを管理する

APIキー・DBパスワード・SSL証明書・OAuthシークレットを.envファイルで管理することはセキュリティリスクです。シークレット管理プラットフォームにより、シークレットを暗号化して中央管理・アクセス制御・監査ログ・自動ローテーションを実現します。HashiCorp Vault(OSS・最大シェア・エンタープライズ)・Infisical(Vault代替・モダンDX)・Doppler(SaaS+OSS代替)の3つが2026年の主要シークレット管理ツールです。

シークレット管理ツールを使う理由

  • Gitへの誤コミット防止: APIキーが.envや設定ファイルに書かれてGitに混入するリスクをゼロに
  • 動的シークレット: DBパスワードを15分ごとに自動ローテーション→漏洩しても短時間で無効化
  • 監査ログ: 誰がいつどのシークレットにアクセスしたかをすべて記録→コンプライアンス対応
  • 最小権限: サービス別・環境別(Dev/Stag/Prod)にアクセス制御→必要最小限のシークレットのみ渡す

主要ツールの概要

HashiCorp Vault

2015年公開(HashiCorp)、Go製のOSSです。GitHubスター30k+。最大シェアのOSSシークレット管理プラットフォームで、動的シークレット(DBの一時ユーザー自動生成)・シークレットエンジン(KV・PKI・AWS IAM・Kubernetes)・ポリシーベースのアクセス制御・完全な監査ログを提供します。2023年のBSL変更でOpenBao(OSSフォーク)が生まれました。

# docker-compose.yml: HashiCorp Vault(開発/本番)
version: "3.8"
services:
  vault:
    image: hashicorp/vault:1.18
    restart: unless-stopped
    ports:
      - "8200:8200"
    environment:
      VAULT_ADDR: http://0.0.0.0:8200
      VAULT_DEV_ROOT_TOKEN_ID: ${VAULT_ROOT_TOKEN}  # 開発のみ
      VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8200
    cap_add: [IPC_LOCK]
    volumes:
      - vault_data:/vault/data
      - ./vault-config.hcl:/vault/config/vault.hcl

  vault-init:
    image: hashicorp/vault:1.18
    depends_on: [vault]
    environment:
      VAULT_ADDR: http://vault:8200
      VAULT_TOKEN: ${VAULT_ROOT_TOKEN}
    command: |
      sh -c '
        vault secrets enable -path=secret kv-v2 &&
        vault kv put secret/myapp/prod           DB_PASSWORD=supersecret           API_KEY=sk-xxxxx           JWT_SECRET=jwt-secret &&
        vault auth enable approle &&
        vault policy write myapp-policy - <<EOF
path "secret/data/myapp/*" { capabilities = ["read"] }
EOF
        vault write auth/approle/role/myapp-role           token_policies="myapp-policy"           token_ttl=1h token_max_ttl=4h
      '

volumes:
  vault_data:
# Python: HashiCorp Vault でシークレットを取得してアプリに注入
import hvac
import os

VAULT_ADDR = os.environ.get('VAULT_ADDR', 'http://localhost:8200')
VAULT_TOKEN = os.environ.get('VAULT_TOKEN', 'dev-root-token')

def get_vault_client() -> hvac.Client:
    '''Vault クライアントを初期化(AppRole認証)'''
    client = hvac.Client(url=VAULT_ADDR)

    # AppRole 認証(本番環境)
    role_id = os.environ.get('VAULT_ROLE_ID')
    secret_id = os.environ.get('VAULT_SECRET_ID')
    if role_id and secret_id:
        client.auth.approle.login(role_id=role_id, secret_id=secret_id)
    else:
        # 開発環境: トークン認証
        client.token = VAULT_TOKEN
    return client

def get_secrets(path: str) -> dict:
    '''KV v2からシークレットを取得'''
    client = get_vault_client()
    response = client.secrets.kv.v2.read_secret_version(path=path, mount_point='secret')
    return response['data']['data']

def inject_secrets_to_environment(vault_path: str):
    '''Vaultからシークレットを取得してOS環境変数に注入(アプリ起動前に呼び出す)'''
    secrets = get_secrets(vault_path)
    for key, value in secrets.items():
        os.environ[key] = str(value)
    print(f'注入完了: {list(secrets.keys())}')

def rotate_secret(path: str, key: str, new_value: str):
    '''シークレットを更新(ローテーション)'''
    client = get_vault_client()
    current = get_secrets(path)
    current[key] = new_value
    client.secrets.kv.v2.create_or_update_secret(path=path, secret=current, mount_point='secret')
    print(f'ローテーション完了: {path}/{key}')

# 使用例
inject_secrets_to_environment('myapp/prod')
db_password = os.environ.get('DB_PASSWORD')
print(f'DB接続: postgresql://admin:{db_password}@db:5432/myapp')

# Kubernetes での Vault エージェント サイドカー設定
k8s_annotation = '''
# Pod仕様のアノテーション(Vault Agent Injectorが自動でシークレットを注入)
annotations:
  vault.hashicorp.com/agent-inject: "true"
  vault.hashicorp.com/agent-inject-secret-db: "secret/data/myapp/prod"
  vault.hashicorp.com/agent-inject-template-db: |
    {{- with secret "secret/data/myapp/prod" -}}
    export DB_PASSWORD="{{ .Data.data.DB_PASSWORD }}"
    export API_KEY="{{ .Data.data.API_KEY }}"
    {{- end }}
  vault.hashicorp.com/role: "myapp-role"
'''

Infisical

2022年公開、TypeScript製のOSSです。GitHubスター17k+。Vault代替として台頭するモダンなオープンソースシークレット管理プラットフォームで、Webダッシュボード・CLI・SDK・GitHub/GitLab/Kubernetes統合・シークレットバージョニング・ブランチ別シークレット管理・シークレットのオーバーライド(開発者が個別設定を上書き可能)が特徴です。

# docker-compose.yml: Infisical セルフホスト
version: "3.8"
services:
  infisical:
    image: infisical/infisical:latest
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      NODE_ENV: production
      ENCRYPTION_KEY: ${INFISICAL_ENCRYPTION_KEY}  # 32バイトのランダム文字列
      AUTH_SECRET: ${INFISICAL_AUTH_SECRET}
      MONGO_URL: mongodb://mongo:27017/infisical
      REDIS_URL: redis://redis:6379
      SMTP_HOST: ${SMTP_HOST}
      SMTP_PORT: 587
      SMTP_FROM_ADDRESS: noreply@example.com
      SMTP_FROM_NAME: Infisical
      SMTP_USERNAME: ${SMTP_USER}
      SMTP_PASSWORD: ${SMTP_PASS}
      SITE_URL: https://secrets.example.com
    depends_on: [mongo, redis]

  mongo:
    image: mongo:7-jammy
    volumes:
      - mongo_data:/data/db

  redis:
    image: redis:7-alpine

volumes:
  mongo_data:
# Infisical CLI でシークレットをCI/CDで注入
npm install -g @infisical/cli

# ログイン(機械アカウント用トークン)
export INFISICAL_TOKEN="st.xxxxxxxxx"

# シークレットを環境変数に注入してコマンドを実行
infisical run --env=production --projectId=<project-id> -- node dist/server.js

# シークレットをファイルに出力
infisical export --env=production --format=dotenv > .env.production

# GitHub Actions での利用
# infisical secrets get DB_PASSWORD --env=production --plain

Doppler

クラウドSaaSですが比較のため掲載(OSS代替: Infisical)。最もシンプルなシークレット管理SaaSで、環境ごとのシークレット管理・GitHub Actions統合・シークレット変更時のWebhook通知・自動環境変数注入(CLI・Docker・K8s)を提供します。

# Doppler CLI セットアップ
brew install dopplerhq/cli/doppler

# ログインとプロジェクト設定
doppler login
doppler setup  # プロジェクト・環境を選択

# シークレットを注入してアプリを実行
doppler run -- node server.js

# .envファイルとして出力(Doppler→Infisicalへの移行時など)
doppler secrets download --no-file --format=env > .env

機能比較表

比較項目HashiCorp VaultInfisicalDoppler
OSSセルフホスト❌ SaaSのみ
動的シークレット✅ 最強限定
DX・UI✅ 最良
Kubernetes統合✅(Injector)
GitHub Stars30k+17k+N/A

シークレット管理はセキュリティカテゴリ/categories/securityのKeycloak・Vaultwardenと並ぶセキュリティインフラの柱で、DevOpsカテゴリ/categories/devopsのKubernetes・GitHub Actions・OpenTofuと統合して「インフラコードに一切のシークレットを書かない」DevSecOpsを実現します。

FAQ

Q. Vaultで動的DBシークレット(一時パスワード)を設定するには?

A. VaultのDatabase Secrets Engineを有効化してDBの一時クレデンシャルを自動生成します。設定: ①vault secrets enable database②PostgreSQL接続設定: vault write database/config/mydb plugin_name=postgresql-database-plugin connection_url="postgresql://vaultuser:pass@db:5432/myapp" allowed_roles="myapp-role"③ロール作成: vault write database/roles/myapp-role db_name=mydb creation_statements="CREATE ROLE '{{name}}' WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' IN ROLE myapp_user;" default_ttl=15m max_ttl=1h④アプリはデプロイ時にvault read database/creds/myapp-roleを呼んで一時的なパスワード(15分で失効)を取得→DB接続。効果: 漏洩したパスワードは最大15分で無効→常時固定パスワードより大幅にリスク低下。

Q. InfisicalをGitHub ActionsのCI/CDパイプラインに統合するには?

A. Infisical公式GitHub Actionsを使ってシークレットをCI環境変数に注入します。設定: ①Infisical Dashboard→Service Tokens→CI/CD用トークンを生成②GitHub Settings→Secrets→INFISICAL_TOKENとして設定③GitHub Actions workflow: uses: Infisical/secrets-action@v1 with env: productionprojectId: <id>infisicalToken: ${{ secrets.INFISICAL_TOKEN }}→以降のstepでシークレットが環境変数として自動利用可能。複数環境: if: github.ref == 'refs/heads/main'でmainブランチはproduction・developブランチはstagingのシークレットを使用→ブランチで環境を切り替え。

Q. VaultとInfisicalの選び方は?

A. Kubernetes・動的シークレット・エンタープライズ・大規模ならVaultモダンUI・開発者体験重視・スタートアップ・シンプルKVストアならInfisicalが向いています。Vault優位: ①動的シークレット(DB・AWS IAM・PKI証明書の自動発行)②Kubernetes Auth(Pod ServiceAccountで自動認証)③HA構成(Raft統合ストレージ)で高可用性④詳細なポリシー言語(HCL)でゼロトラスト制御。Infisical優位: ①シンプルなWebダッシュボード(Vault UIより直感的)②シークレットオーバーライド(開発者が自分用の値を上書き可能)③GitへのDirect統合(ブランチでDev/Stag/Prod切り替え)④セットアップが簡単(docker-compose 1コマンド)。

Q. シークレットをGitに誤ってコミットしてしまった場合の対処は?

A. 即座に漏洩と判断してAPIキーを失効・ローテーションしてGit履歴から削除します。対処手順: ①漏洩したシークレット(APIキー・パスワード)を即座に無効化(APIプロバイダーのダッシュボードで失効)→新しいキーを発行②Git履歴から削除: git filter-repo --path <file> --invert-paths(or BFG Repo Cleaner: bfg --delete-files .env)→git push --force-with-lease origin --all③GitHub/GitLab: 「シークレットスキャン」が自動検出して通知してくれる場合あり(GitHub: Settings→Security→Secret scanning)。防止策: ①pre-commitフックでgitleaks・truffleHogを実行→コミット前にシークレット検出②.gitignore.env**.key*secret*を追加③全員がgit-secretsをインストール→AWS/GCPキーのパターンをプッシュ前に自動チェック。

まとめ

ユースケース推奨ツール
動的シークレット・K8s・エンタープライズHashiCorp Vault
モダンUI・開発者体験・シンプルKVInfisical
SaaS・セットアップ最速・チーム共有Doppler

関連外部リソース

他の記事も読む

Let's Build Together

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

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