Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Terraform включает определение, предварительную версию и развертывание облачной инфраструктуры. С помощью Terraform вы создаете файлы конфигурации с помощью синтаксиса HCL. Синтаксис HCL позволяет указать поставщика облачных служб, таких как Azure, и элементы, составляющие облачную инфраструктуру. После создания файлов конфигурации вы создадите план выполнения , который позволяет предварительно просмотреть изменения инфраструктуры перед развертыванием. После того как вы проверите изменения, примените план выполнения для развертывания инфраструктуры.
Если вы используете Terraform для развертывания стандартного брандмауэра Azure с классическими правилами, вы можете изменить файл конфигурации Terraform, чтобы перенести брандмауэр в Брандмауэр Azure Premium с помощью политики брандмауэра уровня "Премиум".
В этой статье вы узнаете, как:
- Развертывание стандартного брандмауэра Azure с помощью классических правил с помощью Terraform
- Импорт правил брандмауэра в политику брандмауэра уровня "Премиум"
- Изменение файла конфигурации Terraform для переноса брандмауэра
1. Настройка среды
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись перед началом работы.
Настройте Terraform: если вы еще не сделали этого, настройте Terraform с помощью одного из следующих параметров:
2. Реализация кода Terraform
Создайте каталог для тестирования примера кода Terraform и сделайте его текущим каталогом.
Создайте файл с именем
main.tf
и вставьте следующий код:resource "random_pet" "prefix" { prefix = var.prefix length = 1 } resource "azurerm_resource_group" "rg" { name = "${random_pet.prefix.id}-rg" location = var.resource_group_location } resource "azurerm_virtual_network" "vnet" { name = "${random_pet.prefix.id}-vnet" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } resource "azurerm_subnet" "subnet" { name = "AzureFirewallSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = ["10.0.1.0/24"] } resource "azurerm_public_ip" "pip" { name = "${random_pet.prefix.id}-pip" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name allocation_method = "Static" sku = "Standard" } resource "azurerm_firewall" "main" { name = "${random_pet.prefix.id}-fw" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name sku_name = "AZFW_VNet" sku_tier = "Standard" ip_configuration { name = "configuration" subnet_id = azurerm_subnet.subnet.id public_ip_address_id = azurerm_public_ip.pip.id } } resource "azurerm_firewall_application_rule_collection" "app-rc" { name = "${random_pet.prefix.id}-app-rc" azure_firewall_name = azurerm_firewall.main.name resource_group_name = azurerm_resource_group.rg.name priority = 100 action = "Allow" rule { name = "testrule" source_addresses = [ "10.0.0.0/16", ] target_fqdns = [ "*.google.com", ] protocol { port = "443" type = "Https" } } } resource "azurerm_firewall_network_rule_collection" "net-rc" { name = "${random_pet.prefix.id}-net-rc" azure_firewall_name = azurerm_firewall.main.name resource_group_name = azurerm_resource_group.rg.name priority = 100 action = "Allow" rule { name = "dnsrule" source_addresses = [ "10.0.0.0/16", ] destination_ports = [ "53", ] destination_addresses = [ "8.8.8.8", "8.8.4.4", ] protocols = [ "TCP", "UDP", ] } }
Создайте файл с именем
variables.tf
и вставьте следующий код:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "prefix" { type = string default = "firewall-standard" description = "Prefix of the resource name" }
Инициализируйте Terraform
Запустите terraform init , чтобы инициализировать развертывание Terraform. Эта команда загружает поставщика Azure, необходимого для управления вашими ресурсами в Azure.
terraform init -upgrade
Ключевые моменты:
- Параметр
-upgrade
обновляет необходимые плагины провайдера до самой последней версии, которая соответствует ограничениям версии конфигурации.
4. Создание плана выполнения Terraform
Запустите команду terraform plan, чтобы создать план выполнения.
terraform plan -out main.tfplan
Ключевые моменты:
- Команда
terraform plan
создает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы. - Необязательный параметр
-out
позволяет указать выходной файл для плана. Использование параметра-out
обеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
5. Применение плана выполнения Terraform
Запустите terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.
terraform apply main.tfplan
Ключевые моменты:
- Пример команды
terraform apply
предполагает, что вы ранее выполнили командуterraform plan -out main.tfplan
. - Если вы указали другое имя файла для параметра
-out
, используйте то же имя файла при вызовеterraform apply
. - Если вы не использовали параметр
-out
, вызовитеterraform apply
без параметров.
6. Импорт правил брандмауэра в политику уровня "Премиум"
Теперь у вас есть стандартный брандмауэр с классическими правилами. Затем создайте политику брандмауэра уровня "Премиум" и импортируйте правила из брандмауэра.
- На портале Azure выберите "Создать ресурс".
- Найдите политику брандмауэра и выберите ее.
- Нажмите кнопку "Создать".
- Для группы ресурсов выберите тестовые ресурсы .
- Для имени введите prem-pol.
- В регионе выберите "Восточная часть США".
- Для уровня политики выберите "Премиум".
- Нажмите кнопку "Далее": параметры DNS и продолжайте работу, пока не перейдете на страницу "Правила".
- На странице "Правила" выберите "Импорт правил" из брандмауэра Azure.
- Выберите testfirewall и нажмите кнопку "Импорт".
- Выберите "Рецензирование и создание".
- Нажмите кнопку "Создать".
7. Измените файл конфигурации Terraform для переноса брандмауэра
main.tf
Откройте файл и внесите следующие изменения:
Добавьте следующий раздел "данные":
data "azurerm_firewall_policy" "prem-pol" { name = "prem-pol" resource_group_name = azurerm_resource_group.rg.name }
Измените ресурс брандмауэра:
resource "azurerm_firewall" "fw" { name = "testfirewall" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name firewall_policy_id = data.azurerm_firewall_policy.prem-pol.id sku_tier = "Premium" ip_configuration { name = "configuration" subnet_id = azurerm_subnet.subnet.id public_ip_address_id = azurerm_public_ip.pip.id } }
Удаление коллекций классических правил:
resource "azurerm_firewall_application_rule_collection" "app-rc" { name = "apptestcollection" azure_firewall_name = azurerm_firewall.fw.name resource_group_name = azurerm_resource_group.rg.name priority = 100 action = "Allow" rule { name = "testrule" source_addresses = [ "10.0.0.0/16", ] target_fqdns = [ "*.google.com", ] protocol { port = "443" type = "Https" } } } resource "azurerm_firewall_network_rule_collection" "net-rc" { name = "nettestcollection" azure_firewall_name = azurerm_firewall.fw.name resource_group_name = azurerm_resource_group.rg.name priority = 100 action = "Allow" rule { name = "dnsrule" source_addresses = [ "10.0.0.0/16", ] destination_ports = [ "53", ] destination_addresses = [ "8.8.8.8", "8.8.4.4", ] protocols = [ "TCP", "UDP", ] } }
8. Применение измененного плана выполнения Terraform
terraform plan -out main.tfplan
terraform apply main.tfplan
9. Проверка результатов
- Выберите группу ресурсов test-resources.
- Выберите ресурс testfirewall .
- Убедитесь, что SKU брандмауэра указано как Premium.
- Убедитесь, что брандмауэр использует политику брандмауэра prem-pol .
10. Очистка ресурсов
Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:
Запустите terraform plan и укажите параметр
destroy
.terraform plan -destroy -out main.destroy.tfplan
Ключевые моменты:
- Команда
terraform plan
создает план выполнения, но не выполняет его. Вместо этого он определяет, какие действия необходимы для создания конфигурации, указанной в ваших конфигурационных файлах. Данный шаблон позволяет вам убедиться, что план выполнения соответствует вашим ожиданиям, прежде чем вносить какие-либо изменения в реальные ресурсы. - Необязательный параметр
-out
позволяет указать выходной файл для плана. Использование параметра-out
обеспечивает, что план, который вы просмотрели, будет применен точно в таком виде.
- Команда
Чтобы применить план выполнения, запустите terraform apply.
terraform apply main.destroy.tfplan
Устранение неполадок с Terraform в Azure
Устранение распространенных проблем при использовании Terraform в Azure