我正在尝试使用Vault Golang Package通过API进行身份验证。
我创建了一个新的客户端,然后可以设置我的令牌:
client, err := api.NewClient(&api.Config{Address: vaultAddr, HttpClient: httpClient})
if err != nil {
return nil, errors.Wrap(err, "could not create vault client")
}
client.SetToken(token)
这很好,但是我想使用其他认证方法(LDAP、Userpass等)对API进行认证
这可能吗?我如何使用API检索令牌?
我想我可以只使用net/http通过API调用来检索令牌,但是否有其他方法来实际进行身份验证?
4条答案
按热度按时间zaq34kh61#
我终于想明白了,虽然不是很明显,但还是有道理的。
Vault具有用于写入数据的通用写入方法。您可以利用此方法通过API执行登录,只需构建URL并向该端点发送PUT请求即可
它看起来有点像这样:
lbsnaicq2#
如果没有足够的信誉,在这里添加一个额外的提示,而不是对接受的答案进行注解。令牌可以从auth响应中提取,如下所示:
相关接口记录如下:
https://godoc.org/github.com/hashicorp/vault/api#Secret
https://godoc.org/github.com/hashicorp/vault/api#SecretAuth
deikduxw3#
我写了一个GitHub gust,其中包含一个函数,可以使用AWS IAM角色验证Go程序,这里是a link。
注意:验证到Vault * 只会为您获取令牌 *。如果AWS IAM角色允许,该令牌以后可能会用于读取机密。
您需要创建AWS STS请求,从中提取一些信息,然后将其发送到Vault。
这是GitHub要点中的函数。它将使用AWS IAM角色和一些Vault环境变量,如
VAULT_ADDR
。下面是Vault Golang库可能读取的其他一些环境变量。它生成经过验证的Vault*api.Client
、令牌和来自验证请求的响应。它基于this GitHub project。
2guxujil4#
api
封装中有一个标准的AuthMethod
接口。可以用任何登录方法实现这个接口。下面是一个基本用户名/密码登录的例子
实现新的AuthMethod后,可以使用它为客户端获取令牌: