認証
Username & Password
ユーザー名とパスワードによる認証
最終更新: 2026/2/17
Username & Password認証
Username/Password認証は、最も直感的な認証方法です。人間のユーザーがVaultにアクセスする際に適しています。
Username/Password認証とは
Username/Password認証は、ユーザー名とパスワードのペアを使用してVaultに認証する方法です。
特徴
✅ 直感的
- 誰でも理解しやすい
- 学習コストが低い
✅ 管理が容易
- ユーザーの追加・削除が簡単
- パスワードのリセットが可能
✅ ポリシーの柔軟な割り当て
- ユーザーごとに異なるポリシーを設定可能
❌ 自動化には不向き
- パスワードの入力が必要
- スクリプトでの使用が困難
認証方法の有効化
基本的な有効化
# Username/Password認証を有効化
vault auth enable userpass
出力:
Success! Enabled userpass auth method at: userpass/
カスタムパスで有効化
# カスタムパスで有効化
vault auth enable -path=my-userpass userpass
有効化の確認
vault auth list
出力:
Path Type Description
---- ---- -----------
token/ token token based credentials
userpass/ userpass n/a
ユーザーの管理
ユーザーの作成
# 基本的なユーザー作成
vault write auth/userpass/users/myuser \
password=mypassword \
policies=default
ポリシーを指定してユーザー作成
# 複数のポリシーを持つユーザー
vault write auth/userpass/users/developer \
password=devpassword \
policies=default,myapp-read,myapp-write
TTLを指定してユーザー作成
# トークンのTTLを設定
vault write auth/userpass/users/tempuser \
password=temppass \
policies=default \
token_ttl=1h \
token_max_ttl=4h
ユーザー一覧の表示
vault list auth/userpass/users
出力:
Keys
----
developer
myuser
tempuser
ユーザー情報の確認
vault read auth/userpass/users/myuser
出力:
Key Value
--- -----
policies [default myapp-read]
token_bound_cidrs []
token_explicit_max_ttl 0s
token_max_ttl 0s
token_no_default_policy false
token_num_uses 0
token_period 0s
token_policies [default myapp-read]
token_ttl 0s
token_type default
パスワードの変更
# パスワードを変更
vault write auth/userpass/users/myuser/password \
password=newpassword
ポリシーの更新
# ポリシーを更新
vault write auth/userpass/users/myuser \
policies=default,myapp-read,myapp-write,myapp-admin
ユーザーの削除
vault delete auth/userpass/users/myuser
ログイン
CLIでのログイン
# ユーザー名を指定してログイン
vault login -method=userpass username=myuser
Password (will be hidden):
出力:
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.
Key Value
--- -----
token hvs.CAESIJ...
token_accessor abc123...
token_duration 768h
token_renewable true
token_policies ["default" "myapp-read"]
identity_policies []
policies ["default" "myapp-read"]
token_meta_username myuser
パスワードを環境変数から取得
# パスワードを環境変数に設定
export VAULT_PASSWORD=mypassword
# ログイン
vault login -method=userpass username=myuser password=$VAULT_PASSWORD
Web UIでのログイン
- ブラウザで
http://127.0.0.1:8200/uiにアクセス - Method:
Usernameを選択 - Username: ユーザー名を入力
- Password: パスワードを入力
- Sign Inをクリック
APIでの使用
ログインAPI
# APIでログイン
curl \
--request POST \
--data '{"password": "mypassword"}' \
http://127.0.0.1:8200/v1/auth/userpass/login/myuser
レスポンス:
{
"request_id": "abc123-def456",
"lease_id": "",
"renewable": false,
"lease_duration": 0,
"data": null,
"auth": {
"client_token": "hvs.CAESIJ...",
"accessor": "abc123...",
"policies": ["default", "myapp-read"],
"token_policies": ["default", "myapp-read"],
"metadata": {
"username": "myuser"
},
"lease_duration": 2764800,
"renewable": true
}
}
トークンを使用したAPIリクエスト
# 取得したトークンを使用
TOKEN="hvs.CAESIJ..."
curl \
--header "X-Vault-Token: $TOKEN" \
http://127.0.0.1:8200/v1/secret/data/myapp/config
高度な設定
トークン設定のカスタマイズ
# 詳細なトークン設定
vault write auth/userpass/users/poweruser \
password=powerpass \
policies=admin \
token_ttl=2h \
token_max_ttl=8h \
token_period=0s \
token_bound_cidrs="10.0.0.0/8" \
token_explicit_max_ttl=24h \
token_no_default_policy=false \
token_num_uses=0 \
token_type=service
パラメータの説明:
| パラメータ | 説明 | デフォルト |
|---|---|---|
token_ttl | トークンの初期TTL | システムデフォルト |
token_max_ttl | トークンの最大TTL | システムデフォルト |
token_period | Periodic Tokenの期間 | 0(無効) |
token_bound_cidrs | 許可するIPアドレス範囲 | なし |
token_explicit_max_ttl | 明示的な最大TTL | 0(無制限) |
token_no_default_policy | defaultポリシーを付与しない | false |
token_num_uses | トークンの使用回数制限 | 0(無制限) |
token_type | トークンタイプ | default |
IPアドレス制限
# 特定のIPアドレスからのみアクセス可能
vault write auth/userpass/users/restricted \
password=restrictedpass \
policies=default \
token_bound_cidrs="192.168.1.0/24,10.0.0.0/8"
使用回数制限
# 10回のみ使用可能なトークン
vault write auth/userpass/users/limited \
password=limitedpass \
policies=default \
token_num_uses=10
実践例
開発チーム用のユーザー管理
# 開発者用ポリシーの作成
vault policy write developer - <<EOF
# 開発環境のシークレットへの読み書き
path "secret/data/dev/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# 本番環境のシークレットは読み取りのみ
path "secret/data/prod/*" {
capabilities = ["read", "list"]
}
EOF
# 開発者ユーザーの作成
vault write auth/userpass/users/dev1 \
password=dev1pass \
policies=developer
vault write auth/userpass/users/dev2 \
password=dev2pass \
policies=developer
管理者用のユーザー管理
# 管理者用ポリシーの作成
vault policy write admin - <<EOF
# すべてのシークレットへのフルアクセス
path "secret/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# 認証方法の管理
path "auth/*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
# ポリシーの管理
path "sys/policies/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
EOF
# 管理者ユーザーの作成
vault write auth/userpass/users/admin \
password=adminpass \
policies=admin \
token_ttl=4h \
token_max_ttl=8h
一時ユーザーの作成
# 短期間のアクセス用ユーザー
vault write auth/userpass/users/contractor \
password=contractorpass \
policies=read-only \
token_ttl=8h \
token_max_ttl=8h \
token_explicit_max_ttl=8h
パスワードポリシー
パスワード要件の設定
Vaultでは、パスワードポリシーを定義できます(Enterprise版)。
# password-policy.hcl
length = 12
rule "charset" {
charset = "abcdefghijklmnopqrstuvwxyz"
min-chars = 1
}
rule "charset" {
charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
min-chars = 1
}
rule "charset" {
charset = "0123456789"
min-chars = 1
}
rule "charset" {
charset = "!@#$%^&*"
min-chars = 1
}
セキュリティのベストプラクティス
1. 強力なパスワード
# 強力なパスワードを使用
vault write auth/userpass/users/secureuser \
password="MyS3cur3P@ssw0rd!2024" \
policies=default
2. 短いトークンTTL
# 短いTTLを設定
vault write auth/userpass/users/shortlived \
password=password \
policies=default \
token_ttl=1h \
token_max_ttl=4h
3. IPアドレス制限
# 社内ネットワークからのみアクセス可能
vault write auth/userpass/users/internal \
password=password \
policies=default \
token_bound_cidrs="10.0.0.0/8"
4. 定期的なパスワード変更
# パスワードを定期的に変更
vault write auth/userpass/users/myuser/password \
password=newpassword
5. 監査ログの確認
# 監査ログを有効化
vault audit enable file file_path=/var/log/vault/audit.log
# ログインの試行を確認
grep "auth/userpass/login" /var/log/vault/audit.log
トラブルシューティング
ログインに失敗する
エラー:
Error authenticating: Error making API request.
Code: 400. Errors:
* invalid username or password
確認事項:
# ユーザーが存在するか確認
vault list auth/userpass/users
# ユーザー情報を確認
vault read auth/userpass/users/myuser
パスワードを忘れた
解決策:
# 管理者権限でパスワードをリセット
vault write auth/userpass/users/myuser/password \
password=newpassword
トークンの有効期限が短すぎる
解決策:
# TTLを延長
vault write auth/userpass/users/myuser \
token_ttl=24h \
token_max_ttl=72h
IPアドレス制限でアクセスできない
エラー:
Error making API request.
Code: 403. Errors:
* permission denied
解決策:
# IPアドレス制限を確認
vault read auth/userpass/users/myuser
# 制限を更新
vault write auth/userpass/users/myuser \
token_bound_cidrs="10.0.0.0/8,192.168.1.0/24"
次のステップ
Username/Password認証を理解したら、次はAppRoleでアプリケーション向けの認証方法を学びましょう。
認証方法の使い分けUsername/Password認証は人間のユーザーに適しています。アプリケーションやスクリプトには、AppRoleやクラウドプロバイダー認証の使用を検討してください。