認証

トークン

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のすべての認証方法の基盤です。トークンの仕組みを理解することで、他の認証方法もより深く理解できます。
© 2026 IBM Corporation. Licensed under CC BY 4.0.