首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开源KMS之vault part12 使用userpass + MFA 登录验证

开源KMS之vault part12 使用userpass + MFA 登录验证

原创
作者头像
保持热爱奔赴山海
发布2025-06-26 23:28:56
发布2025-06-26 23:28:56
1960
举报
文章被收录于专栏:DevOpsDevOps

文档链接:

MFA:https://developer.hashicorp.com/vault/tutorials/auth-methods/active-directory-mfa-login-totp

userpass: https://developer.hashicorp.com/vault/docs/auth/userpass

注意: 官方文档里用的是微软域账号登陆。实际上这个MFA也支持其他方式,我这里为了便于演示,用的 userpass 的方式,这种省去了搭AD域环境的步骤。

Part1 先启用userpass auth模式

1 使用root token登陆

(生产上不要明文输入token,这里因为只是演示就全部从简了)

代码语言:txt
复制
> vault login hvs.t2BxSkpF3Pk7wblEuFRf1a0J
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.t2BxSkpF3Pk7wblEuFRf1a0J
token_accessor       E2eqdpkVCJwYS5jVrfU0I38k
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]

2 启用userpass认证功能

代码语言:txt
复制
vault auth enable userpass

3 然后,添加一个测试账号(用户名为amd密码为111111)

代码语言:txt
复制
vault write auth/userpass/users/amd \
password=111111 \
policies=default

上述步骤也可以直接在 web ui中操作, 操作完成后,在web ui中看到的效果如下图:

4 使用刚才创建的账号密码登陆vault

方法1、另外开一个无痕模式的chrome,使用 账号amd  密码11111登陆看下是否能成功

下图中,登陆后有个报错,暂时先忽略,因为我没有给这个账号足够的权限

方法2、可以另开一个xshell终端,使用命令行登陆,写法如下:

代码语言:txt
复制
> vault login -method=userpass username=amd password='111111'
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.CAESIOLSaeOlfKLu6mYiDrVYtOkeDBfZgWATSHPny7ZSjOKFGh4KHGh2cy5qTnlscnE0eFRLTlRPSWd3N0xrdzNxTGs
token_accessor         RtLLIAvmRVYjL0aBT6eijeLj
token_duration         768h
token_renewable        true
token_policies         ["default"]
identity_policies      []
policies               ["default"]
token_meta_username    amd

5 然后,还需要获取下amd账号的entity_id的值,2种方法:

方法1、在root token登陆的vault web ui中,可以看到如下

方法2、另开一个xshell终端,使用命令行写法如下:

> vault login -method=userpass username=amd password='111111' -format=json | jq -r '.auth.entity_id'

我这里的结果是: a6629f82-a140-b118-9acc-c32b58577d88

Part2 启用MFA认证功能

1 再次使用root token登陆

生产上不要明文输入token,这里因为只是演示就全部从简了

代码语言:txt
复制
> vault login hvs.t2BxSkpF3Pk7wblEuFRf1a0J
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.t2BxSkpF3Pk7wblEuFRf1a0J
token_accessor       E2eqdpkVCJwYS5jVrfU0I38k
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]

2 然后设置下ENTITY_ID环境变量为上面获取到的值

代码语言:txt
复制
ENTITY_ID="a6629f82-a140-b118-9acc-c32b58577d88"

3 启用MFA认证

代码语言:txt
复制
vault write identity/mfa/method/totp \
    -format=json \
    generate=true \
    issuer=Vault \
    period=30 \
    key_size=30 \
    algorithm=SHA256 \
    digits=6 | jq -r '.data.method_id'
我这里获取到的值是 fab43823-8bc2-534e-3c0e-dcab6b7c2dc9

4 设置TOTP_METHOD_ID环境变量

代码语言:txt
复制
TOTP_METHOD_ID='fab43823-8bc2-534e-3c0e-dcab6b7c2dc9'   

5 生成二维码图片

代码语言:txt
复制
vault write -field=barcode \
/identity/mfa/method/totp/admin-generate \
method_id=$TOTP_METHOD_ID entity_id=$ENTITY_ID \
| base64 -d > /tmp/qr-code.png

把这个png图片导出到本地,使用google mfa工具去扫码添加

(注意:目前遇到过再低版本的google MFA工具或者其他mfa工具可能出现扫码成功,但是在vault中登陆不成功的情况)。

6 创建登录 MFA 强制执行

代码语言:txt
复制
这里我们可以先列出当前启用的accessor类型,命令如下:
$ vault auth list -format=json  --detailed   | grep accessor

我这里结果如下:
"accessor": "auth_token_a1b9113e",
"accessor": "auth_userpass_b4b63877",

设置下ACCESSOR环境变量

代码语言:txt
复制
ACCESSOR='auth_userpass_b4b63877'

这里我捕获的是 userpass身份验证方法,用于创建 Login MFA 实施。

代码语言:txt
复制
vault write /identity/mfa/login-enforcement/adtotp \
mfa_method_ids="$TOTP_METHOD_ID" \
auth_method_accessors=$ACCESSOR

7 登陆验证

完成上面的步骤后。我们退出之前的chrome无痕模式,再次无痕模式访问在web ui 上, 使用 账号密码方式登陆,会自动弹出TOTP passcode的界面,如下图:

输入正确的话,会进到下面界面中(我这里啥都没展示是因为没给权限或者这是个全新的vault)

至此,MFA功能演示完成。

对于其他登陆方式(例如ldap),操作方式基本类似,官方文档写的很详细,这里不再赘述。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Part1 先启用userpass auth模式
    • 1 使用root token登陆
    • 2 启用userpass认证功能
    • 3 然后,添加一个测试账号(用户名为amd密码为111111)
    • 4 使用刚才创建的账号密码登陆vault
    • 5 然后,还需要获取下amd账号的entity_id的值,2种方法:
  • Part2 启用MFA认证功能
    • 1 再次使用root token登陆
    • 2 然后设置下ENTITY_ID环境变量为上面获取到的值
    • 3 启用MFA认证
    • 4 设置TOTP_METHOD_ID环境变量
    • 5 生成二维码图片
    • 6 创建登录 MFA 强制执行
    • 7 登陆验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档