認証

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の基本を理解したら、次は以下を学びましょう:

Namespacesの重要性Namespacesは、エンタープライズ環境でVaultを運用する上で最も重要な機能の1つです。適切に設計することで、セキュリティと運用効率を大幅に向上させることができます。
© 2026 IBM Corporation. Licensed under CC BY 4.0.