Terraform 如何阻止地形被滥用

Terraform 如何阻止地形被滥用,terraform,Terraform,我们最近开始在IaC中使用Terraform 我们如何确保Terraform不会被团队中的某个成员滥用,因为它旋转了数百个虚拟机,使公司损失了$$$。我们如何限制用户这样做 感谢Hashicorp提供了一个名为的产品,它允许您为您的Terraform组织和用户编写所需的策略-请注意,这是一个付费功能 目前还不清楚您希望具体限制哪些成本,但使用Sentinel,您可以编写一份政策,限制地形计划的每月总成本,如下所示: # This policy uses the Sentinel tfrun im

我们最近开始在IaC中使用Terraform

我们如何确保Terraform不会被团队中的某个成员滥用,因为它旋转了数百个虚拟机,使公司损失了$$$。我们如何限制用户这样做


感谢Hashicorp提供了一个名为的产品,它允许您为您的Terraform组织和用户编写所需的策略-请注意,这是一个付费功能

目前还不清楚您希望具体限制哪些成本,但使用Sentinel,您可以编写一份政策,限制地形计划的每月总成本,如下所示:

# This policy uses the Sentinel tfrun import to restrict the
# proposed monthly cost that would be incurred if the current
# plan were applied

# Import common-functions/tfrun-functions/tfrun-functions.sentinel
# with alias "run"
import "tfrun-functions" as run
# The standard decimal import
import "decimal"

# Monthly Limit
limit = decimal.new(1000)

# Call the validation function
# Warnings will be printed for violations
cost_validated = run.limit_proposed_monthly_cost(limit)

# Main rule
main = rule {
  cost_validated
}

.

这个问题有各种不同的答案,具体取决于你想要实现什么以及为什么

最彻底的方法是确保您只允许用户访问在目标云平台内执行可接受的操作。只要您正确配置权限,用户将无法创建他们不应该创建的对象,无论他们是使用Terraform还是任何其他工具

但在实践中,我们通常需要在一定程度上相信运营商的行为是真诚的,并考虑包括“护栏”以阻止意外的错误配置,而不是试图严格控制个人可以做什么

只要人们直接在自己的计算机上运行Terraform,他们就可以访问远程系统的凭据允许他们执行的任何操作。在这种情况下,Terraform完全由用户控制,因此您无法在Terraform级别控制任何东西,因此您引入的任何控件都需要位于远程系统中

然而,通常在生产中使用Terraform的团队将以某种自动化方式运行它,其中操作员仅间接执行Terraform,Terraform本身在受控的远程环境中运行,类似于CI/CD系统通常提供的环境。在这种情况下,您仍然应该假设
terraform plan
正在有效地执行任意代码,因此您不能将其用作硬安全边界,但您可以创建护栏,以帮助善意行事的操作员避免采取破坏性行动

为此,请让您的自动化系统将计划保存到文件中,然后将其导出为JSON供外部软件使用:

terraform plan -out=tfplan
terraform show -json tfplan >tfplan.json
然后,您可以使用自己设计的软件来使用中的
tfplan.json
,并实现您认为合适的规则来决定特定计划是否可以接受。如果您的程序确定该计划不可接受,则可以停止管道并阻止应用该计划

如果您考虑该计划以满足策略,那么在人类认可之后,您可以将它从较早保存的文件中应用,以确保它将采取与您检查过的相同的动作:

terraform apply tfplan
有一些外部系统可以帮助您编写检查JSON计划的策略。例如,是开源软件,更高的版本包括“团队管理和治理”,这是该模型的托管版本,使用一种名为的HashiCorp特定策略语言。其他开源项目和供应商也有类似的产品