【发布时间】:2021-07-29 05:47:25
【问题描述】:
我们最近开始使用 Terraform for IaC。
我们如何确保 Terraform 不会被团队中的某些成员滥用,因为它会旋转数百个虚拟机,花费公司 $$$。我们如何限制用户这样做?
谢谢
【问题讨论】:
标签: terraform
我们最近开始使用 Terraform for IaC。
我们如何确保 Terraform 不会被团队中的某些成员滥用,因为它会旋转数百个虚拟机,花费公司 $$$。我们如何限制用户这样做?
谢谢
【问题讨论】:
标签: terraform
Hashicorp 提供了一个名为 Sentinel 的产品,它允许您为 Terraform 组织和用户编写所需的策略 - 请注意,这是一项付费功能。
目前尚不清楚您希望精确限制哪些费用,但使用 Sentinel,您可以编写一个限制 Terraform 计划每月总费用的政策,如下所示:
# 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(位于the Terraform JSON output format),并实施您认为合适的任何规则来决定特定计划是否可以接受。如果您的程序确定该计划不可接受,那么您可以停止管道并阻止应用该计划。
如果您认为该计划符合政策,那么在人工批准后,您可以从之前保存的文件中应用它,以确保它会采取与您检查过的相同的操作:
terraform apply tfplan
有一些外部系统可以帮助您编写策略来检查 JSON 计划。例如,Open Policy Agent 是开源软件which can integrate with Terraform plans,更高的pricing tiers of Terraform Cloud 包括“团队管理和治理”,它是该模型的托管版本,使用 HashiCorp 特定的策略语言 Sentinel。其他开源项目和供应商也有类似的产品。
【讨论】: