Pulumi 可以用任意 s3 协议作为 状态后端 (State Backend),相对于使用 本地目录 作为 状态后端 而言,这样的好处是使用 持续集成 (CI) 执行 Pulumi 命令的时候,不会修改仓库文件,并且 状态文件 中的密码在 Git 仓库 内不可见
我自己实验了一个可行的流程,使用 腾讯云 COS 作为 Pulumi 的 状态后端,并遵循了 最小权限原则
-
创建一个 COS 桶 叫
iac-state
-
创建一个 子账户,叫
bot-iac-state
-
使用自定义策略授权 子账户 (
1111111111
改成对应的 腾讯云主账户 AppID)
{
"statement": [
{
"action": [
"cos:GetService"
],
"effect": "allow",
"resource": [
"*"
]
},
{
"action": [
"cos:*"
],
"effect": "allow",
"resource": [
"qcs::cos::uid/1111111111:iac-state-1111111111/*"
]
}
],
"version": "2.0"
}
Pulumi.yml
中修改backend.url
(1111111111
改成对应的 腾讯云主账户 AppID,桶内子路径可以自定义)
backend:
url: 's3://iac-state-1111111111/any/sub/path?endpoint=cos.ap-guangzhou.myqcloud.com&s3ForcePathStyle=true®ion=ap-guangzhou'
- 设置环境变量
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
之后,执行 pulumi pre
/ pulumi up
就可以用腾讯云的 COS 桶作为状态后端了