認証
トークン
Vaultトークンの仕組みと管理
最終更新: 2026/2/17
トークン
Vaultトークンは、すべての認証方法の基盤となる認証情報です。トークンを理解することは、Vaultのセキュリティモデルを理解する上で重要です。
トークンとは
トークンは、Vaultへのアクセスを認証するための文字列です。
トークンの例
hvs.CAESIABcDeFgHiJkLmNoPqRsTuVwXyZ
構造:
hvs.: トークンのプレフィックス(サービストークン)hvb.: バッチトークンのプレフィックス- 残りの部分: トークンの一意な識別子
トークンの種類
1. サービストークン(Service Token)
特徴:
- デフォルトのトークンタイプ
- ストレージに保存される
- リニューアル可能
- 子トークンを作成可能
用途:
- 長期間のアクセス
- 人間のユーザー
- 複雑なワークフロー
作成方法:
vault token create -policy=myapp-read
2. バッチトークン(Batch Token)
特徴:
- 軽量で高速
- ストレージに保存されない
- リニューアル不可
- 子トークンを作成不可
用途:
- 短期間のアクセス
- 高頻度のリクエスト
- パフォーマンス重視
作成方法:
vault token create -type=batch -policy=myapp-read
3. ルートトークン(Root Token)
特徴:
- すべての権限を持つ
- ポリシーの制約を受けない
- 初期化時に生成される
用途:
- 初期設定
- 緊急時の復旧
- 管理タスク
Root Tokenの取り扱いRoot Tokenは最高権限を持つため、慎重に管理してください。
- 初期設定後は速やかに無効化
- 必要な場合のみ一時的に生成
- 使用後は即座に無効化
- 監査ログを必ず確認
トークンのプロパティ
基本プロパティ
vault token lookup
出力例:
Key Value
--- -----
accessor abc123def456
creation_time 1704067200
creation_ttl 768h
display_name token-myuser
entity_id xyz789abc123
expire_time 2024-02-15T10:30:45Z
explicit_max_ttl 0s
id hvs.CAESIABcDeFgHiJkLmNoPqRsTuVwXyZ
issue_time 2024-01-15T10:30:45Z
meta map[username:myuser]
num_uses 0
orphan false
path auth/userpass/login/myuser
policies [default myapp-read]
renewable true
ttl 767h59m30s
type service
重要なフィールド
| フィールド | 説明 |
|---|---|
| id | トークンの識別子 |
| accessor | トークンの参照ID(安全に共有可能) |
| policies | 付与されたポリシー |
| ttl | 残りの有効期限 |
| renewable | リニューアル可能かどうか |
| orphan | 親トークンから独立しているか |
| num_uses | 使用回数制限(0は無制限) |
トークンの作成
基本的な作成
# デフォルト設定でトークンを作成
vault token create
ポリシーを指定して作成
# 特定のポリシーを持つトークンを作成
vault token create -policy=myapp-read -policy=myapp-write
TTLを指定して作成
# 1時間の有効期限
vault token create -ttl=1h
# 最大4時間まで更新可能
vault token create -ttl=1h -explicit-max-ttl=4h
使用回数制限付きトークン
# 10回まで使用可能
vault token create -use-limit=10
メタデータ付きトークン
# メタデータを付与
vault token create -metadata=environment=production -metadata=app=myapp
Orphanトークン
# 親トークンから独立したトークンを作成
vault token create -orphan
Orphanトークンの特徴:
- 親トークンが失効しても影響を受けない
- 独立したライフサイクル
- Root権限が必要
バッチトークン
# バッチトークンを作成
vault token create -type=batch -policy=myapp-read -ttl=1h
トークンの管理
トークン情報の確認
# 自分のトークン情報を確認
vault token lookup
# 他のトークン情報を確認(accessor使用)
vault token lookup -accessor abc123def456
# 特定のトークン情報を確認
vault token lookup hvs.CAESIABcDeFgHiJkLmNoPqRsTuVwXyZ
トークンのリニューアル
# 自分のトークンを更新
vault token renew
# 特定の期間で更新
vault token renew -increment=2h
# 他のトークンを更新(accessor使用)
vault token renew -accessor abc123def456
トークンの失効
# 自分のトークンを失効
vault token revoke -self
# 特定のトークンを失効
vault token revoke hvs.CAESIABcDeFgHiJkLmNoPqRsTuVwXyZ
# accessorを使用して失効
vault token revoke -accessor abc123def456
# トークンとその子トークンをすべて失効
vault token revoke -mode=path auth/userpass/login/myuser
トークンの階層構造
親子関係
Root Token
├── Token A (親)
│ ├── Token A-1 (子)
│ └── Token A-2 (子)
└── Token B (親)
└── Token B-1 (子)
特徴:
- 親トークンが失効すると、子トークンも失効
- Orphanトークンは親子関係を持たない
子トークンの作成
# 現在のトークンの子トークンを作成
vault token create -policy=myapp-read
# 子トークンの確認
vault token lookup <child-token>
トークンのライフサイクル
1. 作成
vault token create -policy=myapp-read -ttl=1h
2. 使用
# トークンを使用してAPIリクエスト
VAULT_TOKEN=<token> vault kv get secret/myapp/config
3. リニューアル
# TTLが切れる前に更新
vault token renew
4. 失効
# 手動で失効
vault token revoke <token>
# または自動的に失効(TTL切れ)
トークンのベストプラクティス
1. 最小権限の原則
必要最小限のポリシーのみを付与します。
# 読み取り専用トークン
vault token create -policy=read-only
# 特定のパスのみアクセス可能
vault token create -policy=myapp-config-read
2. 短いTTL
可能な限り短いTTLを設定します。
# 1時間の有効期限
vault token create -ttl=1h -policy=myapp-read
# 自動更新が必要な場合は、max-ttlを設定
vault token create -ttl=1h -explicit-max-ttl=8h -policy=myapp-read
3. 使用回数制限
一時的なアクセスには使用回数制限を設定します。
# 1回のみ使用可能
vault token create -use-limit=1 -policy=myapp-read
4. Orphanトークンの慎重な使用
Orphanトークンは必要な場合のみ作成します。
# 長期間のサービスアカウント用
vault token create -orphan -period=24h -policy=service-account
5. 定期的なトークンのローテーション
# 古いトークンを失効
vault token revoke <old-token>
# 新しいトークンを作成
vault token create -policy=myapp-read
トークンロール
ロールの作成
トークンロールを使用すると、トークン作成のテンプレートを定義できます。
# トークンロールを作成
vault write auth/token/roles/myapp-role \
allowed_policies="myapp-read,myapp-write" \
orphan=true \
period=24h \
renewable=true
ロールを使用したトークン作成
# ロールからトークンを作成
vault token create -role=myapp-role
Periodic Token
Periodic Tokenは、定期的に自動更新されるトークンです。
作成方法
# 24時間ごとに自動更新
vault token create -period=24h -policy=myapp-read
特徴:
- TTLではなくperiodを使用
- 自動的にリニューアル
- 明示的なmax-ttlがない限り無期限
用途:
- 長期間稼働するサービス
- 自動化スクリプト
トークンAccessor
Accessorは、トークンを安全に参照するためのIDです。
Accessorの利点
- トークン本体を共有せずに管理可能
- 監査ログに記録される
- トークンの失効に使用可能
Accessorの使用
# Accessorでトークン情報を確認
vault token lookup -accessor abc123def456
# Accessorでトークンを失効
vault token revoke -accessor abc123def456
トークンの監査
監査ログの確認
{
"time": "2024-01-15T10:30:45.123456Z",
"type": "response",
"auth": {
"client_token": "hmac-sha256:...",
"accessor": "abc123def456",
"display_name": "token-myuser",
"policies": ["default", "myapp-read"]
},
"request": {
"operation": "read",
"path": "secret/data/myapp/config"
}
}
トークン使用状況の確認
# すべてのトークンアクセサーを一覧表示
vault list auth/token/accessors
# 特定のトークンの使用履歴を確認(監査ログから)
grep "abc123def456" /var/log/vault/audit.log
トラブルシューティング
トークンが無効
エラー:
Error making API request.
Code: 403. Errors:
* permission denied
確認事項:
# トークンの有効性を確認
vault token lookup
# ポリシーを確認
vault token lookup -format=json | jq -r '.data.policies'
トークンの有効期限切れ
エラー:
Error making API request.
Code: 403. Errors:
* invalid token
解決策:
# 新しいトークンを取得
vault login -method=userpass username=myuser
# または既存のトークンを更新(期限内の場合)
vault token renew
トークンの使用回数超過
エラー:
Error making API request.
Code: 403. Errors:
* token has reached its use limit
解決策:
# 新しいトークンを作成
vault token create -policy=myapp-read
次のステップ
トークンの基本を理解したら、次はUsername & Passwordで人間のユーザー向けの認証方法を学びましょう。
トークンの理解トークンはVaultのすべての認証方法の基盤です。トークンの仕組みを理解することで、他の認証方法もより深く理解できます。