当 运行 Terraform 脚本时绕过 Azure Policy 分配以执行标记的最佳方法是什么?

What's the best way to bypass an Azure Policy assignment for Tag Enforcement when running a Terraform Script?

我们最近创建了一项 Azure 策略,强制在所有资源上显示一组特定的标签。此策略阻止部署中不包含所需标签的部署。但是,除非您使用 ARM 模板,否则某些可标记资源(例如 Vnet)没有在部署期间添加标记的选项。看起来 Terraform 还尝试在添加标签之前将 Vnet 部署为一个单独的步骤,这会导致 Terraform 部署的 Vnet 失败,即使提供了正确的标签也是如此。使用 Terraform,如果提供 ARM 模板,它将绕过此问题。

如何在不使用 ARM 模板且不必放弃 Azure 策略的情况下让 Terraform 部署 Vnet 等资源?理想情况下,我希望能够从 Azure Policy 中排除 Terraform 启动的资源部署,但我找不到一种方法来区分 Terraform 部署和 Azure 策略中的正常 Azure Web 门户部署。

一些其他想法:

有没有比上面提到的更优雅的解决方案?

Azure Policy 无法区分 ARM 操作的执行方式,它只能看到将应用于资源的属性结果集。

使用继承资源组标记策略 (https://github.com/Azure/azure-policy/tree/master/samples/Tags/inherit-resourcegroup-tag) 怎么样? Terraform 可以将标签添加到资源组,然后部署 vnet,此时 Policy 会将资源组中的标签应用到 vnet。