【发布时间】:2020-12-29 04:44:29
【问题描述】:
我使用 Pulumi 在 GCP 中启动我的基础架构。 Pulumi 具有堆栈功能,可帮助您构建相同类型 Pulumi 代码的多个复制。
所以我有对应于我们拥有的每个环境的 dev/stage/prod 堆栈。
我想知道是否有一种方法可以保护生产堆栈,以便没有人可以删除其中的任何资源。
我知道关于保护位标志,但这将适用于我不想使用的所有堆栈。
【问题讨论】:
标签: pulumi
我使用 Pulumi 在 GCP 中启动我的基础架构。 Pulumi 具有堆栈功能,可帮助您构建相同类型 Pulumi 代码的多个复制。
所以我有对应于我们拥有的每个环境的 dev/stage/prod 堆栈。
我想知道是否有一种方法可以保护生产堆栈,以便没有人可以删除其中的任何资源。
我知道关于保护位标志,但这将适用于我不想使用的所有堆栈。
【问题讨论】:
标签: pulumi
有几个选项可以实现这一点:
一种选择是限制对 Pulumi 状态文件的访问,以便只有特权用户或实体(例如 continuous delivery pipeline)能够读取和写入 prod 状态,因此能够执行可能破坏资源的操作。 Pulumi 控制台后端通过stack permissions 在粒度级别支持此功能,并且可以通过特定提供商的 IAM 功能(例如 AWS IAM)限制其他状态后端的访问。
另一个选项(可以与第一个选项一起使用)是根据堆栈名称以编程方式设置protect 标志。以下是 Python 中的示例,但相同的概念适用于所有语言:
import pulumi
from pulumi_aws import s3
# only set `protect=True` for "prod" stacks
prod_protected = False
if "prod" == pulumi.get_stack():
prod_protected = True
bucket = s3.Bucket("my-bucket",
opts=pulumi.ResourceOptions(
protect=prod_protected, # use `prod_protected` flag
),
)
您需要在堆栈中的每个资源上设置protect=...,以保护prod 堆栈中的所有资源。 Pulumi SDK 提供了一种通过堆栈转换一次性设置所有资源的方法。有一个进行堆栈转换以在资源here 上设置标签的示例。
【讨论】: