はじめに

最初のシークレット

Vaultでシークレットを保存・取得する
最終更新: 2026/2/17

最初のシークレット

Vaultの基本操作として、シークレットの保存と取得を実際に体験してみましょう。

前提条件

  • Vaultの開発サーバーが起動していること
  • 環境変数が設定されていること
# 確認
echo $VAULT_ADDR
echo $VAULT_TOKEN

# 未設定の場合
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='<your-root-token>'

KVシークレットエンジン

開発サーバーでは、KV(Key-Value)シークレットエンジンがsecret/パスに自動的にマウントされています。

シークレットエンジンの確認

vault secrets list

出力例:

Path          Type         Description
----          ----         -----------
cubbyhole/    cubbyhole    per-token private secret storage
identity/     identity     identity store
secret/       kv           key/value secret storage
sys/          system       system endpoints used for control, policy and debugging

シークレットの保存

基本的な保存

# シークレットを保存
vault kv put secret/myapp/config \
  username=admin \
  password=supersecret123

出力:

====== Secret Path ======
secret/data/myapp/config

======= Metadata =======
Key                Value
---                -----
created_time       2024-01-15T10:30:45.123456Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

複数の値を保存

# 複数のキー・バリューペアを保存
vault kv put secret/myapp/database \
  host=db.example.com \
  port=5432 \
  username=dbuser \
  password=dbpass123 \
  database=myapp_production

ファイルから保存

# JSONファイルを作成
cat > config.json <<EOF
{
  "api_key": "sk_live_abc123xyz",
  "api_secret": "secret_xyz789abc",
  "endpoint": "https://api.example.com"
}
EOF

# ファイルから保存
vault kv put secret/myapp/api @config.json

シークレットの取得

基本的な取得

# シークレットを取得
vault kv get secret/myapp/config

出力:

====== Secret Path ======
secret/data/myapp/config

======= Metadata =======
Key                Value
---                -----
created_time       2024-01-15T10:30:45.123456Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

====== Data ======
Key         Value
---         -----
password    supersecret123
username    admin

特定のフィールドのみ取得

# usernameフィールドのみ取得
vault kv get -field=username secret/myapp/config

出力:

admin

JSON形式で取得

# JSON形式で取得
vault kv get -format=json secret/myapp/config

出力:

{
  "request_id": "abc123-def456-ghi789",
  "lease_id": "",
  "lease_duration": 0,
  "renewable": false,
  "data": {
    "data": {
      "password": "supersecret123",
      "username": "admin"
    },
    "metadata": {
      "created_time": "2024-01-15T10:30:45.123456Z",
      "custom_metadata": null,
      "deletion_time": "",
      "destroyed": false,
      "version": 1
    }
  }
}

jqを使用した値の抽出

# jqでパスワードを抽出
vault kv get -format=json secret/myapp/config | jq -r '.data.data.password'

出力:

supersecret123

シークレットの更新

既存のシークレットを更新

# パスワードを更新
vault kv put secret/myapp/config \
  username=admin \
  password=newsecret456
バージョン管理KV v2エンジンは、シークレットのバージョンを自動的に管理します。更新するたびに新しいバージョンが作成されます。

部分的な更新(patch)

# パスワードのみ更新(他のフィールドは保持)
vault kv patch secret/myapp/config \
  password=newsecret789

シークレットのバージョン管理

バージョン履歴の確認

# メタデータを取得
vault kv metadata get secret/myapp/config

出力:

========== Metadata ==========
Key                     Value
---                     -----
cas_required            false
created_time            2024-01-15T10:30:45.123456Z
current_version         3
custom_metadata         <nil>
delete_version_after    0s
max_versions            0
oldest_version          0
updated_time            2024-01-15T11:45:30.789012Z

====== Version 1 ======
Key              Value
---              -----
created_time     2024-01-15T10:30:45.123456Z
deletion_time    n/a
destroyed        false

====== Version 2 ======
Key              Value
---              -----
created_time     2024-01-15T11:00:15.456789Z
deletion_time    n/a
destroyed        false

====== Version 3 ======
Key              Value
---              -----
created_time     2024-01-15T11:45:30.789012Z
deletion_time    n/a
destroyed        false

特定のバージョンを取得

# バージョン1を取得
vault kv get -version=1 secret/myapp/config

# バージョン2を取得
vault kv get -version=2 secret/myapp/config

バージョンの削除

# バージョン1を削除(復元可能)
vault kv delete -versions=1 secret/myapp/config

# バージョン1を完全に削除(復元不可)
vault kv destroy -versions=1 secret/myapp/config

バージョンの復元

# 削除されたバージョン1を復元
vault kv undelete -versions=1 secret/myapp/config

シークレットの一覧表示

パスの一覧

# secret/配下のパスを一覧表示
vault kv list secret/

出力:

Keys
----
myapp/
# secret/myapp/配下のパスを一覧表示
vault kv list secret/myapp/

出力:

Keys
----
api
config
database

シークレットの削除

最新バージョンの削除

# 最新バージョンを削除(復元可能)
vault kv delete secret/myapp/config

すべてのバージョンとメタデータの削除

# シークレット全体を削除(復元不可)
vault kv metadata delete secret/myapp/config

実践例:アプリケーション設定の管理

1. 環境ごとの設定を保存

# 開発環境
vault kv put secret/myapp/dev \
  db_host=dev-db.example.com \
  db_username=dev_user \
  db_password=dev_pass123 \
  api_endpoint=https://dev-api.example.com

# ステージング環境
vault kv put secret/myapp/staging \
  db_host=staging-db.example.com \
  db_username=staging_user \
  db_password=staging_pass456 \
  api_endpoint=https://staging-api.example.com

# 本番環境
vault kv put secret/myapp/production \
  db_host=prod-db.example.com \
  db_username=prod_user \
  db_password=prod_pass789 \
  api_endpoint=https://api.example.com

2. アプリケーションから取得

Bashスクリプト例:

#!/bin/bash

# 環境を指定
ENV=${1:-dev}

# Vaultから設定を取得
DB_HOST=$(vault kv get -field=db_host secret/myapp/$ENV)
DB_USERNAME=$(vault kv get -field=db_username secret/myapp/$ENV)
DB_PASSWORD=$(vault kv get -field=db_password secret/myapp/$ENV)

# アプリケーションを起動
export DB_HOST DB_USERNAME DB_PASSWORD
./myapp

Python例:

import hvac
import os

# Vaultクライアントの初期化
client = hvac.Client(
    url=os.environ['VAULT_ADDR'],
    token=os.environ['VAULT_TOKEN']
)

# 環境を指定
env = os.environ.get('APP_ENV', 'dev')

# シークレットを取得
secret = client.secrets.kv.v2.read_secret_version(
    path=f'myapp/{env}'
)

# 設定を使用
config = secret['data']['data']
db_host = config['db_host']
db_username = config['db_username']
db_password = config['db_password']

print(f"Connecting to {db_host} as {db_username}")

Web UIでの操作

シークレットの作成

  1. Web UI(http://127.0.0.1:8200/ui)にアクセス
  2. Secretsタブをクリック
  3. **secret/**をクリック
  4. Create secretをクリック
  5. Path: myapp/configを入力
  6. Secret data:
    • Key: username, Value: admin
    • Key: password, Value: supersecret123
  7. Saveをクリック

シークレットの表示

  1. Secrets > secret/ > myapp/ > configをクリック
  2. シークレットの内容が表示される
  3. 👁️アイコンをクリックして値を表示

シークレットの編集

  1. シークレットの詳細画面でCreate new versionをクリック
  2. 値を編集
  3. Saveをクリック

ベストプラクティス

1. 階層的な構造

secret/
├── myapp/
│   ├── dev/
│   │   ├── database
│   │   └── api
│   ├── staging/
│   │   ├── database
│   │   └── api
│   └── production/
│       ├── database
│       └── api
└── shared/
    └── common-config

2. 命名規則

  • 小文字を使用: myapp/config(推奨)
  • ケバブケース: my-app/db-config
  • スラッシュで階層化: myapp/production/database

3. セキュリティ

  • 機密情報のみ保存: 公開情報は別の場所に
  • 最小権限の原則: 必要なシークレットのみアクセス可能に
  • 定期的なローテーション: パスワードを定期的に更新

トラブルシューティング

シークレットが見つからない

エラー:

No value found at secret/data/myapp/config

確認事項:

# パスを確認
vault kv list secret/
vault kv list secret/myapp/

# 正しいパスで取得
vault kv get secret/myapp/config

権限エラー

エラー:

Error making API request.
Code: 403. Errors:
* permission denied

解決策:

# トークンの権限を確認
vault token lookup

# 必要に応じて適切なポリシーを持つトークンを使用
vault login <token-with-proper-policy>

次のステップ

シークレットの基本操作を理解したら、次は認証方法の概要で、より安全な認証方法を学びましょう。

学習のヒントまずはCLIでの操作に慣れることをお勧めします。CLIの操作を理解すれば、Web UIやAPIの使用も容易になります。
© 2026 IBM Corporation. Licensed under CC BY 4.0.