0Pricing
Terraform Infrastructure as Code · 课时

用于治理的 Sentinel 策略

学习使用 HashiCorp Sentinel 编写并执行策略即代码,确保 Terraform 部署符合规范并实现统一治理。

用于治理的 Sentinel 策略 是 CoddyKit 上的免费 Terraform Infrastructure as Code 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Terraform Infrastructure as Code 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Terraform Infrastructure as Code 课程共包含 4 节课。

策略即代码与 Sentinel 简介

如果您可以自动确保基础设施部署符合特定规则,会怎样?这就是策略即代码(PaC)的作用。PaC 以可编程的方式定义基础设施创建和修改的规则,将治理要求纳入开发工作流。HashiCorp Sentinel 是专为此目的设计的强大 PaC 框架。

Sentinel 与 Terraform 的协作方式

Sentinel 可直接与 Terraform Cloud 和 Terraform Enterprise 集成。它充当守门人,在任何更改应用到您的云环境之前评估 Terraform 执行计划。这一步至关重要,可以阻止不合规或不安全的基础设施被配置出来,从而主动强制执行规则。

策略与强制级别

Sentinel 策略是一组使用 Sentinel 语言编写的规则。策略触发后会返回 true(通过)或 false(失败)。您可以为策略配置不同的强制级别:

  • 建议级:对违规行为发出警告,但允许操作继续。
  • 软强制:要求明确覆盖策略,才能继续执行不合规的更改。
  • 硬强制:完全阻止不合规的操作,要求遵守策略。

Sentinel 策略结构

Sentinel 策略定义在 .sentinel 文件中。它们通常包括导入项、规则和一个主要条件。main 规则决定策略是通过还是失败。

一个基本策略可能如下所示:

import "tfplan"

main = rule {
  tfplan.resource_changes is empty
}

访问 Terraform 计划数据

tfplan 导入项提供了 Terraform 执行计划的结构化视图。策略使用这些数据来检查:

  • tfplan.resource_changes:正在创建、更新或删除的资源的详细信息。
  • tfplan.variables:为配置提供的输入变量。
  • tfplan.outputs:配置产生的输出值。

这些数据对于根据 Terraform 计划执行的操作做出有依据的策略决策至关重要。

示例:拒绝未批准的区域

让我们编写一个 Sentinel 策略,确保所有 AWS 资源仅部署在 us-east-1。此策略会检查计划中每个 AWS 资源所配置的区域。

import "tfplan/v2" as tfplan

allowed_regions = ["us-east-1"]

is_region_allowed = func(resource_change) {
  if resource_change.provider.name is "aws" {
    region = resource_change.provider.config.region else "us-east-1"
    return region in allowed_regions
  }
  return true # Not an AWS resource, allow
}

all_regions_compliant = all tfplan.resource_changes as _, rc {
  is_region_allowed(rc)
}

main = rule {
  all_regions_compliant
}

策略函数与运算符

Sentinel 提供了功能强大的内置函数和运算符,用于实现复杂逻辑:

  • 集合函数:all、any、filter、map,用于遍历列表或映射。
  • 类型函数:is、type_of,用于检查数据类型。
  • 运算符:逻辑运算符(and、or、not)和比较运算符(==、!=、>、<)。

这些功能可以帮助您构建健壮且表达力强的策略,以覆盖各种场景。

示例:强制要求标签

常见的治理要求之一,是强制资源使用特定标签,以便进行成本分配或资源识别。此策略确保所有新建或更新的 aws_instance 资源都具有 Project 标签。

import "tfplan/v2" as tfplan

required_tags = ["Project"]

resource_has_required_tags = func(resource_change) {
  if resource_change.type is "aws_instance" {
    # Check if 'tags' attribute exists in the planned state
    if not ("tags" in resource_change.change.after) {
      return false
    }
    
    missing_tags = filter required_tags as tag {
      not (tag in resource_change.change.after.tags)
    }
    return missing_tags is empty
  }
  return true # Not an aws_instance, allow
}

all_instances_tagged = all tfplan.resource_changes as _, rc {
  (rc.change.actions contains "create" or rc.change.actions contains "update") ?
    resource_has_required_tags(rc) :
    true # Only check on create/update actions
}

main = rule {
  all_instances_tagged
}

在本地测试策略

在将策略部署到 Terraform Cloud/Enterprise 之前,您可以使用 Sentinel CLI 在本地测试策略。sentinel test 命令允许您使用模拟的 tfplan 数据定义测试用例。这有助于您验证策略行为并尽早发现错误,确保策略按预期工作,同时不会影响生产环境。

策略逻辑检查

您需要创建一个 Sentinel 策略,防止任何 AWS S3 存储桶在创建时具有公共读取权限。要实施此限制,您主要应检查 tfplan 数据中的哪一部分?

回顾:使用 Sentinel 实现治理

我们已经了解了 HashiCorp Sentinel,这是一个功能强大的策略即代码治理框架:

  • 它与 Terraform Cloud/Enterprise 集成,以强制执行规则。
  • 策略会在应用基础设施之前评估 tfplan。
  • 不同的强制级别(建议级、软强制、硬强制)可以控制策略的影响。
  • 您可以编写策略来拒绝特定区域、强制要求标签,以及执行更多限制。
  • 在本地测试可以确保策略在部署前按预期工作。

Sentinel 对于在基础设施部署中维护合规性、安全性和运维标准至关重要。

常见问题解答

「用于治理的 Sentinel 策略」课时是免费的吗?

是的 — 「用于治理的 Sentinel 策略」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Terraform Infrastructure as Code 课程的其余内容,请升级到 CoddyKit PRO。 Terraform Infrastructure as Code 课程共包含 4 节课。

「用于治理的 Sentinel 策略」这节课中我会学到什么?

学习使用 HashiCorp Sentinel 编写并执行策略即代码,确保 Terraform 部署符合规范并实现统一治理。 你通过在浏览器中直接运行的动手代码来练习 Terraform Infrastructure as Code,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Terraform Infrastructure as Code 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Terraform Infrastructure as Code 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「用于治理的 Sentinel 策略」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Terraform Infrastructure as Code 课中编写并运行代码吗?

能。每节 Terraform Infrastructure as Code 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 多云与混合云模式
  2. 用于治理的 Sentinel 策略
  3. Terraform Cloud 与 Enterprise
  4. 构建自定义提供程序
← 返回 Terraform Infrastructure as Code