
在alicloud中创建一个用户 ,名称类似于 hashicorp-vault ,并在“用户授权策略”部分直接将新的自定义策略应用到该用户(我这里直接给hashicorp-vault账号开了admin权限,实际生产使用需要给更严苛的权限,不要过大)。
新的子账号的AK信息如下:
AccessKey ID LTAASDFGGGGGGGGGGGGGGGGG
AccessKey Secret AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
启用alicloud 机密引擎
$ vault secrets enable alicloud
注意alicloud在web ui上是灰色的,在页面上是没有修改配置的地方的。

将hashicorp-vault账号的AK录入到vault中
(注意这个AK的权限要比较大,因为后续通过vault执行的授权命令都是通过这个账号进行的)
$ vault write alicloud/config \
access_key=LTAASDFGGGGGGGGGGGGGGGGG \
secret_key=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA查看下写入的内容(这里出于安全考虑是看不到secret_key的)
$ vault read alicloud/config
Key Value
--- -----
access_key LTAASDFGGGGGGGGGGGGGGGGG准备新生成的AK凭据的权限规则
# 模拟DBA只读权限的策略
$ vault write alicloud/role/dba-readonly-policy \
remote_policies='name:AliyunKvstoreReadOnlyAccess,type:System' \
remote_policies='name:AliyunRDSReadOnlyAccess,type:System' \
remote_policies='name:AliyunMongoDBReadOnlyAccess,type:System' \
remote_policies='name:AliyunPolardbReadOnlyAccess,type:System' \
remote_policies='name:AliyunADBReadOnlyAccess,type:System'
# 模拟SA只读权限的策略
$ vault write alicloud/role/sa-readonly-policy \
remote_policies='name:AliyunOSSReadOnlyAccess,type:System' \
remote_policies='name:AliyunECSReadOnlyAccess,type:System' \
remote_policies='name:AliyunSLBReadOnlyAccess,type:System' \
remote_policies='name:AliyunNASReadOnlyAccess,type:System'
如果要更复杂的策略,官方文档给出的写法类似如下:
vault write alicloud/role/policy-based \
inline_policies=-<<EOF
[
{
"Statement": [
{
"Action": "rds:Describe*",
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "1"
},
{...}
]
EOF生成新的AK凭据
注意:每执行一次就会生成一个新的AK对!
# 基于dba-readonly-policy生成AK对
$ vault read alicloud/creds/dba-readonly-policy
Key Value
--- -----
lease_id alicloud/creds/dba-readonly-policy/5LqO1FpSc2xI1ikx04udW9re
lease_duration 768h
lease_renewable true
access_key LTAI5tPTc7c254QzkUsrWcBf
secret_key XXXXXXXXXXXXXXXXXXXXXXXXX
# 基于sa-readonly-policy生成AK对
$ vault read alicloud/creds/sa-readonly-policy
Key Value
--- -----
lease_id alicloud/creds/sa-readonly-policy/AUj6KxbhHhvPttobKbaxqWzP
lease_duration 768h
lease_renewable true
access_key LTAI5tCiCcNgHkxsZucDyRti
secret_key XXXXXXXXXXXXXYYYYYYYYYYYY注意: 上面命令返回的结果(重点是access_key和secret_key ) 只一次性展示,后续没地方查询的!因此请注意保存!
执行上面的 vault read alicloud/creds/sa-readonly-policy 和 vault read alicloud/creds/dba-readonly-policy
操作后,在alicloud后台可以看到添加了2个子账号了。

可以抽检看下权限,可以看到权限是符合预期的


业务程序启动的时候,从vault的kv engine中获取指定的alicloud AK。如果获取AK失败,或者取到AK后执行调用alicloud报错,则执行命令(vault read alicloud/creds/sa-readonly-policy,业务代码里更常用的是http api方式),获取一个新的alicloud AK,然后用这个新的AK执行,同时将这个新获取到的AK存到vault kv engine中。
如果不要那么高度自动化,也可以每隔90天人工执行一次 vault read alicloud/creds/sa-readonly-policy 这类的命令,将新获得的AK贴到vault的kv engine中,这样业务程序就可以使用最新的AK去和alicloud交互。
其它问题:虽然vault能自动生成AK对,但是对于历史的AK的吊销还是需要人工进行,目前没想到有什么好的解决办法。
PS:这里的使用场景是我设想的,目前还没在生产落地,但是总体思路是差不多的。
https://developer.hashicorp.com/vault/docs/secrets/alicloud
https://developer.hashicorp.com/vault/api-docs/secret/alicloud
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。