認証
Namespaces
Vault Enterpriseのマルチテナンシー機能
最終更新: 2026/4/13
Namespaces
Enterprise版の機能Namespacesは、Vault Enterprise版でのみ利用可能な機能です。本機能の詳細やライセンスについては、IBMの営業担当者にお問い合わせください。
Namespacesとは
Namespacesは、単一のVaultクラスター内で複数の独立した環境を作成できるマルチテナンシー機能です。各Namespaceは完全に分離されており、異なる組織、チーム、または環境ごとに独立したVault環境を提供します。
主な用途
マルチテナンシー
- 複数の組織やチームで単一のVaultクラスターを共有
- 各テナントのデータとポリシーを完全に分離
- テナントごとの独立した管理
環境分離
- 開発・ステージング・本番環境の分離
- 環境ごとの異なるポリシーとアクセス制御
- 環境間のデータ漏洩防止
部門別管理
- 部門ごとの独立した管理
- 部門管理者への権限委譲
- 部門間のセキュリティ境界
Namespacesのアーキテクチャ
階層構造
Namespacesは階層構造を持ち、親子関係を形成できます。
Root Namespace (/)
├── engineering/
│ ├── dev/
│ ├── staging/
│ └── prod/
├── finance/
│ ├── accounting/
│ └── reporting/
└── operations/
├── monitoring/
└── backup/
分離の仕組み
各Namespaceは以下を独立して持ちます:
- 認証方法: Namespace固有の認証設定
- ポリシー: Namespace内でのみ有効なポリシー
- シークレットエンジン: Namespace専用のシークレット
- 監査ログ: Namespace単位での監査
┌─────────────────────────────────────────┐
│ Root Namespace │
│ ┌─────────────────────────────────┐ │
│ │ 認証方法 / ポリシー / シークレット │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────┐│
│ │ engineering/ │ │ finance/ ││
│ │ ┌──────────────┐ │ │ ┌──────────┐││
│ │ │ 認証/ポリシー │ │ │ │認証/ポリシー│││
│ │ │ シークレット │ │ │ │シークレット│││
│ │ └──────────────┘ │ │ └──────────┘││
│ └──────────────────┘ └──────────────┘│
└─────────────────────────────────────────┘
Namespacesの作成と管理
Namespaceの作成
# トップレベルNamespaceの作成
vault namespace create engineering
# サブNamespaceの作成
vault namespace create -namespace=engineering dev
vault namespace create -namespace=engineering staging
vault namespace create -namespace=engineering prod
Namespaceの一覧表示
# ルートNamespaceの一覧
vault namespace list
# 特定Namespace配下の一覧
vault namespace list -namespace=engineering
出力例:
Keys
----
dev/
staging/
prod/
Namespaceの削除
# Namespaceの削除
vault namespace delete engineering/dev
Namespace削除の注意Namespaceを削除すると、その配下のすべてのデータ(シークレット、ポリシー、認証設定など)が削除されます。慎重に実行してください。
Namespaceの使用
環境変数での指定
# Namespaceを環境変数で指定
export VAULT_NAMESPACE=engineering/dev
# シークレットの書き込み
vault kv put secret/myapp password=secret123
# シークレットの読み取り
vault kv get secret/myapp
コマンドラインでの指定
# -namespaceフラグで指定
vault kv put -namespace=engineering/dev \
secret/myapp password=secret123
# 読み取り
vault kv get -namespace=engineering/dev \
secret/myapp
APIでの指定
# HTTPヘッダーでNamespaceを指定
curl \
--header "X-Vault-Token: $VAULT_TOKEN" \
--header "X-Vault-Namespace: engineering/dev" \
https://vault.example.com:8200/v1/secret/data/myapp
認証とポリシー
Namespace内での認証方法の有効化
# Namespace内でUserPass認証を有効化
vault auth enable -namespace=engineering userpass
# ユーザーの作成
vault write -namespace=engineering \
auth/userpass/users/developer \
password=mypassword \
policies=dev-policy
Namespace内でのログイン
# Namespace指定でログイン
vault login -namespace=engineering \
-method=userpass \
username=developer
Namespaceポリシー
Namespace内でポリシーを作成します。
dev-policy.hcl:
# Namespace内のシークレットへのアクセス
path "secret/data/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Namespace内の認証情報の読み取り
path "auth/token/lookup-self" {
capabilities = ["read"]
}
# ポリシーの作成
vault policy write -namespace=engineering \
dev-policy dev-policy.hcl
Root Namespaceからのアクセス
Root Namespace管理者は、すべてのNamespaceにアクセスできます。
root-admin-policy.hcl:
# すべてのNamespaceへのアクセス
path "*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
# Namespace管理
path "sys/namespaces/*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
Namespace管理者ポリシー
特定のNamespaceの管理者権限を付与します。
engineering-admin-policy.hcl:
# engineering Namespace内のすべてのリソース
path "engineering/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# engineering Namespace内の認証方法管理
path "engineering/auth/*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
# engineering Namespace内のポリシー管理
path "engineering/sys/policies/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# サブNamespaceの作成
path "sys/namespaces/engineering/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
実践例
例1: 環境別のNamespace
開発・ステージング・本番環境を分離します。
# 環境別Namespaceの作成
vault namespace create dev
vault namespace create staging
vault namespace create prod
# 各環境でKVシークレットエンジンを有効化
vault secrets enable -namespace=dev -path=secret kv-v2
vault secrets enable -namespace=staging -path=secret kv-v2
vault secrets enable -namespace=prod -path=secret kv-v2
# 開発環境にシークレットを保存
vault kv put -namespace=dev \
secret/myapp \
db_password=dev_password
# 本番環境にシークレットを保存
vault kv put -namespace=prod \
secret/myapp \
db_password=prod_password
例2: チーム別のNamespace
複数のチームで共有します。
# チーム別Namespaceの作成
vault namespace create team-a
vault namespace create team-b
# Team A用の認証とポリシー
vault auth enable -namespace=team-a userpass
vault policy write -namespace=team-a \
team-a-policy team-a-policy.hcl
# Team B用の認証とポリシー
vault auth enable -namespace=team-b userpass
vault policy write -namespace=team-b \
team-b-policy team-b-policy.hcl
例3: マルチテナント環境
複数の顧客(テナント)を分離します。
# 顧客別Namespaceの作成
vault namespace create customer-a
vault namespace create customer-b
# 各顧客用の環境を作成
vault namespace create -namespace=customer-a dev
vault namespace create -namespace=customer-a prod
vault namespace create -namespace=customer-b dev
vault namespace create -namespace=customer-b prod
ベストプラクティス
1. 階層構造の設計
明確な階層構造を設計します。
推奨される構造:
root/
├── org-a/
│ ├── team-1/
│ │ ├── dev/
│ │ └── prod/
│ └── team-2/
│ ├── dev/
│ └── prod/
└── org-b/
├── team-3/
└── team-4/
2. 命名規則
一貫した命名規則を使用します。
# 推奨: 組織/チーム/環境
company/engineering/dev
company/engineering/staging
company/engineering/prod
# 推奨: 顧客/環境
customer-a/dev
customer-a/prod
customer-b/dev
customer-b/prod
3. 権限の分離
適切な権限分離を実装します。
| レベル | 権限 | 対象者 |
|---|---|---|
| Root Namespace | すべての操作 | プラットフォーム管理者 |
| 組織Namespace | 組織内のすべての操作 | 組織管理者 |
| チームNamespace | チーム内のすべての操作 | チームリーダー |
| 環境Namespace | 環境内の読み取り/書き込み | 開発者 |
4. 監査ログの分離
Namespace単位で監査ログを有効化します。
# Namespace単位で監査ログを有効化
vault audit enable -namespace=engineering \
file file_path=/var/log/vault/engineering-audit.log
5. デフォルトポリシーの設定
各Namespaceにデフォルトポリシーを設定します。
# default-policy.hcl
# 自分のトークン情報の確認
path "auth/token/lookup-self" {
capabilities = ["read"]
}
# 自分のトークンの更新
path "auth/token/renew-self" {
capabilities = ["update"]
}
トラブルシューティング
Namespaceが見つからない
エラー:
Error reading secret/data/myapp: Error making API request.
Namespace not found
解決策:
# 正しいNamespaceを指定
export VAULT_NAMESPACE=engineering/dev
vault kv get secret/myapp
# または
vault kv get -namespace=engineering/dev secret/myapp
権限不足
エラー:
Error: permission denied
解決策:
# 現在のトークンのポリシーを確認
vault token lookup
# 必要なポリシーが割り当てられているか確認
vault policy read my-policy
Namespace削除の失敗
エラー:
Error deleting namespace: namespace not empty
解決策:
# サブNamespaceを先に削除
vault namespace delete engineering/dev
vault namespace delete engineering/staging
vault namespace delete engineering/prod
# その後、親Namespaceを削除
vault namespace delete engineering
次のステップ
Namespacesの基本を理解したら、次は以下を学びましょう:
- Sentinel Policies - Namespace単位での高度なポリシー制御
- 高度なNamespaces管理 - より高度なNamespaces活用方法
- レプリケーション - Namespace単位でのレプリケーション
Namespacesの重要性Namespacesは、エンタープライズ環境でVaultを運用する上で最も重要な機能の1つです。適切に設計することで、セキュリティと運用効率を大幅に向上させることができます。