首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开源KMS之vault part11 使用 Vault 管理 LDAP 凭据

开源KMS之vault part11 使用 Vault 管理 LDAP 凭据

原创
作者头像
保持热爱奔赴山海
修改2025-06-27 00:50:15
修改2025-06-27 00:50:15
3530
举报
文章被收录于专栏:DevOpsDevOps

LDAP 机密引擎提供了一个集中的工作流程,用于有效地管理现有的 LDAP 输入密码,使用户能够访问自己的凭据,并享受自动密码轮换的好处。

使用带有 Vault 的 LDAP 机密引擎为用户提供多种身份验证方法来访问他们自己的 LDAP 凭据。

您可以授权用户管理他们自己的 LDAP 条目,并且可以配置他们的密码以根据管理员指定的生存时间值自动轮换。

下图说明了此凭证管理工作流程。

启动一个openldap容器

代码语言:txt
复制
$ 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子账号的配置文件

代码语言:txt
复制
$ 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容器里面

代码语言:txt
复制
$ docker cp learn-vault-example.ldif vault-openldap:/tmp/

登陆到容器中,使用 ldapadd 实用程序添加此配置

代码语言:txt
复制
$ 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了)

代码语言:txt
复制
$ vault secrets enable ldap

2 使用 ldap 插件配置 LDAP 密钥引擎,以便与基于 Docker 的 OpenLDAP 容器通信。

代码语言:txt
复制
$ vault write ldap/config \
    binddn=cn=admin,dc=learn,dc=example \
    bindpass=2LearnVault \
    url=ldap://192.168.31.181

3 轮换根凭证【注意,这步不是必要操作,准确的说这步很危险的。除非你额外使用一个ldap高权限账号用于对接vault(因为轮转根凭证后,没有任何地方可以查到当前在用的密码了!!)】

4 创建角色(创建一个名为 learn 的角色,轮换周期为 24 小时)

代码语言:txt
复制
$ 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,操作如下:

代码语言:txt
复制
$ 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的密码信息

代码语言:txt
复制
$ 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               alice

7 登陆到openldap容器,使用上面步骤中获取到的密码后,执行查询操作

代码语言:txt
复制
$ 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档