Slide 1

Slide 1 text

HashiCorp Vault ユーザ会(第1回) 2025-09-01 Taichi Nonoshita (@nnstt1) シークレット管理だけじゃない! HashiCorp Vault でデータ暗号化をしよう

Slide 2

Slide 2 text

Hello!! 株式会社エーピーコミュニケーションズ 四国在住3児の父 HashiCorp Ambassador 2024-2025 Microsoft Top Partner Engineer Award 2024-2025 埜下太一 / ののし (@nnstt1)

Slide 3

Slide 3 text

会社紹介

Slide 4

Slide 4 text

会社紹介

Slide 5

Slide 5 text

私と HashiCorp Vault

Slide 6

Slide 6 text

Kubernetes のシークレットを管理したい 色々試したけどしっくりこない…

Slide 7

Slide 7 text

そんなところに Vault Secrets Operator が登場!

Slide 8

Slide 8 text

VSO ええやん! でも HashiCorp Vault めっちゃムズい…

Slide 9

Slide 9 text

初めて学んだ HashiCorp Vault の記事 https://zenn.dev/nameless_gyoza/articles/hashicorp-vault-hands-on

Slide 10

Slide 10 text

HashiCorp Vault の勉強&アウトプット HashiCorp Ambassador に選出される🎉

Slide 11

Slide 11 text

本編

Slide 12

Slide 12 text

HashiCorp Vault の主な機能 シークレット管理 データ保護 今日のテーマはこちら HashiCorp Vault で機密情報を一元管理 Encryption as a Service 静的シークレット: パスワード、API キー、トークン、etc… 動的シークレット: DB 認証情報、AWS IAM、Microsoft Entra、etc…

Slide 13

Slide 13 text

HashiCorp Vault のデータ保護 Encryption as a Service を提供してデータ保護機能を HashiCorp Vault に集約 Vault で平文を暗号化 暗号文を格納 Vault で暗号文を復号

Slide 14

Slide 14 text

HashiCorp Vault のデータ保護によってデータがどのように変わるでしょう? HashiCorp Vault のデータ保護 Masking Tokenization Transit Secret Engine Transform Secret Engine 元データ: 4111-1111-1111-1111
 暗号化後:???
 変換後:???
 変換後:???
 変換後:???
 FPE

Slide 15

Slide 15 text

Transit Secret Engine

Slide 16

Slide 16 text

Transit Secret Engine ● HashiCorp Vault の標準的なデータ暗号化機能 ● 平文を HashiCorp Vault に投げると暗号文が返ってくる ● 暗号文は HashiCorp Vault に保存されない ● キーローテーションやエンベロープ暗号化にも対応

Slide 17

Slide 17 text

Transit Secret Engine ● シークレットエンジンの有効化 $ vault secrets enable transit Success! Enabled the transit secrets engine at: transit/ $ vault write -f transit/keys/my-key ● 暗号鍵の生成

Slide 18

Slide 18 text

暗号化 ● 平文を Base64 エンコードして HashiCorp Vault に暗号化をリクエスト ● HashiCorp Vault では暗号化に使った鍵バージョンが暗号文に記録されて、 復号時に利用される $ vault write transit/encrypt/my-key \ plaintext=$(echo "4111-1111-1111-1111" | base64) Key Value --- ----- ciphertext vault:v1:tigfEcdRpw9WO01eS0p… key_version 1

Slide 19

Slide 19 text

復号 ● HashiCorp Vault で暗号化されたデータの例 $ vault write transit/decrypt/my-key \ ciphertext="vault:v1:tigfEcdRpw9WO01eS0p…" Key Value --- ----- plaintext NDExMS0xMTExLTExMTEtMTExMQo= ● 復号されたデータは Base64 エンコードされている $ echo "NDExMS0xMTExLTExMTEtMTExMQo=" | base64 -d 4111-1111-1111-1111

Slide 20

Slide 20 text

キーローテーション ● キーローテーションにより鍵が漏洩した場合でも影響範囲を限定できる ● コンプライアンスなどでローテーション頻度を定められていることも ● 自動ローテーション機能はあるが「毎月末ローテーション」のような設定はできない

Slide 21

Slide 21 text

キーローテーション Q. キーローテーションしても古いバージョンの暗号済みデータは復号できる?

Slide 22

Slide 22 text

キーローテーション Q. キーローテーションしても古いバージョンの暗号済みデータは復号できる? A. Transit Secret Engine の設定次第

Slide 23

Slide 23 text

Transit Secret Engine の設定 ● min_encryption_version:暗号化に使用する鍵の最小バージョン ● min_decryption_version:復号に使用する鍵の最小バージョン ● latest_version:鍵の最新バージョン

Slide 24

Slide 24 text

Transit Secret Engine の設定 ● min_decryption_version で指定したバージョンより新しい鍵で復号可能

Slide 25

Slide 25 text

Rewrap ● 古いバージョンの鍵で暗号化されたデータを新しいバージョンの鍵で再暗号化 ● 平文に戻さずに暗号文から暗号文に変換 ● 元の平文データは露出しない安全な処理 ● 先に min_decryption_version を更新すると古い暗号文は Rewrap できなくなる

Slide 26

Slide 26 text

エンベロープ暗号化 ● 「封筒(エンベロープ)」のように暗号鍵自体を暗号化する方式 ● データ暗号鍵を HashiCorp Vault のルート鍵を使って暗号化 ● 暗号文と暗号化されたデータ暗号鍵を保管 ● 大容量データの暗号化 ● ネットワーフの負荷軽減 ● HashiCorp Vault の負荷軽減 メリット ● クライアントの実装が複雑になる ● データとキーの対応関係の管理が必要 デメリット

Slide 27

Slide 27 text

エンベロープ暗号化の流れ 1. HashiCorp Vault で生成した「データキー」を使ってクライアントで暗号化 2. 「データキー」は即破棄 3. 「暗号文」と「暗号化されたデータキー」を一緒に格納

Slide 28

Slide 28 text

エンベロープ暗号化の復号 1. 「暗号化されたデータキー」を HashiCorp Vault で「データキー」に復号 2. 「暗号文」を「データキー」で復号 3. 「データキー」は即破棄

Slide 29

Slide 29 text

Transit Secret Engine の課題 ● Transit Secret Engine では暗号文の形式が変わってしまう ○ 既存の DB スキーマに格納できない ○ アプリケーションの Validation 修正が必要 ● この課題を解決するのが Transform Secret Engine Transit 4111-1111-1111-1111
 4111-1111-1111-1111
 “vault:v1:abc…”
 vault:v1:abc…


Slide 30

Slide 30 text

Transform Secret Engine

Slide 31

Slide 31 text

● Vault Enterprise の Advanced Data Protection モジュール限定 ● FPE (Format Preserving Encryption) / Masking / Tokenization の機能がある ● FPE によってデータ型・長さ・文字種をそのまま維持した暗号化が可能 Transform (FPE) Transform Secret Engine 4111-1111-1111-1111
 4111-1111-1111-1111
 9474-2096-7736-0783
 9474-2096-7736-0783


Slide 32

Slide 32 text

Transform Secret Engine Tokenization ● 不可逆変換 ● テスト環境への本番データ投入、 画面・ログへの表示、分析・統計 ● データをランダムに生成された トークンに置き換え ● クレジットカード セキュリティ基 準 (PCI CSS) などに準拠 4111-1111-1111-1111
 4111-####-####-####
 4111-1111-1111-1111
 TKN8x9mP2qR7nV3kL5j
 Masking

Slide 33

Slide 33 text

Transit / Transform の使い分け https://developer.hashicorp.com/vault/docs/concepts/transform 復元する 必要がある? 形式を保持する 必要がある? 不可逆・ 有効期限・ メタデータが 必要?

Slide 34

Slide 34 text

Vault Enterprise の機能を試したい ● 個人で Enterprise 機能を試すなら             がオススメ ● Advanced Data Protection モジュールの Transform Secret Engineも使える ● Pay-as-You-Go (PAYG) でのクレカ払い可能 ○ 請求は IBM の仕組みに移管される予定 ● 最小 Tier で $0.616/hr ○ 1日あたり約 2,200 円、立てっぱなしに注意 ○ 2025月3月に価格改定、以前は $0.045/hr だった(約14倍に!!)

Slide 35

Slide 35 text

HashiCorp Ambassador ● HashiCorp 製品の知識を共有してコミュニティに貢献しているメンバー ● Ambassador 特典で HCP (HashiCorp Cloud Platform) の $500 クレジットを 貰える ● 「検証 → 知見をアウトプット → Ambassador 選出 → 特典でさらに検証」 というループを回せる ※来年以降もあるかは保証しません

Slide 36

Slide 36 text

まとめ

Slide 37

Slide 37 text

HashiCorp Vault を使って Encryption as a Service を提供できる HashiCorp Vault のデータ保護 Masking Tokenization Transit Secret Engine Transform Secret Engine 元データ: 4111-1111-1111-1111
 暗号化後 :vault:v1:tigfEcdRpw9WO01eS0 p…
 変換後:9474-2096-7736-0783
 変換後:4111-####-####-####
 変換後:TKN8x9mP2qR7nV3kL5j
 FPE 大容量データを暗号化するには 「エンベロープ暗号化」を使う
 Vault Enterprise 限定


Slide 38

Slide 38 text

Thanks!! contact me at @nnstt1