認証方法の概要
認証方法の概要
Vaultは、様々な認証方法をサポートしており、ユーザーやアプリケーションの要件に応じて最適な方法を選択できます。
認証の仕組み
認証フロー
1. クライアント → Vault: 認証情報を送信
2. Vault: 認証情報を検証
3. Vault → クライアント: トークンを発行
4. クライアント → Vault: トークンを使用してAPIリクエスト
トークンベースの認証
すべての認証方法は、最終的にVaultトークンを発行します。
# 認証後にトークンが発行される
vault login -method=userpass username=myuser
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"]
主要な認証方法
1. Token認証
概要: 最もシンプルな認証方法。トークンを直接使用します。
用途:
- 開発・テスト環境
- 他の認証方法の基盤
- 一時的なアクセス
認証方法:
vault login <token>
メリット:
- シンプルで理解しやすい
- すぐに使用可能
デメリット:
- トークンの管理が必要
- 人間のユーザーには不便
詳細はトークンをご覧ください。
2. Username/Password認証
概要: ユーザー名とパスワードで認証します。
用途:
- 人間のユーザー
- 開発者のアクセス
- 管理者の操作
認証方法:
vault login -method=userpass username=myuser
Password (will be hidden):
メリット:
- 直感的で使いやすい
- ユーザー管理が容易
デメリット:
- パスワード管理が必要
- 自動化には不向き
詳細はUsername & Passwordをご覧ください。
3. AppRole認証
概要: アプリケーション向けの認証方法。Role IDとSecret IDを使用します。
用途:
- アプリケーション
- 自動化スクリプト
- CI/CDパイプライン
認証方法:
vault write auth/approle/login \
role_id=<role-id> \
secret_id=<secret-id>
メリット:
- 自動化に適している
- Role IDとSecret IDの分離管理
- Secret IDの動的生成
デメリット:
- 初期設定がやや複雑
- Secret IDの配布が必要
詳細はAppRoleをご覧ください。
4. LDAP/Active Directory認証
概要: 既存のLDAP/ADディレクトリと統合します。
用途:
- 企業環境
- 既存のユーザーディレクトリ活用
- シングルサインオン
認証方法:
vault login -method=ldap username=myuser
Password (will be hidden):
メリット:
- 既存のディレクトリを活用
- ユーザー管理の一元化
- グループベースのポリシー割り当て
デメリット:
- LDAP/ADサーバーが必要
- ネットワーク接続が必要
5. Kubernetes認証
概要: Kubernetes ServiceAccountを使用して認証します。
用途:
- Kubernetes環境
- コンテナアプリケーション
- マイクロサービス
認証方法:
vault write auth/kubernetes/login \
role=myapp \
jwt=<service-account-jwt>
メリット:
- Kubernetesとのネイティブ統合
- ServiceAccountの自動管理
- Podごとの細かいアクセス制御
デメリット:
- Kubernetes環境が必要
- 初期設定が必要
6. AWS認証
概要: AWS IAMロールやEC2インスタンスメタデータを使用します。
用途:
- AWS環境
- EC2インスタンス
- Lambda関数
認証方法:
# IAM認証
vault login -method=aws
# EC2認証
vault login -method=aws role=my-role
メリット:
- AWS IAMとの統合
- インスタンスメタデータの活用
- 認証情報の管理不要
デメリット:
- AWS環境が必要
- IAMロールの設定が必要
7. Azure認証
概要: Azure Managed IdentityやService Principalを使用します。
用途:
- Azure環境
- Azure VM
- Azure Functions
認証方法:
vault login -method=azure \
role=my-role \
jwt=<jwt-token>
メリット:
- Azure Managed Identityとの統合
- 認証情報の管理不要
デメリット:
- Azure環境が必要
8. GCP認証
概要: GCP Service AccountやGCE インスタンスメタデータを使用します。
用途:
- GCP環境
- GCE インスタンス
- Cloud Functions
認証方法:
vault login -method=gcp \
role=my-role \
jwt=<jwt-token>
メリット:
- GCP Service Accountとの統合
- インスタンスメタデータの活用
デメリット:
- GCP環境が必要
9. GitHub認証
概要: GitHubの個人アクセストークンを使用します。
用途:
- 開発者のアクセス
- GitHub Organizationとの統合
認証方法:
vault login -method=github token=<github-token>
メリット:
- GitHubアカウントの活用
- Organizationベースのアクセス制御
デメリット:
- GitHubアカウントが必要
- 個人アクセストークンの管理
10. JWT/OIDC認証
概要: JWT(JSON Web Token)やOIDCプロバイダーを使用します。
用途:
- シングルサインオン
- 外部IDプロバイダーとの統合
- OAuth2/OIDC環境
認証方法:
vault login -method=oidc
メリット:
- 標準的なプロトコル
- 多様なIDプロバイダーに対応
デメリット:
- OIDCプロバイダーの設定が必要
認証方法の比較
| 認証方法 | 人間 | アプリ | 自動化 | クラウド統合 | 複雑さ |
|---|---|---|---|---|---|
| Token | ⭐⭐ | ⭐⭐⭐ | ⭐⭐ | - | ⭐ |
| UserPass | ⭐⭐⭐ | ⭐ | ⭐ | - | ⭐ |
| AppRole | ⭐ | ⭐⭐⭐ | ⭐⭐⭐ | - | ⭐⭐ |
| LDAP/AD | ⭐⭐⭐ | ⭐ | ⭐ | - | ⭐⭐ |
| Kubernetes | - | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| AWS | - | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| Azure | - | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| GCP | - | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| GitHub | ⭐⭐⭐ | ⭐ | ⭐ | - | ⭐ |
| JWT/OIDC | ⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
認証方法の選び方
シナリオ別の推奨
1. 開発者のアクセス
推奨: Username/Password または LDAP/AD
# Username/Password
vault login -method=userpass username=developer1
# LDAP
vault login -method=ldap username=developer1
理由:
- 直感的で使いやすい
- 既存のディレクトリを活用可能
2. アプリケーションのアクセス
推奨: AppRole
vault write auth/approle/login \
role_id=<role-id> \
secret_id=<secret-id>
理由:
- 自動化に適している
- Role IDとSecret IDの分離管理
3. Kubernetes環境
推奨: Kubernetes認証
vault write auth/kubernetes/login \
role=myapp \
jwt=<service-account-jwt>
理由:
- Kubernetesとのネイティブ統合
- ServiceAccountの自動管理
4. AWS環境
推奨: AWS認証
vault login -method=aws
理由:
- AWS IAMとの統合
- 認証情報の管理不要
5. CI/CDパイプライン
推奨: AppRole または クラウドプロバイダー認証
# AppRole
vault write auth/approle/login \
role_id=$VAULT_ROLE_ID \
secret_id=$VAULT_SECRET_ID
# AWS(GitHub Actions on AWS)
vault login -method=aws
理由:
- 自動化に適している
- シークレットの動的生成
認証方法の有効化
基本的な有効化
# Username/Password認証を有効化
vault auth enable userpass
# AppRole認証を有効化
vault auth enable approle
# Kubernetes認証を有効化
vault auth enable kubernetes
カスタムパスで有効化
# カスタムパスで有効化
vault auth enable -path=my-userpass userpass
# 複数の同じタイプの認証方法を有効化可能
vault auth enable -path=team-a-userpass userpass
vault auth enable -path=team-b-userpass userpass
認証方法の一覧
vault auth list
出力例:
Path Type Description
---- ---- -----------
approle/ approle n/a
kubernetes/ kubernetes n/a
token/ token token based credentials
userpass/ userpass n/a
認証方法の無効化
# 認証方法を無効化
vault auth disable userpass
# カスタムパスの認証方法を無効化
vault auth disable my-userpass
認証ポリシーの割り当て
ユーザーへのポリシー割り当て
# Username/Passwordユーザーにポリシーを割り当て
vault write auth/userpass/users/myuser \
password=mypassword \
policies=myapp-read,myapp-write
# AppRoleにポリシーを割り当て
vault write auth/approle/role/myapp \
token_policies=myapp-read,myapp-write
グループベースのポリシー割り当て
# LDAPグループにポリシーを割り当て
vault write auth/ldap/groups/developers \
policies=dev-read,dev-write
ベストプラクティス
1. 最小権限の原則
各ユーザー・アプリケーションに必要最小限の権限のみを付与します。
# 読み取り専用ポリシー
vault write auth/userpass/users/readonly-user \
password=password \
policies=read-only
# 読み書き可能ポリシー
vault write auth/userpass/users/admin-user \
password=password \
policies=admin
2. トークンのTTL設定
トークンの有効期限を適切に設定します。
# 短いTTL(1時間)
vault write auth/approle/role/myapp \
token_ttl=1h \
token_max_ttl=4h
# 長いTTL(30日)
vault write auth/userpass/users/developer \
password=password \
token_ttl=720h
3. 環境ごとの認証方法
環境ごとに適切な認証方法を選択します。
| 環境 | 推奨認証方法 | 理由 |
|---|---|---|
| 開発 | UserPass, Token | シンプル、迅速 |
| ステージング | AppRole, クラウド認証 | 本番環境に近い |
| 本番 | AppRole, クラウド認証, LDAP | セキュア、自動化 |
4. 監査ログの有効化
すべての認証試行を記録します。
vault audit enable file file_path=/var/log/vault/audit.log
次のステップ
認証方法の概要を理解したら、具体的な認証方法の設定を学びましょう:
- トークン - トークンベースの認証
- Username & Password - ユーザー名とパスワード認証
- AppRole - アプリケーション向け認証