既存の社内ディレクトリ(Active Directory や OpenLDAP)を活かしつつ、Vault のトークン発行に統合するのが LDAP 認証です。ローカルユーザーを増やさず、既存のグループでポリシーを割り当てられるのが最大の利点です。
本稿は HashiCorp Vault の公式動作に基づき、試験(Vault Associate)で問われやすい概念と、現場導入で外しがちなポイントをセットで解説します。
Vault の認証方式(auth method)の一つである LDAP は、ユーザーのパスワード検証をディレクトリに委譲し、認証成功時に Vault トークンを発行します。ディレクトリ側のグループと Vault ポリシーをマッピングすることで、権限管理の一元化が可能になります。
安定した前提:LDAP/LDAPS の接続、bind アカウントによる検索(匿名 bind を避ける)、ユーザー・グループ DN 範囲の明確化、TLS 信頼の設定。試験では「どこでポリシーが付与されるか」「どのエンドポイントで何を設定するか」が頻出です。
LDAP 認証の高レベルフロー
URL と TLS: ldaps:// を使うか、ldap:// + starttls=true を使います。いずれにせよ certificate で信頼できる CA を渡し、insecure_tls は false のままにします。
検索のためのバインド: binddn と bindpass を指定し、ユーザー・グループを検索します。deny_null_bind=true で匿名 bind を明示的に拒否します。
ユーザー・グループの範囲: userdn(例: ou=Users,dc=example,dc=com)と groupdn を設定。userattr は OpenLDAP なら uid、AD なら sAMAccountName が一般的です。discoverdn=true を有効化すると、ユーザー名から DN を解決しやすくなります。
1) 認証方式の有効化: パスを明示して有効化します(例: auth/ldap/)。
2) 接続設定: LDAP/LDAPS の URL、binddn、検索範囲、TLS の信頼を設定します。
3) ポリシーマッピング: ディレクトリのグループ名を Vault のポリシーに対応付けます(原則グループ単位)。
設定とテストの CLI 例
vault auth enable -path=ldap ldap
vault write auth/ldap/config \
url="ldaps://ldap.example.com:636" \
binddn="cn=vault-bind,ou=svc,dc=example,dc=com" \
bindpass="s3cr3t" \
userdn="ou=users,dc=example,dc=com" \
userattr="uid" \
groupdn="ou=groups,dc=example,dc=com" \
groupfilter="(&(objectClass=groupOfNames)(member={{.UserDN}}))" \
starttls=false \
insecure_tls=false \
certificate=@/etc/ssl/certs/ldap-ca.pem \
discoverdn=true \
deny_null_bind=true
# グループとポリシーのマッピング
vault write auth/ldap/groups/platform-admin policies="admin,kv-ro"
vault write auth/ldap/groups/dev policies="default,kv-ro"
# 必要に応じてユーザー単位で上書き(最小限に限定)
# vault write auth/ldap/users/alice policies="breakglass"
# ログインテスト
echo "<password>" | vault login -method=ldap -format=json username=alice
# 認証方式のチューニング(例:トークン種別)
vault auth tune -token-type=default-service ldap/ディレクトリのスキーマや属性名が異なるため、userattr や groupfilter の最適解は AD と OpenLDAP で変わります。AD では sAMAccountName や UPN、group の member 属性、さらにはネストグループを解決するためのマッチングルール(1.2.840.113556.1.4.1941)がよく使われます。OpenLDAP では uid と groupOfNames/posixGroup のどちらを採用しているかでフィルターが変わります。
Vault 側は groupfilter でグループ検索を行い、得られたグループ名と auth/ldap/groups/<name> のマッピングによりポリシーを付与します。groupfilter のテンプレート変数 {{.UserDN}} と {{.Username}} のどちらを使うかは、ディレクトリの group エントリが何を持っているか(DN か name か)に合わせます。
| 項目 | Active Directory 例 | OpenLDAP 例 | 備考 |
|---|---|---|---|
| userattr | sAMAccountName | uid | ログイン時のユーザー名に対応 |
| group オブジェクト | group | groupOfNames / posixGroup | 導入環境で異なる |
| groupfilter(基本) | (&(objectClass=group)(member={{.UserDN}})) | (&(objectClass=groupOfNames)(member={{.UserDN}})) | posixGroup の場合は memberUid={{.Username}} |
| ネストグループ | (&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}})) | 実装依存(標準では非対応) | AD 固有の in-chain ルール |
| UPN ログイン | userattr=userPrincipalName(upndomain 併用可) | — | 環境要件に応じて選択 |
フィルター例(用途別)
# AD: 直接所属グループ
(&(objectClass=group)(member={{.UserDN}}))
# AD: ネスト含む所属グループ(in-chain)
(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))
# OpenLDAP: groupOfNames
(&(objectClass=groupOfNames)(member={{.UserDN}}))
# OpenLDAP: posixGroup(ユーザー名で照合)
(&(objectClass=posixGroup)(memberUid={{.Username}}))資格情報の回転: bindpass は定期的にローテーションし、設定反映後はログインテストを自動化して失敗を早期検知します。CI/CD から vault write を安全に実行できる仕組みを用意します。
証明書運用: LDAP サーバの CA 変更時は、certificate パラメータを更新してから切替えると中断を避けやすいです。insecure_tls を一時的に true にしてしのぐ運用は避けます。
監査: Vault の audit デバイス(file/syslog 等)を有効化し、auth/ldap/login への書き込みイベントを記録します。失敗が続く場合は LDAP サーバ側ログと突き合わせます。
運用時の代表コマンド
# bind パスワードローテーション
vault write auth/ldap/config \
binddn="cn=vault-bind,ou=svc,dc=example,dc=com" \
bindpass="<new-password>"
# LDAP 認証の詳細リスト
vault auth list -detailed
# audit(例: ファイル出力)
vault audit enable file file_path=/var/log/vault_audit.logポリシー付与の場所を言えるか: auth/ldap/groups/<groupname> または users/<username> に policies を書く。groupfilter 自体は検索条件であり、ポリシー付与は別物。
ログインパス: ユーザーは vault login -method=ldap username=<name>(または auth/ldap/login/<name>)でログインする。ユーザーのパスワードは Vault に保存されない(LDAP で検証)。
TLS の基本: 本番で insecure_tls を使わない、certificate で信頼を与える。ldap:// を使う場合は starttls=true。
Associate
問題 1
Vault を既存の LDAP と統合し、LDAP グループごとに Vault ポリシーを付与したい。正しい設定箇所はどれか。
正解: A
ポリシー付与は auth/ldap/groups/<name>(または users/<name>)で行う。groupfilter はグループ検索条件であり、ポリシー定義の場所ではない。
Vault は LDAP ユーザーのパスワードを保存しますか?
保存しません。ログイン時に Vault が LDAP へバインド・検索を行い、認証の可否のみを用います。成功時に Vault がトークンを発行します。
StartTLS と LDAPS はどちらを選ぶべきですか?
どちらでも良いですが、本番では必ず TLS を有効にします。既存の運用に合わせて、ldap://+starttls=true(389/TCP)または ldaps://(636/TCP)を選択し、certificate で信頼できる CA を渡します。
グループが入れ子(ネスト)になっています。Vault 側で対応できますか?
Vault 側の機能ではなく、LDAP の groupfilter で表現します。Active Directory であれば in-chain ルール(1.2.840.113556.1.4.1941)を使ったフィルターを設定し、返ってくるグループ名に対して auth/ldap/groups のマッピングを作成します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Vault のコア概念を最短距離で理解する:Secret / Auth / Policy / Token
HashiCorp Vault Associate レベルで押さえるべきコア概念(Secret Engine、Auth ...
Vault Operations Professional: 上位資格としての範囲を実務目線で押さえる
HashiCorp Vault Operations Professional(Ops Pro)の出題範囲を、Assoc...
Vaultにおけるパスベースのルーティング: マウントとAPI構造を読み解く
HashiCorp Vaultのパスベースのルーティングを、マウント設計とAPIパスの観点から整理。Associateレ...
Vault Tokens の基礎: 認証の起点となる概念
HashiCorp Vault におけるトークンの役割、種類、ライフサイクル、ポリシー連携、設計パターンをAssocia...
Vault のトークン種類を正しく使い分ける: service / batch 実践
HashiCorp Vault Associate 向けの試験対策と実務運用を両立させた、service トークンと b...