我想创建一个ARM模板来部署以下内容:
- 资源组
- 日志分析工作区在资源组+启用哨兵
- 允许MSSP访问Sentinel的灯塔代码
要完成第三步,我需要使用subscriptionDeploymentTemplate.json架构,但对于第二步,我也需要资源组,所以我想使用deploymentTemplate.json模式。
我有单独做这些事情的代码,但我想把它们放在一起创建一个大的模板文件。
问题是,当我将LAW+Stinel启用代码放入Microsoft.Resources/deployment资源中时,我的代码就不起作用了。我想将其部署为嵌套模板,这样我就可以使用deploymentTemplate.json模式。当我将代码放入该资源时,它在模板验证过程中创建了一个错误。上面写着:;部署模板验证失败:模板中未定义资源"Microsoft.OperationalInsights/workspaces/workspace_name">
但当没有嵌套时,同样的代码也能工作。那么,在嵌套的情况下,dependent函数不工作是正常的吗?对我来说,在其他类型的资源的情况下,它似乎没有问题。但在这里,当我尝试部署";Microsoft.OperationalInsights/workspaces";然后";Microsoft.OperationsManagement/solutions;它不起作用。
代码的相关部分:
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "sentinelDeployment",
"resourceGroup": "[parameters('rgName')]",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"name": "rgAssignment",
"resourceGroup": "[parameters('rgName')]",
"properties":{
"mode":"Incremental",
"template":{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"type": "Microsoft.OperationalInsights/workspaces",
"apiVersion": "2020-08-01",
"name": "[parameters('workspaceName')]",
"location": "[parameters('location')]",
"properties": {
"retentionInDays": "[parameters('dataRetention')]",
"sku": {
"name": "PerGB2018"
},
"workspaceCapping": {
"dailyQuotaGb": "[parameters('dailyCap')]"
}
}
},
{
"type": "Microsoft.OperationsManagement/solutions",
"apiVersion": "2015-11-01-preview",
"name": "[format('SecurityInsights({0})', parameters('workspaceName'))]",
"location": "[parameters('location')]",
"properties": {
"workspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
},
"plan": {
"name": "[format('SecurityInsights({0})', parameters('workspaceName'))]",
"product": "OMSGallery/SecurityInsights",
"publisher": "Microsoft",
"promotionCode": ""
},
"dependsOn": [
"[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
]
}
]
}
}
}
]
}
}
}
]
因此,在这些资源的情况下,如果我将dependensOn放在";微软资源/部署;类型
这正常吗?如果是的话,有没有一个变通方法可以用来解决这个问题?或者,将这三件事实现为一个ARM模板的最佳方式是什么。
dependensOn处理部署的范围,嵌套创建一个单独/不同的部署。
当您从一个部署中获取资源并将其嵌套到另一个部署时,需要将依赖项on从依赖于资源更改为依赖于资源移动到的部署。
所以你有:
"dependsOn": [
"[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspace_name'))]"
]
将其更改为:
"dependsOn": [
"[resourceId(parameters('rgName'), 'Microsoft.Resources/deployments', 'name-of-the-deployment-where-you-create-the-workspace')]"
]
请注意,根据组织方式的不同,确切的语法可能略有不同,但主要取决于嵌套部署,而不是资源。
如果这没有帮助,发布你的整个模板,我们可以提供更精确的指导。