Terraform:如何在 Azure RM 中实施应用程序安全组

Terraform: how to implement Application Security Groups in Azure RM

问题

我发现我可以integrate Application Security Groups (ASG) into a Network Interface when using the azurestack resource provider, but I cannot do so when using the azurerm resource provider

我的理解

我不明白为什么我做不到。我其实不明白 Azure Stack 和 Azure RM 之间的区别。 This article 建议 Azure Stack 用于混合部署,Azure RM(或 Azure Provider)用于纯云部署。

我和其他同事之前所做的所有工作都是 azurerm。如果可以的话,我宁愿坚持使用 azurerm。或者,如果可能的话,我想“混合搭配”azurermazurestack,仅在必须时才使用 azurestack,就像本例中那样。但我真的很想知道为什么有些事情只能通过一个提供商实现,因为就纯 Azure 服务而言,它们都应该提供相同的产品。


有什么想法吗?

不过,最终,我只是想解决将网络接口附加到 VM 的问题,其中 NIC 已关联 ASG。如果可能的话,我想用 azurerm 来做到这一点。我可以使用 azurestack,只要 azurestack 与通过 azurerm 启动的其他服务兼容。

无需使用azurestack将NIC与ASG关联

Terraform 提供商 azurerm 具有名为 azurerm_network_interface_application_security_group_association

的资源

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/network_interface_application_security_group_association

您只需要创建ASG并关联网卡即可。

示例:

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

resource "azurerm_virtual_network" "example" {
  name                = "example-network"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_subnet" "example" {
  name                 = "internal"
  resource_group_name  = azurerm_resource_group.example.name
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefixes     = ["10.0.1.0/24"]
}

resource "azurerm_application_security_group" "example" {
  name                = "example-asg"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
}

resource "azurerm_network_interface" "example" {
  name                = "example-nic"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name

  ip_configuration {
    name                          = "testconfiguration1"
    subnet_id                     = azurerm_subnet.example.id
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_network_interface_application_security_group_association" "example" {
  network_interface_id          = azurerm_network_interface.example.id
  application_security_group_id = azurerm_application_security_group.example.id
}