解决请求被策略禁止的错误

部署 Azure 资源管理器模板(ARM 模板)或 Bicep 文件时,如果要部署的资源之一不符合现有 Azure Policy,则会收到 RequestDisallowedByPolicy 错误。

症状

在部署期间,你可能会收到 RequestDisallowedByPolicy 错误,导致无法创建资源。 Azure CLI、Azure PowerShell 和 Azure 门户的活动日志显示了有关该错误的类似信息。 关键元素为错误代码、策略分配和策略定义。

"statusMessage": "{"error":{"code":"RequestDisallowedByPolicy", "target":"examplenic1207",
  "message":"Resource `examplenic1207` was disallowed by policy. Policy identifiers:

"policyAssignment":{"name":"Network interfaces should not have public IPs",
  "id":"/subscriptions/{guid}/providers/Microsoft.Authorization/policyAssignments/1111aa2222bb3333cc4444dd"}

"policyDefinition":{"name":"Network interfaces should not have public IPs",
  "id":"/subscriptions/{guid}/providers/Microsoft.Authorization/policyDefinitions/83a86a26-fd1f-447c-b59d-e51f44264114"}

id 字符串中,{guid} 占位符表示 Azure 订阅 ID。 policyAssignmentpolicyDefinition 的名称是 id 字符串的最后一段。

原因

组织会分配策略以强制实施组织标准并大规模评估合规性。 如果尝试部署违反策略的资源,则会阻止部署。

例如,订阅可以具有阻止网络接口上的公共 IP 的策略。 如果尝试使用公共 IP 地址创建网络接口,则策略会阻止你创建该网络接口。

解决方案

要解决部署 ARM 模板或 Bicep 文件时出现的 RequestDisallowedByPolicy 错误,需要查找阻止部署的策略。 在该策略中,需要查看规则,以便更新部署以符合策略。

错误消息包括导致错误的策略定义和策略分配的名称。 你需要这些名称才能获取有关策略的详细信息。

若要获取有关策略定义的详细信息,请使用 az policy definition show

az policy definition show --name {policy-name}

若要获取有关策略分配的详细信息,请使用 az policy assignment show

az policy assignment show --name {assignment-name} --resource-group {resource-group-name}

在策略定义中,可以查看策略的说明和应用的规则。 查看规则并更新 ARM 模板或 Bicep 文件以符合规则。 例如,如果规则指出公共网络访问已禁用,则需要更新相应的资源属性。

有关详细信息,请参阅以下文章: