You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Synapse Analytics专用终结点自定义策略不合规问题求助

问题分析与修正方案

你的自定义策略显示不合规,核心问题集中在逻辑判断、参数引用、字段匹配及策略完整性四个方面,以下是具体问题和修正方案:

1. 存在条件逻辑错误

当前existenceCondition用allOf包裹三个独立子条件,要求同时存在三个分别对应SqlOnDemand、Sql、dev的Private Link连接,但实际Synapse Workspace的Private Endpoint通常是在同一个连接中包含多个GroupId,或单个连接对应一个GroupId,allOf的强匹配逻辑会导致策略判断偏差。

应调整为检查Private Endpoint的连接中是否包含所有需要的GroupId,改用contains配合allOf实现。

2. 参数占位符未使用内置变量

策略中的{subscriptionId}、{resourceGroup}、{synapseWorkspaceName}是硬编码占位符,需替换为Azure Policy内置参数才能正确匹配当前Synapse工作区的资源ID:

  • 订阅ID:[field('subscriptionId')]
  • 资源组:[field('resourceGroup')]
  • 工作区名称:[field('name')]

3. GroupId大小写不匹配

Synapse Workspace的有效GroupId为Dev(首字母大写),而非dev,Azure资源标识区分大小写,这会导致存在条件无法匹配。

4. 策略结构不完整

你提供的代码片段缺少DeployIfNotExists必需的deployment部分,无法自动部署缺失的Private Endpoint资源。


修正后的完整策略示例

"policyRule": {
  "if": {
    "field": "type",
    "equals": "Microsoft.Synapse/workspaces"
  },
  "then": {
    "effect": "DeployIfNotExists",
    "details": {
      "type": "Microsoft.Network/privateEndpoints",
      "existenceScope": "subscription",
      "existenceCondition": {
        "allOf": [
          {
            "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].privateLinkServiceId",
            "equals": "[concat('/subscriptions/', field('subscriptionId'), '/resourceGroups/', field('resourceGroup'), '/providers/Microsoft.Synapse/workspaces/', field('name'))]"
          },
          {
            "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
            "contains": "Sql"
          },
          {
            "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
            "contains": "SqlOnDemand"
          },
          {
            "field": "Microsoft.Network/privateEndpoints/privateLinkServiceConnections[*].groupIds[*]",
            "contains": "Dev"
          }
        ]
      },
      "roleDefinitionIds": [
        "/providers/Microsoft.Authorization/roleDefinitions/4d97b98b-1d4f-4787-a291-c67834d212e7"
      ],
      "deployment": {
        "properties": {
          "mode": "incremental",
          "template": {
            "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
            "contentVersion": "1.0.0.0",
            "parameters": {
              "workspaceName": {
                "type": "string"
              },
              "resourceGroup": {
                "type": "string"
              },
              "subscriptionId": {
                "type": "string"
              },
              "privateEndpointName": {
                "type": "string",
                "defaultValue": "[concat('pe-', parameters('workspaceName'))]"
              },
              "virtualNetworkName": {
                "type": "string"
              },
              "subnetName": {
                "type": "string"
              }
            },
            "resources": [
              {
                "type": "Microsoft.Network/privateEndpoints",
                "apiVersion": "2023-05-01",
                "name": "[parameters('privateEndpointName')]",
                "location": "[resourceGroup().location]",
                "properties": {
                  "subnet": {
                    "id": "[concat('/subscriptions/', parameters('subscriptionId'), '/resourceGroups/', parameters('resourceGroup'), '/providers/Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'), '/subnets/', parameters('subnetName'))]"
                  },
                  "privateLinkServiceConnections": [
                    {
                      "name": "[concat(parameters('privateEndpointName'), '-connection')]",
                      "properties": {
                        "privateLinkServiceId": "[concat('/subscriptions/', parameters('subscriptionId'), '/resourceGroups/', parameters('resourceGroup'), '/providers/Microsoft.Synapse/workspaces/', parameters('workspaceName'))]",
                        "groupIds": [
                          "Sql",
                          "SqlOnDemand",
                          "Dev"
                        ]
                      }
                    }
                  ]
                }
              }
            ]
          },
          "parameters": {
            "workspaceName": {
              "value": "[field('name')]"
            },
            "resourceGroup": {
              "value": "[field('resourceGroup')]"
            },
            "subscriptionId": {
              "value": "[field('subscriptionId')]"
            },
            "virtualNetworkName": {
              "value": "[parameters('virtualNetworkName')]"
            },
            "subnetName": {
              "value": "[parameters('subnetName')]"
            }
          }
        }
      }
    }
  }
}

额外说明

  • 部署模板中的virtualNetworkName和subnetName需补充为你的目标虚拟网络和子网信息,建议通过策略参数传入以提升灵活性。
  • roleDefinitionIds指定了策略所需的网络参与者角色权限,确保策略有足够权限创建Private Endpoint。

内容的提问来源于stack exchange,提问作者Romeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 03:35:59