ポリシー
ポリシーの例
実践的なポリシーの例
最終更新: 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"]
}
次のステップ
ポリシーの例を理解したら、次は本番環境のハードニングで本番環境への展開を学びましょう。
ポリシーの設計ポリシーは、最小権限の原則に基づいて設計してください。必要最小限の権限のみを付与することで、セキュリティを大幅に向上させることができます。