来自 DDOS 2022-06-08 17:40 的文章

防ddos攻击_cdn防御服务器_精准

防ddos攻击_cdn防御服务器_精准

使用SentineLPlantirFollow2019年12月2日·6分钟阅读

我想告诉你一些我们最近在Palantir云基础设施中推出的酷东西:Terraform中的Sentinel策略!这篇博文展示了一个简单的Sentinel实现,以避免意外删除Terraform资源。

我们使用Terraform创建和维护客户和内部开发使用的大部分云资源和基础设施。Terraform使创建和跟踪我们管理的许多云资源变得非常容易,但不幸的是,它也使犯错误(或遇到Terraform bug)和破坏关键基础设施变得非常容易。

根据我们进行更改的正常工作流程,变更作者仔细审查了GitHub PRs和初步的地形图,这些图告诉我们如果合并,该PR将做什么。然后,我们从仔细审查公关和计划的人那里得到所需的+1。一旦PR合并,Terraform后端将启动并实际应用更改。从历史上看,合并审查的PRs时,我们没有遇到意外破坏的问题。但我们知道,在一些边缘情况下,更改工作区的后端设置可能会触发潜在的意外计划/应用。为了避免这种行为可能导致的任何事件,需要某种自动的健全性检查。

进入Sentinel:Terraform可以使用的框架,以确保Terraform计划完成我们期望他们完成的事情。使用Sentinel,您可以编写策略来分析工作区的状态和将要进行的更改。基于这一分析,策略可以选择通过或不通过更改。在我们的例子中,我们需要一个后盾,以防止不太可能或肯定不必要的删除。我们推出的策略的第一次迭代做了两件事:

确保某些类型的关键资源永远不会被删除(如AWS KMS密钥或公共IP)确保一次删除的所有资源不超过10%

顺便说一下,Sentinel当前只能在从Terraform Cloud运行Terraform时使用。

流程视图

当Terraform workspace配置为使用策略时,策略在每个计划之后但在每个应用之前运行,它有权停止应用:

防ddos攻击_cdn防御服务器_精准

您可以看到计划完成后,策略运行。然后它失败,这将阻止应用步骤,而应用步骤之后可能会发生。如果我们想实际删除一个敏感资源或一整堆资源,我们可以覆盖策略,但只能在管理员的帮助下,谁会看到以下内容:

防ddos攻击_cdn防御服务器_精准

一旦发生覆盖,应用将正常继续。或者在意外触发或审查错误的情况下,申请可能被驳回。这样,意外/错误的应用程序永远不会破坏您的环境。

让我们深入了解一下策略代码,看看发生了什么。

策略的核心

哨兵策略围绕着一个布尔语句,当对其进行评估时,告诉Sentinel策略是通过还是失败:

主=规则{验证销毁的资源(黑名单)和最大销毁的资源(10)}

主规则确定策略是通过还是失败。在这种情况下,网站如何防御cc,规则要求validate_destrocted_resources()和maximum_destrocted_resources()函数都返回true,以便允许应用。让我们看看validate_destromed_resources()函数,看看它是如何工作的:

#验证黑名单类型的资源没有被销毁,#即使要重新创建Validate_destroyed_resources=func(黑名单){valid=true(黑名单类型){found_resources=find_resources_from_plan(类型)else{}for found_resources作为地址,请注意,即使正在销毁和重新创建某些内容,如果r.destroy{print("您正在尝试销毁一个资源",地址,"属于黑名单类型",阵列防御ddos,类型)valid=false}}}返回valid}

黑名单是一个资源名称列表,例如aws_iam_user,则标记为无效。我们在这个函数中所做的就是扫描计划中的资源,查找任何被列入黑名单的类型。如果我们找到一个,我们会检查它是否被摧毁。如果是这样,请标记我们将返回false,并通知用户他们正试图销毁列入黑名单的资源。find_resources_from_plan()是一个帮助函数,返回给定类型的资源映射: