当 运行 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 门户部署。
一些其他想法:
- 使用 Terraform 在指定 'Exempt these resources' 的资源组上创建临时标签。 Terraform 脚本完成后删除此标记。在 Azure Policy 中引用此标记,如果该标记存在则免除部署。这个解决方案还可以,但我更喜欢一个更优雅的解决方案
- 在执行时使用 Terraform 添加资源组作为策略的豁免,然后在
之后恢复
- 更新政策,在没有 ARM 模板的情况下不支持在初始部署时标记的资源不需要标记
有没有比上面提到的更优雅的解决方案?
Azure Policy 无法区分 ARM 操作的执行方式,它只能看到将应用于资源的属性结果集。
使用继承资源组标记策略 (https://github.com/Azure/azure-policy/tree/master/samples/Tags/inherit-resourcegroup-tag) 怎么样? Terraform 可以将标签添加到资源组,然后部署 vnet,此时 Policy 会将资源组中的标签应用到 vnet。
我们最近创建了一项 Azure 策略,强制在所有资源上显示一组特定的标签。此策略阻止部署中不包含所需标签的部署。但是,除非您使用 ARM 模板,否则某些可标记资源(例如 Vnet)没有在部署期间添加标记的选项。看起来 Terraform 还尝试在添加标签之前将 Vnet 部署为一个单独的步骤,这会导致 Terraform 部署的 Vnet 失败,即使提供了正确的标签也是如此。使用 Terraform,如果提供 ARM 模板,它将绕过此问题。
如何在不使用 ARM 模板且不必放弃 Azure 策略的情况下让 Terraform 部署 Vnet 等资源?理想情况下,我希望能够从 Azure Policy 中排除 Terraform 启动的资源部署,但我找不到一种方法来区分 Terraform 部署和 Azure 策略中的正常 Azure Web 门户部署。
一些其他想法:
- 使用 Terraform 在指定 'Exempt these resources' 的资源组上创建临时标签。 Terraform 脚本完成后删除此标记。在 Azure Policy 中引用此标记,如果该标记存在则免除部署。这个解决方案还可以,但我更喜欢一个更优雅的解决方案
- 在执行时使用 Terraform 添加资源组作为策略的豁免,然后在 之后恢复
- 更新政策,在没有 ARM 模板的情况下不支持在初始部署时标记的资源不需要标记
有没有比上面提到的更优雅的解决方案?
Azure Policy 无法区分 ARM 操作的执行方式,它只能看到将应用于资源的属性结果集。
使用继承资源组标记策略 (https://github.com/Azure/azure-policy/tree/master/samples/Tags/inherit-resourcegroup-tag) 怎么样? Terraform 可以将标签添加到资源组,然后部署 vnet,此时 Policy 会将资源组中的标签应用到 vnet。