AppRole
AppRole
身份验证方法允许机器或应用程序使用 Vault 定义的角色进行身份验证。AppRole
的开放式设计支持使用不同的工作流和配置来应对大量应用程序。这种身份验证方法主要是面向自动化工作流程(机器和服务)设计的,对人类操作者不太有用。
“AppRole”代表一组 Vault 策略和登录约束,必须满足这些策略才能使用这些策略获取令牌。范围可以根据需要进行调整。可以为特定机器、甚至该机器上的特定用户或跨机器的服务创建 AppRole。成功登录所需的凭据取决于相关联的 AppRole 所设置的约束。
以下是基于封包机制,提供了几乎完美的过程保护机制。
图中第6、7、8、9是保护过程安全的核心设计(封包机制:Cubbyhole Response Wrapping,通过一个极短生命周期的凭证来尽可能减少过程暴露的风险)q qun 830709780。
- AppRole的管理只能通过cli或api操作,UI页面未提供功能。
- 创建approle的参数
-
- 如果您的 approle 签发的令牌需要能够创建子令牌,您需要将token_num_uses设置为0。
- SecretID的维护机制
操作流程
1. 创建Approle认证挂载点
vault auth enable approle
# 查看挂载点
vault auth list
2. 创建一个基于approle认证方式的role——app-role
vault write auth/approle/role/app-role
# 列举角色
vault list auth/approle/role
# 查看角色app-role
vault read auth/approle/role/app-role
3. 查看app-role的role-id
vault read auth/approle/role/app-role/role-id
4. 将secret-id通过wrap封装,生成一个wrapping_token
# wrapping_token生命周期为60秒
vault write -f -wrap-ttl=60s auth/approle/role/app-role/secret-id
5. 将上一步生成的wrapping_token通过unwrap解封,拿到真正的secret-id
vault unwrap hvs.CAESIGjCf15OmzBiRgQGDKVJluJO8sUxwdQlxpCJz5hHpgqwGh4KHGh2cy5tVkEzbXVPekVubHBNcnZCUVdCRU16Z3U
# 生产环境整个过程中真实secret-id都不会被暴露出来!
python实践
通过wrap封装secret-id
# filename:approle.py
import hvac
client = hvac.Client(url='https://xxxx',token='hvsXXXX', verify=False)
def secret_id():
client.write(path='auth/approle/role/test')
response = client.write(path='auth/approle/role/test/secret-id',wrap_ttl='10s')
unwrapped_token = client.sys.unwrap(response['wrap_info']['token'])
return unwrapped_token['data']['secret_id']
应用获取secret-id,读取机密信息
import hvac
import approle # 获取secret-id模块
# 初始化Vault客户端
client = hvac.Client(url='https://xxxx', verify=False)
# 定义AppRole相关信息
role_id = '0bf98057-039c-5aa7-8b72-18131d5f325d'
secret_id = approle.secret_id()
client.auth.approle.login(
role_id=role_id,
secret_id=secret_id
)
secret_version_response = client.secrets.kv.v2.read_secret_version(mount_point='secret', path='kv/a2')
print(secret_version_response['data']['data'])
# {'email': 'example@qq.cn', 'password': 'acd', 'username': 'test'}
相关链接: