HashiCorp Vaultのメモ
アイデンティティベースのシークレット及び暗号管理システム
ユースケース
シークレット管理
シークレットを中央保管、管理、アプリ・システム・インフラへのデプロイ
- KV Secret Engine
- Database Credentials
- Kubernetes Secret
暗号化サービス
ソーシャルセキュリティナンバー、クレジットカード番号、その他コンプライアンス情報のセキュアな管理
- Transit Secrets Engine
- Transform Secrets Engine
- Tokenization
鍵管理
様々なKMSプロバイダの暗号鍵を画一的に配布とライフサイクル管理するワークフロー
- KMIP Secrets Engine
- Key Management Secrets Engine
- PKI
元資料: https://developer.hashicorp.com/vault/docs?product_intent=vault
Vaultの提供形態(有償またはマネージド)
-
HCP Vault Secrets
- SaaSとしてVaultを提供し、月25シークレットまでは無料
-
HCP Vault Dedicated
- フルマネージドなVaultを提供し、従量課金制
- Vault Clusterのtier(development, standard, plus), size, regionによって料金が変動する
- サポート込み
-
Enterprise
- セルフマネージドな環境にVaultクラスタを構築
-
OSS版
細かい比較はこちら https://www.hashicorp.com/products/vault/pricing?product_intent=vault
以降はVault Enterpriseについてまとめる。
Vault Enterpriseの機能
- Secrets
- static
- dynamic
- k8s, DB, IAM
- rotation
- Certificates
- PKI
- CA
- Keys
- Cloud KMS
- KMIP
- SSM (Software Security Module)
- Data Protection
- encrypt/decrypt
- sign/verify
- tokenize
Vault インストール時の検討事項
-
ストレージ
- Consul Storage
- Integrated Storage
-
インストール先
- オンプレデータセンター
- クラウドプロバイダー
-
Vaultランタイム
- 物理マシン
- 仮想マシン
- コンテナ
- Kubernetes
ストレージの詳細
- Integrated storageを利用すると外部ストレージを追加で作成する必要がない
- 大きな差はシークレットの保存先
- Consul - すべてオンメモリ(インメモリデータベース)
- Integradet storage - ディスク
Integrated storageを利用したVault Clusterの構成例
- 5 Vault node
- 1 nodeがCluster learderを担う
- フォルトトレラントかつスケーラブル
- N-2 node 冗長
- N-1 Avaialability zone 冗長
Vaultはルート鍵をインメモリに保存する。そのためメモリフットプリントを保護することが必須となる。
ゆえに、一番安全のは独立したベアメタルサーバを利用することである。一方でスケーラビリティや運用性の観点ではVMやコンテナが優位である一方でメモリなどのリソースを共有することになる。
Vault Integrated Storage Architecture
-
Integrated Storage Autopilot
- 自動化とクラスタパフォーマンス管理を提供
- ノードの状態を監視
- サーバ安定化 - 不安定なノードによるquorum障害を防ぐ
- ダウンしたサーバのクリーンアップ
- デフォルトで機能が有効化
- 自動アップグレードによるノードの昇格管理
- 同一AZ内でのノードがダウン時にnon-voting nodeを自動昇格 (Redundancy zone)
-
Vaultサーバのハードウェアサイジング
- smallとlargeの2パターンを推奨
- smallは初期のプロダクション環境や開発、テスト環境用
- largeはワークロードが多い本番環境。(トランザクション数、シークレット数または両方が多い場合)
- https://developer.hashicorp.com/vault/tutorials/day-one-raft/raft-reference-architecture#hardware-sizing-for-vault-servers
-
パフォーマンスの留意事項
- ワークロードごとにリソースの消費量は異なってくる
- Vault Clusterのリソース消費量はテレメトリを活用する
- 外部システム
- 認証方法、シークレットエンジンは外部システムに依存するためVaultもそれに影響を受ける
- 外部システムも含めテレメトリを活用しパフォーマンスを確認する
- ネットワーク
- Vaultノード間はRaftの関係でレイテンシを8ms以下
- 必要なport・CIDRの通信のみを許可
- HTTPS TLS暗号化を利用
送信元 | 送信先 | ポート | プロトコル | 通信方向 | 利用目的 |
---|---|---|---|---|---|
クライアント | ロードバランサ | 443 | tcp | ingress | 通信の振り分け |
ロードバランサ | Vaultサーバ | 8200 | tcp | ingress | Vault API |
Vaultサーバ | Vaultサーバ | 8200 | tcp | 双方向 | クラスタブートストラップ |
Vaultサーバ | Vaultサーバ | 8201 | tcp | 双方向 | Raft, replication, request forwarding |
vaultサーバ | 外部システム | - | - | - | External API |
Vaultサーバのロードバランサ
Vaultサーバはロードバランシングの機能を持たない。可用性と信頼性のため外部のロードバランサまたはConsulを利用することを推奨。
TLSの終端はVaultで行ない、ロードバランサでは行わないこと。
Vaultのヘルスエンドポイントを利用してノードを確認する。
https://<vaultnode>:8200/v1/sys/health
Replicationの種類
- Disaster Recovery Replication
- アクティブ-パッシブモデル
- プライマリのVaultクラスタが持つすべてのデータを持つスタンバイクラスタが存在する
- 少なくとも1つのDRクラスタをデプロイすることを推奨
- アクティブ-パッシブモデル
- Performance Replication
- プライマリのVaultクラスタと共有の状態を持つアクティブなクラスタ
- シークレット、auth method、 ポリシーなどはreplicationするが、tokenとleaseはされない
- レイテンシ低減、コンプライアンスやデータ主権(GDPR対応など)、ワークロード種類の区分けなどに利用する
Vault Replication
Vaultはreplicationを利用し、複数リージョンに提供可能。
プライマリのVaultクラスタはsecondaryのクラスタに非同期でreplication(Performan replication)をする。また必要に応じて、DR replicationで各リージョン内にスタンバイのクラスタを用意することが可能
Vault Community Cluster からVault Enterpriseへのマイグレーション
一般的に既存のVault Community ClusterをVault Enterpriseへマイグレーションする際はin-place migrationを利用する。
In-place migrationの流れ
- Vaultクラスタのバックアップ
https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup - リーダノードの特定
- フォロワーノードのバイナリを更新する
- フォロワーノードにライセンス設定を追記
- すべてのフォロワーノードに3,4を実施
- リーダノードのバイナリの更新とライセンスを設定
Vault ストレージバックエンドのマイグレーション
Vault Enterpriseへマイグレーションする際、コミュニティサポートのストレージバックエンドである場合はサポートされるストレージバックエンドにマイグレーションする必要がある(Integrated storage, Cousul storage)。
Vaultのoperator migrate
コマンドを利用してストレージバックエンド間でデータをコピーする。ストレージレベルで動作するため、復号化を伴わない。このとき、移行先のストレージバックエンドは初期化されていない状態である必要がある。また、データ一貫性のためにオフラインで実行することからダウンタイムが発生する。
ストレージのマイグレーションの流れ
- Vaultクラスタのバックアップ
- マイグレーション設定ファイルを作成
- マイグレーションを実施するノードを決定
- Vaultの停止
- マイグレーションの実施
- Vault設定ファイルを更新
- Vaultの起動とunseal
- 追加ノードをクラスタに追加
Vault Clusterのマイグレーション
Vault Community Clusterから新規のVault Enterprise clusterへの移行について。
Vaultはあるクラスタから別のクラスタへのデータ転送はビルトインで用意されていない。一部のデータはCommunityで開発されたツールを利用することで実現できる。