NSG 通过 Terraform 在 azure 中对订阅进行规则

NSG rule across subscription in azure via terraform

#provider azurem.mgmt is Subscription A.
#prodiver azurem.corpapps is Subscription B.

我正在尝试使用提供商 azurerm.mgmtSubscription A 中创建 nsg 规则。这里 destination application security groupSubscription B 中,此订阅中提供者 azurerm.corpapps

provider "azurerm" {
    client_id       = "${var.client_id}"
    client_secret   = "${var.client_secret}"
    tenant_id       = "${var.tenant_id}"
    subscription_id = "${var.subscription}"
    alias           = "mgmt"
}

provider "azurerm" {
    client_id       = "${var.client_id}"
    client_secret   = "${var.client_secret}"
    tenant_id       = "${var.tenant_id}"
    subscription_id = "${var.subscription_B}"
    alias           = "corpapps"
}

然后我使用提供商从订阅 B 获取我的 asg,如下所示:

然后我在我的 nsg 规则中使用该引用

但是,我收到错误消息 - 提示未找到 ASG:

但是,在 Azure 门户中,资源已经存在,如图所示:

我曾尝试分配在两个订阅上都具有所有者角色的 SP,或者通过 CLI 使用 Azure 帐户,但没有成功。此外,正如评论所指出的,limitation NSG 不在不同位置引用 ASG。经过我的验证,您无法从另一个订阅添加 ASG,即使它与 NSG 位于同一区域或目标 VNet。

此外,当您将此 ASG 添加为 NSG 规则中的目标源或目标时,您将看到

Select an application security group (ASG) as the security rule source. ASGs enable fine-grained network security policies based on workloads or applications instead of IP addresses or CIDR blocks. Rules specifying an application security group are only applied to network interfaces that are members of the application security group on the same virtual network.