Как создать группу безопасности сети для существующей подсети с помощью terraform на лазурном сервере

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

Код для рефренса и добавления NSG приведен ниже:

data "azurerm_subnet" "tf-sn-erx-app" {
  name                 = "${var.subnet_app_name}"
  virtual_network_name = "${data.azurerm_virtual_network.tf-vn-erx.name}"
  resource_group_name  = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
  security_group       = "${azurerm_network_security_group.tf-nsg-erx-application.id}"
}

data "azurerm_subnet" "tf-sn-erx-sql" {
  name                 = "${var.subnet_sql_name}"
  virtual_network_name = "${data.azurerm_virtual_network.tf-vn-erx.name}"
  resource_group_name  = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
  security_group       = "${azurerm_network_security_group.tf-nsg-erx-sql.id}"
}
resource "azurerm_network_security_group" "tf-nsg-erx-application" {
  name                = "${var.application_nsg}"
  location            = "${data.azurerm_resource_group.tf-rg-erx-external.location}"
  resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
}
resource "azurerm_network_security_rule" "tf-nsr-erx-application-5985" {
  name                        = "Open Port 5985"
  priority                    = 100
  direction                   = "Inbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "*"
  destination_port_range      = "5985"
  source_address_prefix       = "*"
  destination_address_prefix  = "*"
  resource_group_name         = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
  network_security_group_name = "${azurerm_network_security_group.tf-nsg-erx-application.name}"
}
resource "azurerm_network_security_rule" "tf-nsr-erx-application-5986" {
  name                        = "Open Port 5986"
  priority                    = 101
  direction                   = "Inbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "*"
  destination_port_range      = "5986"
  source_address_prefix       = "*"
  destination_address_prefix  = "*"
  resource_group_name         = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
  network_security_group_name = "${azurerm_network_security_group.tf-nsg-erx-application.name}"
}

Однако, когда я запускаю terraform, выдается сообщение об ошибке ниже.

Error: data.azurerm_subnet.tf-sn-erx-app: : invalid or unknown key: security_group
Error: data.azurerm_subnet.tf-sn-erx-sql: : invalid or unknown key: security_group

В чем проблема?


person learner    schedule 17.04.2019    source источник
comment
@CharlesXu и BMW, приносим свои извинения за задержку. Я был на пасхальных каникулах. Он работает, как показано ниже: `` network_security_group_id = $ {azurerm_network_security_group.tf-nsg-erx-application.id} `` `   -  person learner    schedule 23.04.2019
comment
Так что если я отправлю это в качестве ответа, это определенно сработает. У меня все NI теперь связаны с IP.   -  person learner    schedule 23.04.2019
comment
Если вы используете что-то в моем ответе, то вы должны отметить это, а не добавлять еще один. Вы получите от меня ответ и вернете мне отметку.   -  person Charles Xu    schedule 23.04.2019
comment
Еще обновления?   -  person Charles Xu    schedule 24.04.2019
comment
@CharlesXu страстно ценю вашу настойчивость! Я опубликовал ответ, по крайней мере, это сработало для меня. Спасибо вам и BMW.   -  person learner    schedule 24.04.2019


Ответы (3)


Как сообщает @BMW, в данных azurerm_subnet нет свойства security_group. Если вы хотите связать NSG с существующей подсетью, вы можете использовать azurerm_subnet_network_security_group_association для этого. Просто используйте данные azurerm_subnet для ссылки на существующую подсеть и создайте для нее группу безопасности сети или используйте существующую.

person Charles Xu    schedule 17.04.2019

В источнике данных azurerm_subnet отсутствует ключ security_group

Argument Reference
name - (Required) Specifies the name of the Subnet.
virtual_network_name - (Required) Specifies the name of the Virtual Network this Subnet is located within.
resource_group_name - (Required) Specifies the name of the resource group the Virtual Network is located in.

https://www.terraform.io/docs/providers/azurerm/d/subnet.html

person BMW    schedule 17.04.2019
comment
Я догадываюсь, что он говорит - вы должны удалить этот ключ :) - person 4c74356b41; 17.04.2019
comment
@ 4c74356b41 да - person BMW; 17.04.2019

Я получил его с помощью приведенного ниже кода:

resource "azurerm_network_interface" "tf-ni-erx-mkconn" {
 count                     = 3
 name                      = "${var.mkconn_base_hostname}${format("%02d",count.index+1)}-nic01"
 location                  = "${data.azurerm_resource_group.tf-rg-erx-external.location}"
 resource_group_name       = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
 network_security_group_id = "${azurerm_network_security_group.tf-nsg-erx-application.id}"
person learner    schedule 24.04.2019
comment
Если это решение, то почему вы задаетесь вопросом, как создать группу безопасности сети для существующей подсети ?! Это не отвечает на вопрос. - person Charles Xu; 25.04.2019
comment
@CharlesXu Я понял это после того, как разместил вопрос. Могу приложить скриншоты. Это точно работает. - person learner; 26.04.2019
comment
Да, работает. Но это показывает, что NSG связана с NIC. Вы также можете связать группу безопасности сети с подсетью в качестве своего вопроса. - person Charles Xu; 26.04.2019
comment
Хорошо, какой из них следует придерживаться. NSG в NIC или в подсеть в соответствии с лучшими практиками безопасности, не могли бы вы посоветовать мне, пожалуйста? - person learner; 29.04.2019
comment
Все это практики, на ваш выбор. Для подсети это для всех служб в подсети. Для NIC это только для того, с которым он связан. - person Charles Xu; 29.04.2019
comment
Я проголосовал за правильный ответ за актуальный вопрос. Моя проблема решена тем способом, который я дал в качестве ответа. - person learner; 29.04.2019
comment
Но если вы хотите управлять правилами NSG в целом для всех служб в подсети, вам следует попробовать NSG в подсети. - person Charles Xu; 29.04.2019
comment
Спасибо @CharlesXu за руководство. Я буду исследовать этот путь. У них нет четкого представления об архитектуре. - person learner; 29.04.2019