У меня есть рабочий блок terraform vnet, подсети и NSG.
провайдер "азурерм" {
Особенности {}
}
ресурс "azurerm_resource_group" "пример" {
имя = "пример-ресурсы"
местоположение = "Западная Европа"
}
ресурс "azurerm_virtual_network" "пример" {
имя = "пример-vn"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
адресное_пространство = ["10.0.0.0/16"]
}
ресурс "azurerm_subnet" "пример" {
имя = "пример-SN"
resource_group_name = azurerm_resource_group.example.name
виртуальная_сеть_имя = azurerm_virtual_network.example.name
address_prefixes = ["10.0.2.0/24"]
service_endpoints = ["Microsoft.Storage"]
делегация {
имя = "фс"
service_delegation {
name = "Microsoft.DBforPostgreSQL/flexibleServers"
действия = [
"Microsoft.Network/virtualNetworks/подсети/присоединение/действие",
]
}
}
}
ресурс "azurerm_private_dns_zone" "пример" {
имя = "example.postgres.database.azure.com"
resource_group_name = azurerm_resource_group.example.name
}
ресурс "azurerm_private_dns_zone_virtual_network_link" "пример" {
имя = "exampleVnetZone.com"
private_dns_zone_name = azurerm_private_dns_zone.example.name
virtual_network_id = azurerm_virtual_network.example.id
resource_group_name = azurerm_resource_group.example.name
}
ресурс "azurerm_postgresql_flexible_server" "пример" {
имя = "пример-psqlflexibleserver2022"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
версия = "13"
делегированный_подсеть_ид = azurerm_subnet.example.id
private_dns_zone_id = azurerm_private_dns_zone.example.id
администратор_логин = "постгрес"
администратор_пароль = "пароль@2020"
зона = "1"
storage_mb = 131072
sku_name = "GP_Standard_D2s_v3"
depend_on = [azurerm_private_dns_zone_virtual_network_link.example]
}
Но я получаю сообщение о создании nsg перед ошибкой политики подсети, поэтому изменил создание подсети, как показано ниже.
# Создать виртуальную сеть
ресурс "azurerm_virtual_network" "aksvnet" {
имя = "aks-сеть"
местоположение = azurerm_resource_group.aks_rg.location
имя_группы_ресурсов = azurerm_resource_group.aks_rg.name
адресное_пространство = ["10.0.0.0/8"]
подсеть {
name = "aks-default-subnet"
адрес_префикс = "10.240.0.0/16"
security_group = azurerm_network_security_group.example.id
}
подсеть {
имя = "aks-postgres-подсеть"
адрес_префикс = "10.230.2.0/24"
security_group = azurerm_network_security_group.example.id
service_endpoints = ["Microsoft.Storage"]
делегация {
имя = "фс"
service_delegation {
name = "Microsoft.DBforPostgreSQL/flexibleServers"
действия = [
"Microsoft.Network/virtualNetworks/подсети/присоединение/действие",
]
}
}
}
}
ресурс "azurerm_network_security_group" "пример" {
имя = "пример-nsg"
местоположение = azurerm_resource_group.aks_rg.location
имя_группы_ресурсов = azurerm_resource_group.aks_rg.name
безопасность_правило {
имя = "тест123"
приоритет = 100
направление = "Входящий"
доступ = "Разрешить"
протокол = "TCP"
source_port_range = "*"
диапазон_порта_назначения = "*"
исходный_адрес_префикс = "*"
префикс_адреса_назначения = "*"
}
}
Но ниже ошибки.
Пожалуйста, предложите, как это исправить.
Ошибка: неподдерживаемый аргумент
✓
✓ в 11-virtual-network.tf, строка 17, в ресурсе "azurerm_virtual_network" "aksvnet":
17: service_endpoints = ["Microsoft.Storage"]
✓
✓ Аргумент с именем «service_endpoints» здесь не ожидается.
âµ
·
✓ Ошибка: неподдерживаемый тип блока
✓
✓ в 11-virtual-network.tf, строка 18, в ресурсе "azurerm_virtual_network" "aksvnet":
18: делегирование {
✓
• Блоки типа «делегирование» здесь не ожидаются.
Даже с приведенным ниже подходом я получаю ошибку политики.
# Создать виртуальную сеть
ресурс "azurerm_virtual_network" "aksvnet" {
имя = "aks-сеть"
местоположение = azurerm_resource_group.aks_rg.location
имя_группы_ресурсов = azurerm_resource_group.aks_rg.name
адресное_пространство = ["10.0.0.0/8"]
подсеть {
name = "aks-default-subnet"
адрес_префикс = "10.240.0.0/16"
security_group = azurerm_network_security_group.example.id
}
}
ресурс "azurerm_network_security_group" "пример" {
имя = "пример-nsg"
местоположение = azurerm_resource_group.aks_rg.location
имя_группы_ресурсов = azurerm_resource_group.aks_rg.name
безопасность_правило {
имя = "тест123"
приоритет = 100
направление = "Входящий"
доступ = "Разрешить"
протокол = "TCP"
source_port_range = "*"
диапазон_порта_назначения = "*"
исходный_адрес_префикс = "*"
префикс_адреса_назначения = "*"
}
}
ресурс "azurerm_subnet_network_security_group_association" "пример" {
subnet_id = azurerm_subnet.example.id
network_security_group_id = azurerm_network_security_group.example.id
}
ресурс "azurerm_subnet" "пример" {
виртуальная_сеть_имя = azurerm_virtual_network.aksvnet.name
имя = "aks-postgres-подсеть"
имя_группы_ресурсов = azurerm_resource_group.aks_rg.name
address_prefixes = ["10.230.2.0/24"]
service_endpoints = ["Microsoft.Storage"]
делегация {
имя = "фс"
service_delegation {
name = "Microsoft.DBforPostgreSQL/flexibleServers"
действия = [
"Microsoft.Network/virtualNetworks/подсети/присоединение/действие",
]
}
}
depend_on = [azurerm_virtual_network.aksvnet, azurerm_network_security_group.example]
}
Я получаю сообщение об ошибке, как показано ниже.
er-delete-dev"): network.SubnetsClient#CreateOrUpdate: Ошибка отправки запроса: StatusCode=403 -- Исходная ошибка:
Code="RequestDisallowedByPolicy" Сообщение="Ресурс
«aks-postgres-subnet» была запрещена политикой. Идентификаторы политики:
'[{"policyAssignment":{"name":"Deny-Subnet-Without-Nsg","id":"/providers/Microsoft.Management/managementGroups/QSFT-landingzones/providers/Microsoft.Authorization/policyAssignments/Deny- Subnet-Without-Nsg"},"policyDefinition":{"имя":"Подсети
должна иметь группу безопасности сети
","id":"/providers/Microsoft.Management/managementGroups/QSFT/providers/Microsoft.Authorization/policyDefinitions/Deny-Subnet-Without-Nsg"}}]'".
Target="aks-postgres-подсеть"
AdditionalInfo=[{"info":{"evaluationDetails":{"evaluatedExpressions":[{"expression":"type","expressionKind":"Field","expressionValue":"Microsoft.Network/virtualNetworks/subnets", «оператор»: «равно», «путь»: «тип», «результат»: «истина», «целевое значение»: «Microsoft.Network/virtualNetworks/subnets»}, {«выражение»: «Microsoft.Network/virtualNetworks» /subnets/networkSecurityGroup.id","expressionKind":"Поле","оператор":"Существует","путь":"properties.networkSecurityGroup.id","результат":"True","targetValue":"false "}]},"policyAssignmentDisplayName":"Deny-Subnet-Without-Nsg","policyAssignmentId":"/providers/Microsoft.Management/managementGroups/QSFT-landingzones/providers/Microsoft.Authorization/policyAssignments/Deny-Subnet-Without -Nsg","policyAssignmentName":"Deny-Subnet-Without-Nsg","policyAssignmentScope":"/providers/Microsoft.Management/managementGroups/QSFT-landingzones","policyDefinitionDisplayName":"Подсети
должна иметь группу безопасности сети
","policyDefinitionEffect":"Запретить","policyDefinitionId":"/providers/Microsoft.Management/managementGroups/QSFT/providers/Microsoft.Authorization/policyDefinitions/Deny-Subnet-Without-Nsg","policyDefinitionName":"Deny- Subnet-Without-Nsg"},"type":"PolicyViolation"}]
✓
✓ с azurerm_subnet.example,
✓ в 11-virtual-network.tf, строка 37, в ресурсе "azurerm_subnet" "example":
37: ресурс "azurerm_subnet" "пример" {