0Pricing
Terraform Infrastructure as Code · Урок

Политики Sentinel для управления

Научитесь писать и применять политики как код с помощью HashiCorp Sentinel, чтобы обеспечивать соответствие требованиям и управление развёртываниями Terraform.

«Политики Sentinel для управления» — бесплатный урок Terraform Infrastructure as Code на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения 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 их можно протестировать локально с помощью CLI Sentinel. Команда sentinel test позволяет определить тестовые случаи с имитированными данными tfplan. Это помогает проверить поведение политик и обнаружить ошибки на раннем этапе, чтобы убедиться, что политики работают так, как задумано, не затрагивая рабочие среды.

Проверка логики политики

Вам необходимо создать политику Sentinel, которая не позволит создавать корзины AWS S3 с общедоступным доступом на чтение. Какую конкретно часть данных tfplan следует в первую очередь проверить для этого?

Итоги: управление с помощью Sentinel

Мы рассмотрели HashiCorp Sentinel — мощную платформу политик как кода для управления инфраструктурой:

  • Она интегрируется с Terraform Cloud/Enterprise для обеспечения соблюдения правил.
  • Политики проверяют tfplan до применения инфраструктуры.
  • Разные уровни применения (рекомендательный, мягко обязательный и строго обязательный) определяют влияние политик.
  • Вы можете писать политики для запрета регионов, обязательных тегов и многого другого.
  • Локальное тестирование позволяет убедиться, что политики работают как задумано, ещё до развёртывания.

Sentinel играет ключевую роль в обеспечении соответствия требованиям, безопасности и эксплуатационных стандартов при развёртывании вашей инфраструктуры.

Часто задаваемые вопросы

Урок «Политики Sentinel для управления» бесплатный?

Да — полный текст урока «Политики Sentinel для управления» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Terraform Infrastructure as Code, подпишись на CoddyKit PRO. Курс Terraform Infrastructure as Code содержит 4 уроков всего.

Чему я научусь в уроке «Политики Sentinel для управления»?

Научитесь писать и применять политики как код с помощью HashiCorp Sentinel, чтобы обеспечивать соответствие требованиям и управление развёртываниями Terraform. Ты практикуешь Terraform Infrastructure as Code с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Terraform Infrastructure as Code?

Предыдущий опыт не требуется. Terraform Infrastructure as Code на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 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