首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开源KMS之vault part13 alicloud secret engine的使用

开源KMS之vault part13 alicloud secret engine的使用

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

在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执行的授权命令都是通过这个账号进行的)

代码语言:txt
复制
$ vault write alicloud/config \
    access_key=LTAASDFGGGGGGGGGGGGGGGGG \
    secret_key=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

查看下写入的内容(这里出于安全考虑是看不到secret_key的)

代码语言:txt
复制
$ vault read  alicloud/config
Key           Value
---           -----
access_key    LTAASDFGGGGGGGGGGGGGGGGG

准备新生成的AK凭据的权限规则

代码语言:txt
复制
# 模拟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对!

代码语言:txt
复制
# 基于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-policyvault 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置步骤
  • 使用场景
  • 官方文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档