我有一个ARM模板,其中包含“ Microsoft.Web / sites”资源类型。 我正在尝试配置资源的“ ipSecurityRestrictions”属性。
“ ipSecurityRestrictions”块的配置如下:
"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."
}
不过,我想能够通过参数指定应该允许访问Web应用程序的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地址的object参数来解决。但是我该如何在模板中自动获取vnet的resourceId,以便在不事先知道resourceId的情况下引用正确的vnet?
感谢所有输入!
最诚挚的问候
答案 0 :(得分:1)
您可以将两个或多个数组连接在一起。可以将带有VNet /子网的一个定义为模板中的变量,而另一个可以作为带有ipAddress
对象列表的array类型的参数传递。
"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'))]",