KV v1は、バージョニングやメタデータを持たないシンプルなキーバリュー型のシークレットエンジンです。読み書きと削除に特化しており、初期ブートストラップや小規模な設定値の保管に向きます。
現在のVaultではkv v2が既定で使われることが多いため、v1を使いたい場合は有効化時に-version=1を明示します。試験ではこの差異とパスの違いが頻出です。
KV v1は、指定したマウント配下にキーと値をそのまま保存する静的シークレットストアです。バージョニングや削除の履歴は保持せず、操作は基本的にPUT/GET/LIST/DELETEのみ。動的クレデンシャルのようなリースや自動失効は関与しません。
シンプルさが最大の利点で、アプリの初期化用APIキー、Webhookトークン、少量の設定値などに適します。既定でkv v2が選ばれがちな昨今でも、バージョン管理が不要/不要不急な場合はv1のほうが運用が軽く、ポリシーやパス設計も簡潔です。
KV v1の論理フロー(認可→保管)
kv v1を使うには、マウント時に-version=1を指定します。以降は mount/path へそのままPUT/GET/LIST/DELETEを行います。値は単純なキー=値のマップで、CLIは複数のk=vを一度に扱えます。
LISTには専用のHTTPメソッド(LIST)とポリシーcapability=listが必要です。削除は即時で、v2のような論理削除・復元・破壊削除はありません。
CLIとHTTP APIの最小手順
# kv v1 を secret/ にマウント
vault secrets enable -path=secret -version=1 kv
# 書き込み(複数キー)
vault kv put secret/app api_key=s3cr3t env=prod
# 読み取り
vault kv get secret/app
# 一覧(末尾スラッシュに注意)
vault kv list secret/
# 削除(即時・不可逆)
vault kv delete secret/app
# HTTP API(書き込み)
curl \
-H "X-Vault-Token: $VAULT_TOKEN" \
-X PUT \
-d '{"api_key":"s3cr3t","env":"prod"}' \
"$VAULT_ADDR/v1/secret/app"
# HTTP API(読み取り)
curl -H "X-Vault-Token: $VAULT_TOKEN" "$VAULT_ADDR/v1/secret/app"
Associateでは、v1とv2の相違がよく問われます。特にパスの違い(v1は<mount>/<path>、v2はdata/とmetadata/)と、削除・復元・CASの有無を確実に押さえてください。
CLIは多くの状況でマウントのバージョンを自動検出しますが、ポリシーのパス指定やHTTP APIのエンドポイントは明確に異なります。
| 項目 | KV v1 | KV v2 |
|---|---|---|
| データバージョニング | なし | あり(世代管理、メタデータ保持) |
| APIパス(読み書き) | /v1/<mount>/<path> | /v1/<mount>/data/<path> |
| APIパス(一覧) | LIST /v1/<mount>/<prefix> | LIST /v1/<mount>/metadata/<prefix> |
| 削除の挙動 | 即時削除(復元不可) | 論理削除→復元可/破壊削除で完全削除 |
| CAS(Check-And-Set) | 未対応 | 対応(競合防止) |
| ポリシーパス例 | path "secret/*" { ... } | path "secret/data/*"(読み書き)、"secret/metadata/*"(一覧/管理) |
Vaultはデフォルト拒否です。KV v1では、読み取り(read)、書き込み(create/update)、削除(delete)、一覧(list)を必要最小限で付与します。特にLISTは明示しない限りvault kv listが失敗します。
パスはv1なら<mount>/*(例: secret/*)。v2のdata/metadataパス指定と混同しないこと。チームやアプリ単位でprefixを切ると、将来のスケールにも対応しやすくなります。
KV v1向けサンプルACLポリシー(HCL)
path "secret/appA/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# 読み取り専用の例
path "secret/appA/*" {
capabilities = ["read", "list"]
}
# ルート一覧のみ(インベントリ用途)
path "secret/" {
capabilities = ["list"]
}
バージョニングが無いKV v1では、誤削除・上書きの影響が直撃します。変更フローを明確化し、レビューやバックアップ(例: 定期的にexportして暗号化保管)を用意すると安全です。
キーの命名はprefixで整理し、環境/アプリ/用途で階層化します。大きなバイナリや頻繁な更新が必要なデータは不向きで、外部のストアやv2の採用を検討します。監査ログ(audit device)は必ず有効化し、誰がどのパスを読んだか記録を残しましょう。
コマンドやパスの差異、ポリシーcapabilitiesの使い分けが頻出です。特にv1とv2のパス、LISTの有無、削除の挙動は取りこぼしやすいポイントです。
Associate
問題 1
チームはVaultでシンプルな静的シークレットを扱いたい。secret/にKV v1を有効化し、その直下にmyappというキーセットを保存する最小手順として正しい組み合わせはどれか。
正解: A
KV v1を使うには有効化時に-version=1を指定し、データパスは<mount>/<path>(例: secret/myapp)です。Bは-version=1を指定せず、さらにv2のdataパスを使っており不正。Cはv2の有効化。Dはtransitエンジンで用途が異なります。
KV v1で削除したシークレットを復元できますか?
できません。KV v1の削除は即時・不可逆です。復元や論理削除が必要な場合はKV v2の導入を検討してください。
LIST権限がなくてもreadがあれば一覧できますか?
できません。LISTはreadとは別のcapabilityです。一覧が必要なパス(例: secret/)に対してcapabilities=["list"]を明示的に付与してください。
KV v1でもレスポンスラッピング(Response Wrapping)は使えますか?
はい。レスポンスラッピングはVaultのコア機能で、エンジンに依存しません。X-Vault-Wrap-TTLを指定して読み取りレスポンスをラップし、短命のラッピングトークンで安全に受け渡しできます。
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...