Open9

HashiCorp Vaultのメモ

Kaito IiKaito Ii

アイデンティティベースのシークレット及び暗号管理システム

ユースケース

シークレット管理

シークレットを中央保管、管理、アプリ・システム・インフラへのデプロイ

  • 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

Kaito IiKaito Ii

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

Kaito IiKaito Ii

以降は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 インストール時の検討事項

  • ストレージ

  • インストール先

    • オンプレデータセンター
    • クラウドプロバイダー
  • 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やコンテナが優位である一方でメモリなどのリソースを共有することになる。

Kaito IiKaito Ii

Vault Integrated Storage Architecture

  • Integrated Storage Autopilot

    • 自動化とクラスタパフォーマンス管理を提供
    • ノードの状態を監視
    • サーバ安定化 - 不安定なノードによるquorum障害を防ぐ
    • ダウンしたサーバのクリーンアップ
    • デフォルトで機能が有効化
    • 自動アップグレードによるノードの昇格管理
    • 同一AZ内でのノードがダウン時にnon-voting nodeを自動昇格 (Redundancy zone)
  • Vaultサーバのハードウェアサイジング

  • パフォーマンスの留意事項

    • ワークロードごとにリソースの消費量は異なってくる
    • 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
Kaito IiKaito Ii

Vaultサーバのロードバランサ

Vaultサーバはロードバランシングの機能を持たない。可用性と信頼性のため外部のロードバランサまたはConsulを利用することを推奨。
TLSの終端はVaultで行ない、ロードバランサでは行わないこと。
Vaultのヘルスエンドポイントを利用してノードを確認する。
https://<vaultnode>:8200/v1/sys/health

Kaito IiKaito Ii

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で各リージョン内にスタンバイのクラスタを用意することが可能

Kaito IiKaito Ii

Vault Community Cluster からVault Enterpriseへのマイグレーション

一般的に既存のVault Community ClusterをVault Enterpriseへマイグレーションする際はin-place migrationを利用する。
https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-upgrade

In-place migrationの流れ

  1. Vaultクラスタのバックアップ
    https://developer.hashicorp.com/vault/tutorials/standard-procedures/sop-backup
  2. リーダノードの特定
  3. フォロワーノードのバイナリを更新する
  4. フォロワーノードにライセンス設定を追記
  5. すべてのフォロワーノードに3,4を実施
  6. リーダノードのバイナリの更新とライセンスを設定
Kaito IiKaito Ii

Vault ストレージバックエンドのマイグレーション

Vault Enterpriseへマイグレーションする際、コミュニティサポートのストレージバックエンドである場合はサポートされるストレージバックエンドにマイグレーションする必要がある(Integrated storage, Cousul storage)。

Vaultのoperator migrateコマンドを利用してストレージバックエンド間でデータをコピーする。ストレージレベルで動作するため、復号化を伴わない。このとき、移行先のストレージバックエンドは初期化されていない状態である必要がある。また、データ一貫性のためにオフラインで実行することからダウンタイムが発生する。
https://developer.hashicorp.com/vault/docs/commands/operator/migrate

ストレージのマイグレーションの流れ

  1. Vaultクラスタのバックアップ
  2. マイグレーション設定ファイルを作成
  3. マイグレーションを実施するノードを決定
  4. Vaultの停止
  5. マイグレーションの実施
  6. Vault設定ファイルを更新
  7. Vaultの起動とunseal
  8. 追加ノードをクラスタに追加