ポリシー

ポリシーの例

実践的なポリシーの例
最終更新: 2026/2/17

ポリシーの例

実際のユースケースに基づいた、実践的なポリシーの例をご紹介します。

基本的なポリシー

読み取り専用ポリシー

# 読み取り専用ポリシー
path "secret/data/myapp/*" {
  capabilities = ["read", "list"]
}

path "secret/metadata/myapp/*" {
  capabilities = ["read", "list"]
}

用途: 開発者がシークレットを参照する場合

読み書き可能ポリシー

# 読み書き可能ポリシー
path "secret/data/myapp/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

path "secret/metadata/myapp/*" {
  capabilities = ["read", "list", "delete"]
}

用途: アプリケーションがシークレットを管理する場合

環境別ポリシー

開発環境ポリシー

# 開発環境への完全アクセス
path "secret/data/myapp/dev/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# ステージング環境は読み取りのみ
path "secret/data/myapp/staging/*" {
  capabilities = ["read", "list"]
}

# 本番環境へのアクセスは拒否
path "secret/data/myapp/production/*" {
  capabilities = ["deny"]
}

# 開発用データベース認証情報
path "database/creds/dev-*" {
  capabilities = ["read"]
}

ステージング環境ポリシー

# 開発環境は読み取りのみ
path "secret/data/myapp/dev/*" {
  capabilities = ["read", "list"]
}

# ステージング環境への完全アクセス
path "secret/data/myapp/staging/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 本番環境は読み取りのみ
path "secret/data/myapp/production/*" {
  capabilities = ["read", "list"]
}

# ステージング用データベース認証情報
path "database/creds/staging-*" {
  capabilities = ["read"]
}

本番環境ポリシー

# 開発環境へのアクセスは拒否
path "secret/data/myapp/dev/*" {
  capabilities = ["deny"]
}

# ステージング環境へのアクセスは拒否
path "secret/data/myapp/staging/*" {
  capabilities = ["deny"]
}

# 本番環境への完全アクセス
path "secret/data/myapp/production/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 本番用データベース認証情報
path "database/creds/production-*" {
  capabilities = ["read"]
}

ロール別ポリシー

開発者ポリシー

# 開発環境への完全アクセス
path "secret/data/*/dev/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# ステージング環境への読み書きアクセス
path "secret/data/*/staging/*" {
  capabilities = ["create", "read", "update", "list"]
}

# 本番環境は読み取りのみ
path "secret/data/*/production/*" {
  capabilities = ["read", "list"]
}

# 開発用データベース認証情報
path "database/creds/dev-*" {
  capabilities = ["read"]
}

# 自分のトークン管理
path "auth/token/lookup-self" {
  capabilities = ["read"]
}

path "auth/token/renew-self" {
  capabilities = ["update"]
}

SREポリシー

# すべての環境への読み取りアクセス
path "secret/data/*" {
  capabilities = ["read", "list"]
}

# 本番環境への書き込みアクセス
path "secret/data/*/production/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# すべてのデータベース認証情報
path "database/creds/*" {
  capabilities = ["read"]
}

# 監査ログの確認
path "sys/audit" {
  capabilities = ["read", "list", "sudo"]
}

# メトリクスの確認
path "sys/metrics" {
  capabilities = ["read"]
}

# ヘルスチェック
path "sys/health" {
  capabilities = ["read"]
}

セキュリティ管理者ポリシー

# すべてのシークレットへの読み取りアクセス
path "secret/*" {
  capabilities = ["read", "list"]
}

# ポリシーの管理
path "sys/policies/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 認証方法の管理
path "auth/*" {
  capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

# 監査の管理
path "sys/audit/*" {
  capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

# トークンの管理
path "auth/token/*" {
  capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}

アプリケーション別ポリシー

Webアプリケーションポリシー

# アプリケーション設定
path "secret/data/webapp/config" {
  capabilities = ["read"]
}

# データベース認証情報
path "database/creds/webapp-role" {
  capabilities = ["read"]
}

# API認証情報
path "secret/data/webapp/api-keys" {
  capabilities = ["read"]
}

# セッション暗号化キー
path "transit/encrypt/webapp-sessions" {
  capabilities = ["update"]
}

path "transit/decrypt/webapp-sessions" {
  capabilities = ["update"]
}

# 自分のトークン管理
path "auth/token/lookup-self" {
  capabilities = ["read"]
}

path "auth/token/renew-self" {
  capabilities = ["update"]
}

バッチ処理ポリシー

# バッチ処理設定
path "secret/data/batch/config" {
  capabilities = ["read"]
}

# データベース認証情報
path "database/creds/batch-role" {
  capabilities = ["read"]
}

# AWS認証情報
path "aws/creds/batch-role" {
  capabilities = ["read"]
}

# 処理結果の保存
path "secret/data/batch/results/*" {
  capabilities = ["create", "update"]
}

マイクロサービスポリシー

# サービス固有の設定
path "secret/data/microservices/{{identity.entity.metadata.service_name}}/*" {
  capabilities = ["read", "list"]
}

# 共有設定
path "secret/data/microservices/shared/*" {
  capabilities = ["read", "list"]
}

# サービス間通信の認証情報
path "pki/issue/microservices" {
  capabilities = ["create", "update"]
}

# データベース認証情報
path "database/creds/{{identity.entity.metadata.service_name}}-role" {
  capabilities = ["read"]
}

CI/CDポリシー

GitHub Actionsポリシー

# デプロイ用シークレット
path "secret/data/cicd/github-actions/*" {
  capabilities = ["read"]
}

# AWS認証情報
path "aws/creds/github-actions-role" {
  capabilities = ["read"]
}

# Kubernetesシークレット
path "secret/data/kubernetes/deployments/*" {
  capabilities = ["read"]
}

# 短期間のトークン
path "auth/token/create" {
  capabilities = ["create", "update"]
  
  allowed_parameters = {
    "ttl" = ["10m"]
    "policies" = ["deploy-policy"]
  }
}

Jenkinsポリシー

# ビルド用シークレット
path "secret/data/cicd/jenkins/*" {
  capabilities = ["read"]
}

# 動的な認証情報
path "database/creds/jenkins-*" {
  capabilities = ["read"]
}

path "aws/creds/jenkins-*" {
  capabilities = ["read"]
}

# デプロイ用トークンの作成
path "auth/token/create" {
  capabilities = ["create"]
  
  allowed_parameters = {
    "policies" = ["deploy-*"]
    "ttl" = []
  }
  
  max_wrapping_ttl = "1h"
}

チーム別ポリシー

チームAポリシー

# チームAのシークレット
path "secret/data/team-a/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 共有シークレット
path "secret/data/shared/*" {
  capabilities = ["read", "list"]
}

# 他チームのシークレットは拒否
path "secret/data/team-b/*" {
  capabilities = ["deny"]
}

path "secret/data/team-c/*" {
  capabilities = ["deny"]
}

# チームA用データベース認証情報
path "database/creds/team-a-*" {
  capabilities = ["read"]
}

横断チームポリシー

# すべてのチームのシークレットへの読み取りアクセス
path "secret/data/team-*/*" {
  capabilities = ["read", "list"]
}

# 共有シークレットへの書き込みアクセス
path "secret/data/shared/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# すべてのデータベース認証情報
path "database/creds/*" {
  capabilities = ["read"]
}

特殊なユースケース

監査専用ポリシー

# 監査ログの読み取り
path "sys/audit" {
  capabilities = ["read", "list", "sudo"]
}

# 監査ログのハッシュ
path "sys/audit-hash/*" {
  capabilities = ["create"]
}

# すべてのシークレットのメタデータ
path "secret/metadata/*" {
  capabilities = ["read", "list"]
}

# トークン情報の確認
path "auth/token/lookup" {
  capabilities = ["create", "update"]
}

# ポリシーの確認
path "sys/policies/*" {
  capabilities = ["read", "list"]
}

一時アクセスポリシー

# 特定のシークレットへの一時アクセス
path "secret/data/temp/{{identity.entity.id}}/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 短期間のトークン
path "auth/token/create" {
  capabilities = ["create"]
  
  allowed_parameters = {
    "ttl" = ["1h"]
    "explicit_max_ttl" = ["2h"]
  }
}

緊急アクセスポリシー

# 本番環境への読み取りアクセス
path "secret/data/*/production/*" {
  capabilities = ["read", "list"]
}

# 緊急用データベース認証情報
path "database/creds/emergency-*" {
  capabilities = ["read"]
}

# 監査ログへの記録
path "sys/audit" {
  capabilities = ["read", "list", "sudo"]
}

# 短期間のトークン(1時間)
path "auth/token/create" {
  capabilities = ["create"]
  
  allowed_parameters = {
    "ttl" = ["1h"]
    "explicit_max_ttl" = ["1h"]
  }
}

テンプレート化されたポリシー

ユーザー固有のパス

# ユーザー名をパスに含める
path "secret/data/users/{{identity.entity.name}}/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 他のユーザーのパスは拒否
path "secret/data/users/*" {
  capabilities = ["deny"]
}

グループベースのアクセス

# グループ名をパスに含める
path "secret/data/groups/{{identity.groups.names.0}}/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# グループのメタデータを使用
path "secret/data/{{identity.entity.metadata.department}}/*" {
  capabilities = ["read", "list"]
}

ポリシーの組み合わせ

複数ポリシーの適用

# 複数のポリシーを持つトークンを作成
vault token create \
  -policy=base-policy \
  -policy=app-specific-policy \
  -policy=environment-policy

base-policy.hcl:

# 基本的な権限
path "auth/token/lookup-self" {
  capabilities = ["read"]
}

path "auth/token/renew-self" {
  capabilities = ["update"]
}

path "cubbyhole/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

app-specific-policy.hcl:

# アプリケーション固有の権限
path "secret/data/myapp/*" {
  capabilities = ["read", "list"]
}

path "database/creds/myapp-role" {
  capabilities = ["read"]
}

environment-policy.hcl:

# 環境固有の権限
path "secret/data/*/production/*" {
  capabilities = ["read", "list"]
}

ベストプラクティス

1. ポリシーの分離

# 悪い例:すべてを1つのポリシーに
path "secret/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# 良い例:目的ごとに分離
# read-policy.hcl
path "secret/data/myapp/*" {
  capabilities = ["read", "list"]
}

# write-policy.hcl
path "secret/data/myapp/*" {
  capabilities = ["create", "update"]
}

2. 明示的な拒否

# 機密情報へのアクセスを明示的に拒否
path "secret/data/sensitive/*" {
  capabilities = ["deny"]
}

path "secret/data/admin/*" {
  capabilities = ["deny"]
}

3. ドキュメント化

# ポリシー名: webapp-production
# 用途: 本番環境のWebアプリケーション
# 対象: webapp-production サービスアカウント
# 作成日: 2024-01-15
# 最終更新: 2024-01-15

# アプリケーション設定
path "secret/data/webapp/production/config" {
  capabilities = ["read"]
}

# データベース認証情報
path "database/creds/webapp-production" {
  capabilities = ["read"]
}

次のステップ

ポリシーの例を理解したら、次は本番環境のハードニングで本番環境への展開を学びましょう。

ポリシーの設計ポリシーは、最小権限の原則に基づいて設計してください。必要最小限の権限のみを付与することで、セキュリティを大幅に向上させることができます。
© 2026 IBM Corporation. Licensed under CC BY 4.0.