Рейтинг:0

Как установить service_endpoints и делегирование в части подсети vnet в Azure с помощью terraform?

флаг cn

У меня есть рабочий блок 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" "пример" {

Рейтинг:1
флаг cn

Проверить документация - если вы создаете подсети внутри azurerm_virtual_network ресурс, вы не можете указать делегирование или конечные точки службы.

Я бы предложил сохранить ваш исходный код и решить проблему порядка создания политики.

Sara June avatar
флаг cn
Политика применяется на уровне организации и не может ее отключить. не могли бы вы, пожалуйста, дайте мне знать, если есть другие варианты
Sara June avatar
флаг cn
можно ли каким-либо образом применить service_delegation к подсети после ее создания? Чтобы я создал подсеть вместе с vnet и применил делегирование как отдельный блок
флаг cn
О, теперь я вижу твое затруднительное положение! Да, я не уверен, что есть способ обойти это, я боюсь, кроме изменения политики управления на действие аудита, а не на отказ. Может быть, у кого-то еще будет идея.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.