Vaultとは
Vaultとは
HashiCorp Vault(以降、Vault)は、シークレット(機密情報)を安全に管理するための統合プラットフォームです。パスワード、APIキー、証明書、暗号化キーなど、あらゆる種類の機密情報を一元管理し、アクセス制御と監査を提供します。
Vaultが解決する課題
現代のアプリケーション開発では、以下のような課題に直面します:
1. シークレットの分散管理
課題:
- 設定ファイルにパスワードをハードコーディング
- 環境変数に機密情報を保存
- 複数のシステムに認証情報が散在
- バージョン管理システムに機密情報がコミットされるリスク
Vaultの解決策:
- すべてのシークレットを一元管理
- 暗号化された安全なストレージ
- APIベースの動的なシークレット取得
2. アクセス制御の複雑さ
課題:
- 誰がどのシークレットにアクセスできるか管理が困難
- 細かい権限設定ができない
- アクセス履歴の追跡が難しい
Vaultの解決策:
- ポリシーベースのアクセス制御
- 多様な認証方法のサポート
- 完全な監査ログ
3. シークレットのライフサイクル管理
課題:
- パスワードの定期的なローテーションが困難
- 使用されなくなったシークレットの削除漏れ
- 有効期限の管理が煩雑
Vaultの解決策:
- 動的シークレットの自動生成と失効
- リース(有効期限)の自動管理
- シークレットのバージョン管理
Vaultの主要な特徴
1. セキュアなシークレットストレージ
Vaultは、すべてのシークレットを暗号化して保存します。
# シークレットの保存
vault kv put secret/myapp/config \
username=admin \
password=supersecret
# シークレットの取得
vault kv get secret/myapp/config
特徴:
- 保存時の暗号化(Encryption at Rest)
- 転送時の暗号化(TLS/HTTPS)
- メモリ内でも暗号化
2. 動的シークレット
Vaultは、必要に応じてシークレットを動的に生成します。
従来の方法:
アプリケーション → 固定のDBパスワード → データベース
Vaultを使用:
アプリケーション → Vault → 一時的なDBパスワード生成 → データベース
↓
有効期限後に自動失効
メリット:
- シークレットの有効期限を短く設定可能
- 漏洩時の影響を最小化
- 自動的なローテーション
3. データ暗号化サービス
Vaultは、暗号化機能をサービスとして提供します。
# データの暗号化
vault write transit/encrypt/my-key \
plaintext=$(echo "secret data" | base64)
# データの復号化
vault write transit/decrypt/my-key \
ciphertext=vault:v1:8SDd3WHDOjf7mq69CyCqYjBXAiQQAVZRkFM13ok481zoCmHnSeDX9vyf7w==
用途:
- アプリケーションデータの暗号化
- 暗号化キーの一元管理
- 暗号化処理のオフロード
4. リース(有効期限)とリニューアル
すべてのシークレットには有効期限(リース)が設定されます。
# シークレットの取得(リース付き)
vault read database/creds/my-role
Key Value
--- -----
lease_id database/creds/my-role/2f6a614c-4aa2-7b19-24b9-ad944a8d4de6
lease_duration 1h
lease_renewable true
password A1a-BbC2cD3d
username v-token-my-role-x4xd9n8ut92dxv93kd9j-1487604208
特徴:
- 自動的な有効期限管理
- リース更新(Renewal)のサポート
- 失効(Revocation)の即座な実行
5. 多様な認証方法
Vaultは、様々な認証方法をサポートしています。
| 認証方法 | 用途 | 特徴 |
|---|---|---|
| Token | 基本的な認証 | シンプルで汎用的 |
| Username/Password | 人間のユーザー | 直感的で使いやすい |
| AppRole | アプリケーション | 自動化に適している |
| Kubernetes | K8s環境 | サービスアカウント連携 |
| AWS | AWS環境 | IAMロール連携 |
| LDAP/AD | 企業環境 | 既存のディレクトリ統合 |
詳細は認証方法の概要をご覧ください。
6. 詳細なアクセス制御
ポリシーを使用して、きめ細かいアクセス制御を実現します。
# 読み取り専用ポリシー
path "secret/data/myapp/*" {
capabilities = ["read", "list"]
}
# 管理者ポリシー
path "secret/data/myapp/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
詳細はポリシーの構文をご覧ください。
7. 完全な監査ログ
すべての操作が監査ログに記録されます。
{
"time": "2024-01-15T10:30:45.123456Z",
"type": "response",
"auth": {
"client_token": "hmac-sha256:...",
"display_name": "token-user",
"policies": ["default", "myapp-read"]
},
"request": {
"operation": "read",
"path": "secret/data/myapp/config"
},
"response": {
"data": {
"data": "hmac-sha256:..."
}
}
}
詳細は監査ログをご覧ください。
Vaultのアーキテクチャ
基本構成
┌─────────────────────────────────────────┐
│ クライアント(CLI/API) │
└─────────────────┬───────────────────────┘
│ HTTPS/TLS
┌─────────────────▼───────────────────────┐
│ Vault Server │
│ ┌─────────────────────────────────┐ │
│ │ 認証・認可エンジン │ │
│ └─────────────────────────────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ シークレットエンジン │ │
│ │ - KV (Key-Value) │ │
│ │ - Database │ │
│ │ - AWS │ │
│ │ - PKI │ │
│ └─────────────────────────────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ ストレージバックエンド │ │
│ │ (暗号化されたデータ) │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
シール/アンシール
Vaultは起動時に「シール」された状態で開始します。
シール状態:
- すべてのデータが暗号化されている
- APIリクエストを受け付けない
- 暗号化キーがメモリにロードされていない
アンシール状態:
- 暗号化キーがメモリにロードされている
- APIリクエストを処理できる
- シークレットへのアクセスが可能
# Vaultのステータス確認
vault status
# アンシール(複数のキーが必要)
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>
Vaultの利用形態
Vaultには3つの利用形態があり、それぞれ異なる機能とサポートレベルを提供します。
1. Vault OSS(オープンソース版)
概要:
- 無料で利用可能
- コミュニティサポート
- 基本的なシークレット管理機能をすべて利用可能
主な機能:
- ✅ セキュアなシークレットストレージ
- ✅ 動的シークレット生成
- ✅ データ暗号化サービス
- ✅ 多様な認証方法
- ✅ ポリシーベースのアクセス制御
- ✅ 監査ログ
- ✅ 高可用性(HA)構成
適している環境:
- 小規模から中規模の環境
- 開発・テスト環境
- 単一組織での利用
- コスト重視のプロジェクト
2. Vault Enterprise(有償版)
概要:
- 商用サポート付き
- エンタープライズ向けの高度な機能
- SLA保証
OSS版に加えて利用可能な機能:
マルチテナンシー
- Namespaces - 組織・チーム単位での完全な分離
高可用性とスケーラビリティ
- Performance Replication - 複数リージョンでの読み取りスケーリング
- Disaster Recovery Replication - 災害対策のためのレプリケーション
- Performance Standby Nodes - 読み取りリクエストを処理するスタンバイノード
高度なセキュリティとガバナンス
- Sentinel Policies - ポリシーアズコードによる高度な制御
- Control Groups - 承認ワークフローの実装
- HSM Auto-Unseal - ハードウェアセキュリティモジュールとの統合
- FIPS 140-2準拠 - 政府・金融機関向けのコンプライアンス
- Seal Wrap - 追加の暗号化層
エンタープライズ統合
- Transform Secrets Engine - データ変換・トークン化・マスキング
- Key Management Secrets Engine (KMSE) - 外部KMSとの統合
- Automated Snapshots - 自動バックアップとスケジュール設定
- MFA Enterprise Features - 高度な多要素認証
サポートとSLA
- 24/7商用サポート
- SLA保証
- 優先的なバグ修正
- アップグレード支援
適している環境:
- 大規模エンタープライズ環境
- マルチテナント環境
- グローバル展開
- 厳格なコンプライアンス要件
- ミッションクリティカルなシステム
3. HCP Vault(マネージドサービス)
概要:
- HashiCorp Cloud Platformで提供されるマネージドサービス
- インフラ管理不要
- 自動アップデート
特徴:
- ✅ フルマネージド
- ✅ 自動スケーリング
- ✅ 自動バックアップ
- ✅ 高可用性構成が標準
- ✅ Enterprise機能を含む
適している環境:
- クラウドネイティブ環境
- 運用負荷を最小化したい場合
- 迅速な導入が必要な場合
エディションの比較
以下の表は、Vault OSS、Vault Enterprise、HCP Vaultの機能比較を示しています。
機能・選用比較マトリクス
| カテゴリ | 機能 | OSS | Enterprise | HCP Vault |
|---|---|---|---|---|
| 可用性とスケール | クラスタ高可用性 | ● | ● | ● |
| パフォーマンス・レプリケーション | ● | ● | ||
| ディザスタリカバリ | ● | ● | ||
| ガバナンスとマルチテナント | Namespaces (論理的分離) | ● | ● | |
| Sentinel (Policy as Code) | ● | ● | ||
| 高度なデータ保護 | KMIP&Transform(FPE) エンジン | ● | ● | |
| インフラ運用 | 自動アンシール | ▲ | ▲ | ● |
| バージョンアップとスナップショット | 手動 | 手動 | 自動 |
凡例:
- ● : 完全サポート
- ▲ : 限定的サポート(クラウドKMSのみ)
- 空欄 : サポートなし
各機能の詳細説明
可用性とスケール
クラスタ高可用性
- すべてのエディションで利用可能
- アクティブ/スタンバイ構成による高可用性を実現
- 自動フェイルオーバー機能
パフォーマンス・レプリケーション 🆕 Enterprise
- 複数リージョンでの読み取りスケーリング
- グローバル展開時のレイテンシ削減
- 読み取り専用レプリカの配置
ディザスタリカバリ 🆕 Enterprise
- 災害対策のためのレプリケーション
- 自動フェイルオーバーとフェイルバック
- RPO(目標復旧時点)の最小化
ガバナンスとマルチテナント
Namespaces(論理的分離) 🆕 Enterprise
- 組織・チーム単位での完全な分離
- マルチテナント環境のサポート
- 独立したポリシーと認証設定
Sentinel(Policy as Code) 🆕 Enterprise
- ポリシーアズコードによる高度な制御
- 条件付きロジックの実装
- ビジネスルールの強制
高度なデータ保護
KMIP&Transform(FPE)エンジン 🆕 Enterprise
- Key Management Interoperability Protocol対応
- Format Preserving Encryption(形式保持暗号化)
- データ変換・トークン化・マスキング機能
インフラ運用
自動アンシール
- OSS/Enterprise: クラウドKMS(AWS KMS、Azure Key Vault、GCP KMS)による自動アンシール
- Enterprise: HSM(Hardware Security Module)による自動アンシール
- HCP Vault: 完全自動化(管理不要)
バージョンアップとスナップショット
- OSS/Enterprise: 手動でのバージョンアップとバックアップ
- HCP Vault: 自動バージョンアップと自動スナップショット
次のステップ
Vaultの概要を理解したら、次は主要な概念でVaultの基本的な用語と概念を学びましょう。