Я хотел бы создать набор правил сетевой безопасности (nsg) в Azure между разными подсетями с помощью Terraform. Для этой цели я написал следующий код:
#here, a set of subnets are created according to the value of count.
resource "azurerm_subnet" "mysubnets" {
count = var.subnet_number
name = join("-", ["subnet", count.index])
resource_group_name = var.rgname
virtual_network_name = azurerm_virtual_network.Global_VNet.name
address_prefix = join(".", ["10.0", "${count.index}", "0/24"])
}
product
ниже создается переменная для создания правила nsg с парами su bnet. Это позволяет перебирать пару подсетей. Я получаю address_prefixes внутри объявления ресурса azurerm_network_security_rule
locals {
product = "${setproduct(azurerm_subnet.mysubnets, azurerm_subnet.mysubnets)}"
}
resource "azurerm_network_security_rule" "myNSGrule" {
count = var.subnet_number * var.subnet_number
source_address_prefix = lookup(element(local.product, count.index)[0],"address_prefix")
destination_address_prefix = lookup(element(local.product, count.index)[1],"address_prefix")
name = join("-", ["nsg","${count.index}"])
priority = 100 + count.index
direction = "Outbound"
access = "Allow"
protocol = "*"
source_port_range = "*"
destination_port_range = "*"
resource_group_name = var.rgname
network_security_group_name = azurerm_network_security_group.myNSG.name
}
resource "azurerm_virtual_network" "Global_VNet" {
name = var.vnetname
resource_group_name = var.rgname
address_space = var.VNetAddressSpace
location = var.location
}
resource "azurerm_network_security_group" "myNSG" {
name = join("-", ["${var.rgname}", "nsg"])
location = var.location
resource_group_name = var.rgname
}
#NSG subnet association
resource "azurerm_subnet_network_security_group_association" "LabNSGAssoc" {
count = var.subnet_number
subnet_id = azurerm_subnet.mysubnets[count.index].id
network_security_group_id = azurerm_network_security_group.myNSG.id
}
Я хочу избежать правил nsg, в которых префикс назначения и источника идентичны, как показано ниже:
I пробовали несколько разных функций Terraform, но не нашли решения. У тебя есть идеи?