Azure ARM 模板 - 参数与属性的静态值相结合

标签 azure azure-resource-manager azure-rm-template

我有一个 ARM 模板,其中包含“Microsoft.Web/sites”资源类型。 我正在尝试配置资源的“ipSecurityRestrictions”属性。

“ipSecurityRestrictions” block 配置如下:

"ipSecurityRestrictions": [{
    "vnetSubnetResourceId": "[resourceId(parameters(''Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), variables('subnetName'))]",
    "action": "Allow",
    "description": "Grants the subnet access to this web app."
  },
  {
    "vnetSubnetResourceId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName2'), variables('subnetName2'))]",
    "action": "Allow",
    "description": "Grants the subnet2 access to this web app."
  }
]

这按预期工作。不过,我还想将 ip 地址添加到“ipSecurityRestrictions”中,如果我向数组中添加另一个对象,它就可以正常工作,如下所示:

{
  "ipAddress": "12.123.123.12/32",
  "action": "Allow",
  "description": "Grants the IP access to this web app."
}

问题是,我希望能够通过参数指定允许访问网络应用程序的 IP 地址。

因此,我需要能够组合一个包含 ipAddress securityRestrictions 的参数,以便在添加 vnet 后添加此参数。包含多个“ipSecurityRestrictions”的对象参数。

这在 Azure Sql Server 上是可行的,因为防火墙规则是从其自己的资源“Microsoft.Sql/servers/firewallRules”创建的,因此我可以为每个 vnet 创建一个硬编码资源,然后使用对象参数(使用复制函数使用多个值通过 json 填充。

这也可以用于例如Key Vault,因为它拥有自己的 vnet(“virtualNetworkRules”)和 IP 地址(“ipRules”)属性。因此,我可以对 vnet 进行硬编码,然后使用 IP 地址参数。

我尝试了多种方法,包括所有(来自 Microsoft 记录的)模板函数等。

如果这是不可能的,我还可以使用包含 vnet 和 IP 地址的对象参数作为最后的手段。但是,如何在模板中自动获取 vnet 的资源 ID,以便我可以在事先不知道资源 ID 的情况下引用正确的 vnet?

感谢您的所有意见!

致以诚挚的问候

最佳答案

您可以将两个或多个数组连接在一起。具有 VNet/子网的一个可以定义为模板内的变量,另一个可以作为带有 ipAddress 对象列表的数组类型参数传入。

"variables": {
  "ipSecurityRestrictionsSubnets": [
    {
      "vnetSubnetResourceId": "[resourceId(parameters(''Microsoft.Network/virtualNetworks/subnets', parameters('vnetName'), variables('subnetName'))]",
      "action": "Allow",
      "description": "Grants the subnet access to this web app."
    },
    {
      "vnetSubnetResourceId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('vnetName2'), variables('subnetName2'))]",
      "action": "Allow",
      "description": "Grants the subnet2 access to this web app."
    }
  ]
},

然后通过连接两个数组来设置属性。

"ipSecurityRestrictions": "[concat(variables('ipSecurityRestrictionsSubnets'), parameters('ipSet'))]",

引用:https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-array#concat

关于Azure ARM 模板 - 参数与属性的静态值相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60982085/

相关文章:

Azure 资源管理器 (ARM) 模板参数未定义

azure - 我是 Azure ARM 模板的初学者。我需要学习 ARM

Azure 资源管理器模板 : How to get connection string for a resource in a different ResourceGroup?

azure - 使用 Azure Cli 或 Azure REST API 禁用 AFD 后端池的后端主机

azure - properties.search.query 不是有效的日志或指标查询

google-app-engine - 有没有成功的基于 Windows Azure 的网站和 Web 服务?

azure - 如何通过 ARM 模板创建 Azure AKS 服务

powershell - 如何通过powershell获取azure vm的cpu使用率

系统分配托管标识的 Azure ARM 角色分配首次运行失败

azure - 无法使用已安装存储的 Linux 部署 Azure 应用服务的 ARM 模板