Vault のアクセスポリシーはトークンに紐づきます。中でも service トークンと batch トークンの違いは、日々の運用だけでなく Associate 試験でも頻出です。
本稿では、両者のライフサイクルと制約、代表ユースケース、選定基準を実務目線で整理します。細部の挙動はバージョンによって微差があり得ますが、ここで扱う基本動作は安定的に利用できます。
Vault のトークンは大別して service と batch の 2 種類です。service はサーバ側に状態を持つ永続的なトークンで、更新・失効・参照が可能です。batch はサーバ側に保存されない軽量トークンで、発行時点で有効期限と権限が固定され、更新や個別失効はできません。
両者は検証フローが異なります。service は都度トークンストアを参照しますが、batch は署名検証と埋め込み情報の確認で完了します。高スループットの一時的ワークロードでは batch、長期運転のサービスでは service が基本の選択肢です。
サービス vs バッチの検証フロー
まずはデフォルト(service)でトークンを発行して確認
vault token create -policy=default -ttl=1h
# 出力されたトークンを lookup(service は可能)
vault token lookup s.XYZ...
service トークンはトークンストアに保持されるため、アクティブなトークンの参照、更新、即時失効、アクセサーによる部分失効、ツリー失効などが可能です。長時間稼働するアプリケーションやデーモン、Vault Agent の自動更新シナリオで使います。
periodic(更新を前提に無期限に使える)や orphan(親の失効の影響を受けない)といった管理機能を備えます。cubbyhole はトークン単位の一時ストレージで、service トークンで利用できます。
典型操作(更新・失効・periodic・orphan)
# service トークン発行(1時間)
vault token create -policy=app -ttl=1h
# 更新(さらに30分延長、max_ttl に依存)
vault token renew s.ABC... 30m
# 即時失効(ID で)
vault token revoke s.ABC...
# アクセサーで失効
evault token revoke -accessor hvs.abc...
# periodic トークン(24時間周期で更新必須)
vault token create -policy=agent -period=24h
# orphan トークン
evault token create -policy=ops -orphan
batch トークンはサーバストレージに記録されない軽量トークンです。検証は署名と埋め込みメタデータで行われます。更新不可・個別失効不可・lookup 不可が基本動作です。短時間・高スループットな処理(CI/CD、サーバレス、バッチ処理、マップリデュース)に適します。
重要な違いとして、発行時に確定した有効期限とポリシーが、そのトークンの寿命中は固定されます。後から role/identity グループやポリシーを変更しても、既に発行済みの batch トークンの権限は変わりません。
batch トークンの発行と制約の確認
# batch トークンを 15 分で発行
vault token create -type=batch -policy=build -ttl=15m
# lookup は失敗(batch は参照不可)
vault token lookup s.BATCH... # => エラー: batch token は lookup 不可
# revoke も不可(期限到来を待つ)
vault token revoke s.BATCH... # => エラー: batch token は revoke 不可
選定はライフサイクル管理の要否と、ポリシー変更の追従要否で決めます。長期稼働・権限の即時切替・強制失効が必要なら service。ジョブ単位・短寿命・多数発行でオーバーヘッドを避けたいなら batch。
試験対策の観点では、batch の非更新・非失効・lookup 不可、そしてポリシー固定という点を確実に押さえてください。
| 項目 | service トークン | batch トークン | 試験の要点 |
|---|---|---|---|
| サーバ側の状態 | あり(トークンストア) | なし(非保存) | batch は保存されない |
| 更新 (renew) | 可能(max_ttl/period に従う) | 不可 | batch は常に非更新 |
| 失効 (revoke) | 即時可(ID/アクセサー/プレフィックス) | 不可(期限のみ) | batch は個別失効できない |
| lookup | 可能 | 不可 | batch は lookup 不可 |
| cubbyhole | 利用可 | 不可 | batch は cubbyhole 非対応 |
| ポリシー反映 | 都度評価(後追い変更が反映されやすい) | 発行時に固定 | batch は発行後の権限変更が反映されない |
AppRole で token_type を使い分ける例
# AppRole で batch を発行する role を作成
vault write auth/approle/role/ci \
token_policies=build \
token_ttl=15m \
token_max_ttl=30m \
token_type=batch
# 長期運転サービス向けの service 役割
evault write auth/approle/role/app \
token_policies=app \
token_ttl=1h \
token_max_ttl=24h \
token_type=service
service トークンは更新と失効が運用の要です。Vault Agent の自動更新を利用し、max_ttl の設計とアクセサー運用(部分失効)を確立します。ツリー失効やプレフィックス失効はインシデント時の一斉無効化に有効です。
batch トークンは短 TTL を前提に、漏えいリスクを時間で限定します。個別失効ができないため、万一の漏えい時はロールや発行経路の停止、該当システムの一時遮断で被害を最小化します。Vault のトークン検証鍵のローテーション方針もあわせて検討してください(運用変更は慎重な事前検証が必須)。
Vault Agent で service トークンを自動更新する最小例
# agent.hcl の一例
auto_auth {
method "approle" {
mount_path = "auth/approle"
config = {
role_id_file_path = "/etc/vault/role_id"
secret_id_file_path = "/etc/vault/secret_id"
}
}
sink "file" {
config = { path = "/var/run/vault/token" }
}
}
cache {
use_auto_auth_token = true
}
listener "tcp" { address = "127.0.0.1:8200" tls_disable = true }
問題文に renew、revoke、lookup、cubbyhole といったキーワードが出たら、batch では不可であることを即答できるようにしておきます。もう一つの頻出は、発行後のポリシー変更の反映有無です(service は反映されやすく、batch は固定)。
ユースケースの読み替え問題にも注意。常駐サービスや Agent は service、CI/CD やサーバレスは batch が定石です。
知識チェック用の最小コマンド
# batch かどうかの違いを体で覚える
vault token create -type=batch -policy=dev -ttl=10m
vault token lookup <batch_token> # 失敗するはず
vault token create -policy=dev -ttl=10m
vault token lookup <service_token> # 成功するはず
Associate
問題 1
短時間で完了する CI ジョブが Vault からシークレットを読み取ります。トークンは発行時点の権限で十分で、個別の更新や即時失効は不要です。どのトークンを選ぶべきでしょうか。また、そのトークンに関する正しい説明はどれですか。
正解: A
CI のような短時間ワークロードには batch が適しています。batch は非保存・非更新・非失効で、発行時に確定した権限が有効期限まで固定されます。B は誤り(batch に periodic はありません)。C は誤り(service はアクセサーがあり失効可能)。D は誤り(cubbyhole は service で利用可、発行負荷は batch の方が軽量)。
batch トークンでダイナミックシークレットは使えますか?
読み取り自体は可能です。シークレットのリースはシークレット側で管理されるため、トークンが batch でも取得・期限到来は機能します。ただし、トークン自体を即時失効できないため、漏えい時は短 TTL と最小権限、発行経路の遮断でリスクを抑える運用が前提です。
既存の batch トークンに後からポリシー変更を反映できますか?
できません。batch は発行時点のポリシーが固定です。変更を反映したい場合は新しいトークンを発行し、ジョブ側でそれを使用するよう切り替えてください。権限の即時切替や失効が必要なら、当初から service を選定します。
個別失効できない batch トークンの漏えい対策は?
運用でリスクを下げます。具体的には短 TTL、最小権限、配布経路の暗号化と監査、ジョブ単位の発行、異常検知時のロール停止や実行基盤の一時遮断を即応できるようにします。Vault 側の検証鍵ローテーションなど広域影響のある操作は計画的に行い、事前に検証環境で影響範囲を確認してください。
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 Token Accessorの実務と試験対策: 監査とトークン無効化を最短で行う
HashiCorp VaultのToken Accessorを使って、監査ログからの事後追跡と即時のトークン無効化を安全...