
LDAP 机密引擎提供了一个集中的工作流程,用于有效地管理现有的 LDAP 输入密码,使用户能够访问自己的凭据,并享受自动密码轮换的好处。
使用带有 Vault 的 LDAP 机密引擎为用户提供多种身份验证方法来访问他们自己的 LDAP 凭据。
您可以授权用户管理他们自己的 LDAP 条目,并且可以配置他们的密码以根据管理员指定的生存时间值自动轮换。
下图说明了此凭证管理工作流程。

启动一个openldap容器
$ docker run \
--name vault-openldap \
--env LDAP_ORGANISATION="learn" \
--env LDAP_DOMAIN="learn.example" \
--env LDAP_ADMIN_PASSWORD="2LearnVault" \
-p 389:389 \
-p 636:636 \
--detach \
--rm \
osixia/openldap:1.5.0准备1个ldap子账号的配置文件
$ cat > learn-vault-example.ldif <<EOF
dn: ou=groups,dc=learn,dc=example
objectClass: organizationalunit
objectClass: top
ou: groups
description: groups of users
dn: ou=users,dc=learn,dc=example
objectClass: organizationalunit
objectClass: top
ou: users
description: users
dn: cn=dev,ou=groups,dc=learn,dc=example
objectClass: groupofnames
objectClass: top
description: testing group for dev
cn: dev
member: cn=alice,ou=users,dc=learn,dc=example
dn: cn=alice,ou=users,dc=learn,dc=example
objectClass: person
objectClass: top
cn: learn
sn: learn
memberOf: cn=dev,ou=groups,dc=learn,dc=example
userPassword: 1LearnedVault
EOF将配置文件拷贝到docker容器里面
$ docker cp learn-vault-example.ldif vault-openldap:/tmp/登陆到容器中,使用 ldapadd 实用程序添加此配置
$ docker exec -ti vault-openldap bash
ldapadd -cxWD "cn=admin,dc=learn,dc=example" -f /tmp/learn-vault-example.ldif
输入的是上面最高权限的密码 2LearnVault然后,退出到容器外。
1 启用ldap引擎(假设vault已经登陆root token了)
$ vault secrets enable ldap2 使用 ldap 插件配置 LDAP 密钥引擎,以便与基于 Docker 的 OpenLDAP 容器通信。
$ vault write ldap/config \
binddn=cn=admin,dc=learn,dc=example \
bindpass=2LearnVault \
url=ldap://192.168.31.1813 轮换根凭证【注意,这步不是必要操作,准确的说这步很危险的。除非你额外使用一个ldap高权限账号用于对接vault(因为轮转根凭证后,没有任何地方可以查到当前在用的密码了!!)】
4 创建角色(创建一个名为 learn 的角色,轮换周期为 24 小时)
$ vault write ldap/static-role/learn \
dn='cn=alice,ou=users,dc=learn,dc=example' \
username='alice' \
rotation_period="24h"5 注意: 这里官方文档上说alice用户之前已向 Vault 进行身份验证,并且她的令牌附加了一个策略,该策略提供了从 learn 角色请求新 OpenLDAP 凭证所需的功能。 这块我个人的理解是给alice创建了一个token,操作如下:
$ vim alice_demo.hcl 内容如下:
# Request OpenLDAP credential from the learn role
path "ldap/static-cred/learn" {
capabilities = [ "read" ]
}
$ vault policy write alice_demo ./alice_demo.hcl
$ vault token create -policy="alice_demo"
Key Value
--- -----
token hvs.CAESIKxN11J8Og1aKUdWzjyaaCd6Juj2_81dxIGDMCZu0JNdGh4KHGh2cy5CdHZheE1Xb2FRamMxSHliQjFET1RRazQ
token_accessor coahorcZIuNdnnyxmPvZe5Ll
token_duration 768h
token_renewable true
token_policies ["alice_demo" "default"]
identity_policies []
policies ["alice_demo" "default"]
记下这里的 token 为: hvs.CAESIKxN11J8Og1aKUdWzjyaaCd6Juj2_81dxIGDMCZu0JNdGh4KHGh2cy5CdHZheE1Xb2FRamMxSHliQjFET1RRazQ
然后,使用这个token登陆,这样的话就是 alice 这个身份了。
vault login hvs.CAESIKxN11J8Og1aKUdWzjyaaCd6Juj2_81dxIGDMCZu0JNdGh4KHGh2cy5CdHZheE1Xb2FRamMxSHliQjFET1RRazQ
6 使用alice账号的token登陆后,查看当前的vault中记录的ldap的密码信息
$ vault read ldap/static-cred/learn
Key Value
--- -----
dn cn=alice,ou=users,dc=learn,dc=example
last_password n/a
last_vault_rotation 2025-06-25T22:56:45.003417534+08:00
password HHTglNno0iDWx0cTtG82ipbmFbqRHsZpaaUX1aBEQIMqnFNUSO3jAyoW0OsM5fQP
rotation_period 24h
ttl 23h47m59s
username alice7 登陆到openldap容器,使用上面步骤中获取到的密码后,执行查询操作
$ docker exec -ti vault-openldap bash
root@d471df2239d2:/# ldapsearch -b "cn=alice,ou=users,dc=learn,dc=example" \
-D 'cn=alice,ou=users,dc=learn,dc=example' \
-w HHTglNno0iDWx0cTtG82ipbmFbqRHsZpaaUX1aBEQIMqnFNUSO3jAyoW0OsM5fQP
查询的结果类似如下:
# extended LDIF
#
# LDAPv3
# base <cn=alice,ou=users,dc=learn,dc=example> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# alice, users, learn.example
dn: cn=alice,ou=users,dc=learn,dc=example
objectClass: person
objectClass: top
cn: learn
cn: alice
sn: learn
userPassword:: SEhUZ2xObm8waURXeDBjVHRHODJpcGJtRmJxUkhzWnBhYVVYMWFCRVFJTXFuRk5
VU08zakF5b1cwT3NNNWZRUA==
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1上面的 vault read ldap/static-cred/learn 获取到password 在24小时后就会自动轮转,也可以在web ui 页面上,手动轮转密钥。 如果要求更高,可以把轮转周期再调低些,从24小时改为1小时。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。