我想创建一个 ARM 模板来部署以下内容:
- 资源组
- 资源组中的 Log Analytics 工作区 + 在其上启用 Sentinel
- 用于启用 MSSP 访问 Sentinel 的 Lighthouse 代码
要执行第三步,我需要使用 subscriptionDeploymentTemplate.json 架构,但对于两个我也需要资源组,所以我想使用 deploymentTemplate.json 架构。
我有单独做这些东西的代码,但我想把它们放在一起创建一个大模板文件。
问题是,当我将 LAW + Sentinel 启用代码放入 Microsoft.Resources/deployment 资源时,我的代码不起作用。我想将其部署为嵌套模板,因此我可以使用 deploymentTemplate.json 模式。当我将代码放入此资源时,它会在模板验证期间产生错误。它说:“部署模板验证失败:'资源'Microsoft.OperationalInsights/workspaces/workspace_name'未在模板中定义。”
但是当没有嵌套时,相同的代码也可以工作。那么,在嵌套的情况下依赖函数不起作用是否正常?对我来说,在其他类型的资源的情况下似乎没有问题。但是在这里,当我尝试部署“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'))]"
]
}
]
}
}
}
]
}
}
}
]
因此,如果我将这些资源放在“Microsoft.Resources/deployments”类型中,则似乎在模板验证期间,dependsOn 不起作用。
正常吗?如果是这样,是否有我可以用来解决此问题的解决方法?或者将这三件事实现到 1 个 ARM 模板中的最佳方法是什么。