【问题标题】:how to protect resources in a specific Pulumi stack from being deleted如何保护特定 Pulumi 堆栈中的资源不被删除
【发布时间】:2020-12-29 04:44:29
【问题描述】:

我使用 Pulumi 在 GCP 中启动我的基础架构。 Pulumi 具有堆栈功能,可帮助您构建相同类型 Pulumi 代码的多个复制。

所以我有对应于我们拥有的每个环境的 dev/stage/prod 堆栈。

我想知道是否有一种方法可以保护生产堆栈,以便没有人可以删除其中的任何资源。

我知道关于保护位标志,但这将适用于我不想使用的所有堆栈。

【问题讨论】:

    标签: pulumi


    【解决方案1】:

    有几个选项可以实现这一点:

    选项 1

    一种选择是限制对 Pulumi 状态文件的访问,以便只有特权用户或实体(例如 continuous delivery pipeline)能够读取和写入 prod 状态,因此能够执行可能破坏资源的操作。 Pulumi 控制台后端通过stack permissions 在粒度级别支持此功能,并且可以通过特定提供商的 IAM 功能(例如 AWS IAM)限制其他状态后端的访问。

    选项 2

    另一个选项(可以与第一个选项一起使用)是根据堆栈名称以编程方式设置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 上设置标签的示例。

    【讨论】:

    • 啊,我明白你的意思了。感谢您也指出堆栈转换位。这是一个非常干净的模式来解决这个问题。
    猜你喜欢
    • 2015-12-12
    • 2021-05-15
    • 2017-08-30
    • 2021-05-27
    • 2019-03-08
    • 1970-01-01
    • 2013-11-07
    • 2019-11-18
    • 2019-09-06
    相关资源
    最近更新 更多