Transform エンジンは機密データを“フォーマットを保ったまま”変換するための Vault Enterprise 機能です。用途は大別して3つ、FPE(Format-Preserving Encryption)、マスキング、トークナイゼーション。どれを選ぶかは、可逆性・保存要件・性能・監査要件で決まります。
本稿は運用(Ops)観点で、導入手順、権限設計、レート制限、レプリケーション/DR、ローテーション、よくある落とし穴を具体的にまとめ、Vault の認定(Security Automation 系)対策にも直結する要点を整理します。
Transform は Vault Enterprise のシークレットエンジンで、FPE、マスキング、トークナイゼーションの3方式を提供します。アプリは Vault に値を渡し、変換済みの値(またはトークン)を受け取り、保存時や転送時のリスクを下げます。FPE とマスキングは基本的にステートレス(設定と鍵のみ)で、トークナイゼーションは値↔トークンの対応を保存するためステートフルです。
運用上のキーポイントは、変換『定義(transformation)』と『ロール(role)』の分離、テンプレート/アルファベット/チュイーク(tweak)管理、レプリケーション、レート制限、監査/Audit、そして最小権限ポリシーです。Ops では可用性(HA/PR/DR)とスループットを担保しつつ、誤用(例: アルファベット外文字)を即時検知できる監視も必要です。
Transform エンジンの論理構成(FPE: ステートレス / Tokenization: ステートフル)
FPE は NIST SP 800-38G 系列の FF1 モードに基づく形式保持暗号(Vault の実装では FF1 を利用)で、桁数や許可文字集合(アルファベット)を保ったまま暗号化します。入力検証はアルファベットに基づいて厳格に行われ、無効文字が含まれるとエラーを返します。区切り文字の扱いはテンプレート設計(例: 数字ブロックとハイフンの分離)でコントロールします。
設計上はアルファベットの選定(numeric/alphanumeric/カスタム)、テンプレート粒度、チュイーク(tweak)ソース(internal/supplied)を決め、復号が必要な主体だけに decode を許可します。決定論的であるため、同一入力は同一出力になる点を念頭に置き(テストデータ生成に便利)、同値検出リスクとログ露出に注意します。
マスキングは不可逆の変換で、監査ログや下流参照のために“最低限の可読性”を残したいときに有効です。暗号鍵やストレージは不要で、性能影響が小さいのが利点です。一方、トークナイゼーションは元値を保存せずにトークンで代用し、必要時のみ detokenize できる方式です。可逆だが、マッピングの保存・レプリケーション・TTL といった運用要素を伴います。
PCI DSS などで PAN を広範に扱う場合は、保存系にはトークンを、限定された境界の中でのみ detokenize を許可するのが定石です。監査ログや開発者プレビューに“見えてよい一部だけ”を残す場合はマスキングを併用します。
| 方式 | 可逆性 | 形式保持 | ストレージ依存 |
|---|---|---|---|
| FPE | 可逆(権限者のみ decode) | 維持(桁・文字種) | 不要(鍵のみ) |
| マスキング | 不可逆 | 必要に応じて一部維持 | 不要 |
| トークナイゼーション | 可逆(detokenize) | トークン形式の設計次第 | 必要(マッピング保存) |
以下は代表的なシーケンスです。実際にはテンプレート/アルファベット名、ロール名、パスは組織標準に合わせて設計してください。正確な API パスや追加パラメータはご利用の Vault バージョンの公式ドキュメントを参照してください。
ポイントは、1) エンジンを有効化、2) transformation を作成、3) role に transformation をひも付け、4) encode/decode または tokenize/detokenize を実行、の4段階です。
CLI 例(FPE / マスキング / トークナイゼーション)
# 1) Transform エンジン有効化(Enterprise)
vault secrets enable -path=transform transform
# 2) FPE transformation の作成とロールの作成
vault write transform/role/payments \
transformations=ccn-fpe
vault write transform/transformations/fpe/ccn-fpe \
template="16" \
alphabet="numeric" \
tweak_source="internal" \
allowed_roles="payments"
# 3) FPE でエンコード/デコード(ロールスコープ)
vault write transform/encode/payments \
transformation=ccn-fpe \
value=4111111111111111
vault write transform/decode/payments \
transformation=ccn-fpe \
value=<encoded-value>
# 4) マスキング transformation の作成と利用(例: 9桁を ***-**-**** で一部秘匿)
vault write transform/transformations/masking/ssn-mask \
template="3-2-4" \
masking_character="*" \
allowed_roles="hr"
vault write transform/encode/hr \
transformation=ssn-mask \
value=123456789
# 5) トークナイゼーションの作成と利用
vault write transform/tokenization/pan-token \
allowed_roles="payments" \
max_ttl=24h
vault write transform/tokenize/payments \
transformation=pan-token \
value=4111111111111111
vault write transform/detokenize/payments \
transformation=pan-token \
value=<token>ポリシーはロール単位でエンドポイントを分離します。多くの現場では encode のみをアプリに付与し、decode/detokenize は限られたバッチ/オペレーションだけが実行できるようにします。トークナイゼーションは detokenize と lookup(許可する場合)をさらに限定します。
レプリケーションは Performance Replication(PR)でスループットを確保し、DR で災害対策を行います。トークナイゼーションはマッピングデータを含むため、PR/DR の整合性と遅延が意味を持ちます。RPO/RTO を明示し、バーストに備えて sys/quotas の rate-limit を transform マウント配下に適用します。
ポリシー(最小権限)とレート制限の例
# 最小権限ポリシー例(アプリは encode のみ)
path "transform/encode/payments" {
capabilities = ["update"]
}
# decode は運用ロールのみに
auth_method "userpass" { }
path "transform/decode/payments" {
capabilities = ["update"]
}
# detokenize はさらに限定
path "transform/detokenize/payments" {
capabilities = ["update"]
}
# レート制限(1秒あたり 200 リクエスト、バースト 400 の例)
vault write sys/quotas/rate-limit/transform-payments \
path="transform/encode/payments" \
rate=200 \
interval=1s \
burst=400鍵ローテーションは計画的に行い、旧バージョンでの decode を一定期間許容して移行の猶予を設けます。FPE は再暗号化の一括処理(オフライン/バッチ)を用意し、アプリ側キャッシュや二次索引の更新順序を明確にします。
可用性面では、PR で読み取り/処理をスケールし、トークナイゼーションのマップ整合性を常に検証します。DR フェイルオーバー演習は transform エンドポイントも含めてリハーサルし、アプリの再試行と遅延しきい値を事前に検証します。
運用 Runbook 例(概念)
# FPE 鍵ローテーション(概念例。実際のパスはドキュメントで要確認)
# 1) 新バージョン発行
vault write -f transform/transformations/fpe/ccn-fpe/rotate
# 2) 旧バージョン decode 許容期間を設定(ポリシー/設定で管理)
# 3) バッチで再暗号化(アプリ/ETL 側で)
# 4) 許容期間終了後、旧鍵を失効
# ヘルスチェック/計測(例)
vault read sys/health
vault metrics
# レプリケーション状態確認
yvault read sys/replication/status # 実環境では適切な権限で実行Ops
問題 1
PCI DSS 対応として、16 桁の PAN をアプリの保存時に“桁数はそのまま”で秘匿し、マッピングの保存を避けたい。復号は限定されたバッチ処理のみ許可する。この要件を最もシンプルに満たす構成はどれか。
正解: A
要件は形式保持(桁維持)とマッピング保存の回避、限定的な復号。FPE が最適。トークナイゼーションはマッピング保存が必要、マスキングは不可逆、Transit は形式保持を満たさない。
Transform は OSS 版 Vault でも使えますか?
いいえ。Transform エンジンは Vault Enterprise の機能です。導入前にライセンスとエディション構成を確認してください。
トークンから元値を検索(逆引き)できますか?
detokenize 権限があるロールでのみ復元できます。一般的に“トークン一覧から元値を横断検索”といった操作は許容しません。設計上も detokenize と lookup 系の権限は厳格に分離してください。
鍵ローテーション時にサービス停止は必要ですか?
通常は不要です。新バージョンの鍵で encode を継続しつつ、旧バージョンでの decode を一定期間許容することで無停止移行が可能です。ただし再暗号化バッチの計画やスループット余裕は事前に確保してください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...