はじめに
最初のシークレット
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での操作
シークレットの作成
- Web UI(http://127.0.0.1:8200/ui)にアクセス
- Secretsタブをクリック
- **secret/**をクリック
- Create secretをクリック
- Path:
myapp/configを入力 - Secret data:
- Key:
username, Value:admin - Key:
password, Value:supersecret123
- Key:
- Saveをクリック
シークレットの表示
- Secrets > secret/ > myapp/ > configをクリック
- シークレットの内容が表示される
- 👁️アイコンをクリックして値を表示
シークレットの編集
- シークレットの詳細画面でCreate new versionをクリック
- 値を編集
- 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の使用も容易になります。