ฉันไม่เห็นการสร้างกฎไดนามิกใน Azure Network Security Group (NSG) เทมเพลตของฉันดูดีจากการตรวจสอบความถูกต้อง อย่างไรก็ตาม เมื่อฉันเรียกใช้ Terraform จะใช้ NSG ที่สร้างขึ้นโดยไม่มีกฎที่กำหนดเอง ฉันใส่ในส่วนกฎไดนามิก เนื่องจากนี่เป็นส่วนหนึ่งของโมดูล ฉันจึงต้องใช้ตรรกะสำหรับการวนซ้ำ
ด้านล่างนี้เป็นรหัสของฉันจากไฟล์ module.tf
ทรัพยากร "azurerm_network_security_group" "nsg" {
for_each = var.subnet_prefix
ชื่อ = ล่าง ("nsg_${each.key}_in")
resource_group_name = var.vnet_resourcegroup
สถานที่ = var.location
ไดนามิก "security_rule" {
for_each = ค้นหา (each.value, "nsg_rules", [])
เนื้อหา {
ชื่อ = ค้นหา (security_rule.value,"ชื่อ",null)
คำอธิบาย = ค้นหา (security_rule.value, "คำอธิบาย", null)
ลำดับความสำคัญ = การค้นหา (security_rule.value, "ลำดับความสำคัญ", null)
ทิศทาง = ค้นหา (security_rule.value,"direction",null)
การเข้าถึง = ค้นหา (security_rule.value, "การเข้าถึง", null)
โปรโตคอล = ค้นหา (security_rule.value,"โปรโตคอล",null)
source_port_range = "*"
destination_port_range = ค้นหา (security_rule.value,"destination_port_range",null)
source_address_prefix = ค้นหา (security_rule.value,"source_address_prefix",null)
destination_address_prefix = ค้นหา (security_rule.value,"destination_address_prefix",null)
}
}
}
ค่าจะมาจากไฟล์ terraform.tfvars ซึ่งฉันได้ประกาศไว้ด้านล่าง เพื่อความสอดคล้องฉันได้ลบค่าดั้งเดิมด้วยข้อความสุ่ม
subnet_prefix = {
sa0 = {
คำนำหน้า = "dc-subnet"
address_space = ["XXXXXX"]
nsg_name = "nsg0"
nsg_rules = [
{
ชื่อ = "rule1"
คำอธิบาย = "XXXXXX"
ลำดับความสำคัญ = 220
ทิศทาง = "ขาออก"
การเข้าถึง = "อนุญาต"
โปรโตคอล = "*"
source_port_range = "*"
source_port_ranges = null
ปลายทาง_port_range = *
destination_port_ranges = null
source_address_prefix = "*"
source_address_prefixes = null
destination_address_prefix = "X.X.X.X/26"
destination_address_prefixes = null
source_application_security_group_names = []
destination_application_security_group_names = []
}
]
}
}