HashiCorp Vault

HashiCorp Vault シークレットエンジン ウェビナー — コンテンツ補足資料

最終更新: 2026/8/12

HashiCorp Vault シークレットエンジン ウェビナー — コンテンツ補足資料

位置づけ: ウェビナー参加者向けの事後配布・参照資料
対象: Vault 導入検討者・初学者〜中級者


1. シークレットエンジンとは

シークレットエンジンは Vault の マウントポイント(パス) に紐付いたプラグインコンポーネントです。 それぞれが独自のロジックでシークレットを「保存・生成・暗号化」します。

vault secrets list

Path          Type      Description
----          ----      -----------
aws/          aws       AWS 動的クレデンシャル
database/     database  DB 動的認証情報
pki/          pki       PKI 証明書管理
secret/       kv        KV v2 静的ストレージ
transit/      transit   暗号化 as a Service

エンジンの有効化パターン

# デフォルトパスで有効化(パス名 = エンジン種別名)
vault secrets enable kv-v2

# カスタムパスで有効化(同じエンジンを複数マウント可能)
vault secrets enable -path=team-a/secrets  kv-v2
vault secrets enable -path=team-b/secrets  kv-v2

2. ライフサイクルオペレーション詳解

2-1 enable(有効化)

# 基本
vault secrets enable <engine-type>

# オプション例
vault secrets enable \
  -path=mydb \
  -description="Production Database Secrets" \
  -default-lease-ttl=1h \
  -max-lease-ttl=24h \
  database

主なオプション:

オプション説明デフォルト
-pathマウントパスエンジン種別名
-description説明テキスト
-default-lease-ttlデフォルト TTLシステム設定に依存
-max-lease-ttl最大 TTLシステム設定に依存
-localローカルマウント(レプリケーション対象外)false

2-2 tune(チューニング)

再マウント不要でマウント設定を変更できます。

# TTL 変更
vault secrets tune -max-lease-ttl=8760h pki/

# 説明の更新
vault secrets tune -description="Updated description" database/

# 現在の設定確認
vault read sys/mounts/database

2-3 move(移動)

データを保持したままマウントパスを変更します。移動中は一時的にアクセス不可になります。

vault secrets move database/ prod/database/

⚠️ ポリシー内のパス参照は手動で更新が必要です。

2-4 disable(無効化)

vault secrets disable database/

⚠️ そのパスのデータは 完全削除 されます。事前にバックアップを取得してください。


3. KV v2 シークレットエンジン

Config と Role

KV には「Config」「Role」の概念はありません。パスベースのアクセス制御はポリシーで行います。

# ポリシー例:特定アプリの KV 読み取り専用
path "secret/data/myapp/*" {
  capabilities = ["read", "list"]
}
path "secret/metadata/myapp/*" {
  capabilities = ["list"]
}

KV v1 vs v2

機能KV v1KV v2
バージョン管理なしあり(デフォルト最大 10 バージョン)
ソフト削除なしあり(kv delete
完全削除vault deletevault kv destroy
CAS(競合防止)なしあり
メタデータなしあり

パスの構造(v2)

secret/data/myapp/config    ← 実データの読み書き
secret/metadata/myapp/config ← メタデータ(バージョン情報)の読み書き
secret/delete/myapp/config   ← ソフト削除
secret/undelete/myapp/config ← ソフト削除の取り消し
secret/destroy/myapp/config  ← 完全削除

4. PKI シークレットエンジン

証明書階層の設計パターン

【パターン A:Vault をルート CA として使う】
Vault Root CA (pki/)
  └── Vault Intermediate CA (pki_int/)
       └── アプリ証明書発行ロール

【パターン B:外部ルート CA の中間 CA として Vault を使う】
外部 Root CA(例:企業 PKI)
  └── Vault Intermediate CA (pki_int/) ← Vault が CSR 生成・署名申請
       └── アプリ証明書発行ロール(推奨)

中間 CA 構成の手順

# Step 1:ルート CA の有効化(本番では外部ルート CA を使うこと)
vault secrets enable -path=pki pki
vault secrets tune -max-lease-ttl=87600h pki

vault write pki/root/generate/internal \
  common_name="Root CA" ttl=87600h

# Step 2:中間 CA の有効化
vault secrets enable -path=pki_int pki
vault secrets tune -max-lease-ttl=43800h pki_int

# Step 3:CSR を生成
vault write pki_int/intermediate/generate/internal \
  common_name="Intermediate CA" > /tmp/pki_int.csr

# Step 4:ルート CA で中間 CA を署名
vault write pki/root/sign-intermediate \
  csr=@/tmp/pki_int.csr format=pem_bundle ttl=43800h > /tmp/int_cert.pem

# Step 5:中間 CA 証明書を設定
vault write pki_int/intermediate/set-signed \
  certificate=@/tmp/int_cert.pem

# Step 6:証明書発行ロールの作成
vault write pki_int/roles/my-server \
  allowed_domains="internal.example.com" \
  allow_subdomains=true max_ttl="720h"

SSH 証明書の動的発行

# SSH シークレットエンジンの有効化
vault secrets enable ssh

# CA キーの生成
vault write ssh/config/ca generate_signing_key=true

# Vault ホスト用ロール(サーバー証明書)
vault write ssh/roles/server-role \
  key_type=ca \
  ttl=30m \
  allow_host_certificates=true \
  allowed_domains="example.com" \
  allow_subdomains=true

# ユーザー証明書ロール
vault write ssh/roles/client-role \
  key_type=ca \
  ttl=30m \
  allow_user_certificates=true \
  allowed_users="*" \
  default_extensions="permit-pty="

# ユーザーの公開鍵に署名(SSH 証明書の発行)
vault write ssh/sign/client-role \
  public_key=@$HOME/.ssh/id_rsa.pub

# 発行された証明書で SSH 接続
vault write -field=signed_key ssh/sign/client-role \
  public_key=@$HOME/.ssh/id_rsa.pub > ~/.ssh/id_rsa-cert.pub

ssh -i ~/.ssh/id_rsa -i ~/.ssh/id_rsa-cert.pub user@server.example.com

5. Database シークレットエンジン

サポートされる DB エンジン

データベースプラグイン名特記事項
PostgreSQLpostgresql-database-plugin最も一般的
MySQL / MariaDBmysql-database-pluginユーザー名 32 文字制限に注意
MongoDBmongodb-database-pluginJSON 形式の creation_statements
MSSQLmssql-database-pluginSQL Server 認証
Oracleoracle-database-pluginEnterprise 版のみ
Cassandracassandra-database-pluginCQL 形式
Redisredis-database-pluginACL ベース
Elasticsearchelasticsearch-database-pluginロールマッピング

動的 vs 静的ロール

# 動的ロール:毎回新しいユーザーを生成
vault write database/roles/dynamic-role \
  db_name=my-postgres \
  creation_statements="CREATE ROLE ..." \
  default_ttl="1h"

vault read database/creds/dynamic-role  # → 新しいユーザー生成

# 静的ロール:既存ユーザーのパスワードを自動ローテーション
vault write database/static-roles/static-role \
  db_name=my-postgres \
  username="existing_app_user" \  # 既存 DB ユーザー
  rotation_period="24h"

vault read database/static-creds/static-role  # → ローテーション済みパスワードを返す

使い分けのポイント:

  • 動的ロール → 短期間・使い捨て・最もセキュア(漏洩時は TTL を待つか即失効)
  • 静的ロール → 既存ユーザーを使わざるを得ない場合・長期サービス用のパスワード自動ローテーション

6. AWS シークレットエンジン

3 種類の Credential Type

タイプ仕組みTTL推奨度
iam_userIAM ユーザーを動的作成・削除設定可能(注意:IAM レート制限)
assumed_role既存 IAM ロールを STS AssumeRole最大 12h(AWS STS 制限)高(推奨)
federation_tokenGetFederationToken で一時クレデンシャル最大 36h低(制約多い)

assumed_role の内部動作(詳細)

クライアント
   │ vault read aws/creds/my-role
   ↓
Vault (aws engine)
   │ 1. トークン検証・ポリシー確認
   │ 2. config/root のクレデンシャルを取得
   │ 3. AWS STS::AssumeRole(RoleArn, SessionName, DurationSeconds)
   ↓
AWS STS
   │ 一時クレデンシャルを生成・返却
   │ (AccessKeyId, SecretAccessKey, SessionToken, Expiration)
   ↓
Vault
   │ 4. リース生成 (lease_id, lease_duration)
   │ 5. クライアントへ返却
   ↓
クライアント
   │ AWS API 呼び出し(AccessKey + SessionToken 必須)
   ↓
TTL 超過 または vault lease revoke
   │ STS セッション自然満了 または AWS API で無効化

IAM Trust Policy の設定例

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:user/vault-root-user"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "vault-webinar-demo"
        }
      }
    }
  ]
}

Vault ルートユーザーに必要な最小 IAM 権限

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:AttachUserPolicy",
        "iam:CreateAccessKey",
        "iam:CreateUser",
        "iam:DeleteAccessKey",
        "iam:DeleteUser",
        "iam:DeleteUserPolicy",
        "iam:DetachUserPolicy",
        "iam:ListAttachedUserPolicies",
        "iam:ListUserPolicies",
        "iam:PutUserPolicy",
        "sts:AssumeRole"
      ],
      "Resource": "*"
    }
  ]
}

7. リース管理のベストプラクティス

TTL 設計の考え方

Max TTL >= Default TTL

短命推奨(セキュリティ優先):
  DB 認証情報: default_ttl=30m, max_ttl=2h
  AWS クレデンシャル(iam_user): default_ttl=15m, max_ttl=1h
  PKI 証明書(内部サービス): max_ttl=24h
  PKI 証明書(人間向け): max_ttl=7d

リース操作コマンド一覧

# 特定リースの情報確認
vault lease lookup <lease_id>

# リースの更新(TTL をリセット)
vault lease renew <lease_id>
vault lease renew -increment=2h <lease_id>

# 特定リースの失効
vault lease revoke <lease_id>

# プレフィックスで一括失効(緊急時)
vault lease revoke -prefix database/creds/app-role/
vault lease revoke -prefix aws/creds/

# 全リースの失効(緊急時のみ)
vault lease revoke -prefix /

8. セキュリティとコンプライアンス上の注意点

監査ログの活用

# 監査デバイスの有効化
vault audit enable file file_path=/var/log/vault/audit.log

# 監査ログの確認(特定パスのアクセス履歴)
grep '"path":"database/creds"' /var/log/vault/audit.log | jq .

# 監査ログのポイント:
# - シークレット値は HMAC-SHA256 でハッシュ化されて記録
# - クライアント IP、トークン ID、操作種別(read/write)が記録
# - コンプライアンス要件(SOC2, PCI-DSS など)への対応

最小権限の原則

# NG:ワイルドカードで広い権限
path "aws/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

# OK:必要なパスと操作のみ
path "aws/creds/s3-reader" {
  capabilities = ["read"]
}
path "aws/creds/s3-writer" {
  capabilities = ["read"]
}

9. 参考リンク

リソースURL
Vault 公式ドキュメント(シークレットエンジン一覧)https://developer.hashicorp.com/vault/docs/secrets
AWS シークレットエンジンhttps://developer.hashicorp.com/vault/docs/secrets/aws
PKI シークレットエンジンhttps://developer.hashicorp.com/vault/docs/secrets/pki
Database シークレットエンジンhttps://developer.hashicorp.com/vault/docs/secrets/databases
HashiCorp Japan Vault Workshophttps://github.com/hashicorp-japan/vault-workshop-jp
YouTube 解説動画https://www.youtube.com/watch?v=w2Rb5IwD-sM

このコンテンツ資料は content/vault/webinar_secrets_engine_content.md に保存されています。

© 2026 IBM Corporation. Licensed under CC BY 4.0.