Azure 资源策略的 RequestDisallowedByPolicy 错误

本文说明了 RequestDisallowedByPolicy 错误的原因,它还提供了此错误的解决方案。

症状

部署过程中,可能会收到阻止创建资源的 RequestDisallowedByPolicy 错误。 以下示例显示错误:

{
  "statusCode": "Forbidden",
  "serviceRequestId": null,
  "statusMessage": "{\"error\":{\"code\":\"RequestDisallowedByPolicy\",\"message\":\"The resource action 'Microsoft.Network/publicIpAddresses/write' is disallowed by one or more policies. Policy identifier(s): '/subscriptions/{guid}/providers/Microsoft.Authorization/policyDefinitions/regionPolicyDefinition'.\"}}",
  "responseBody": "{\"error\":{\"code\":\"RequestDisallowedByPolicy\",\"message\":\"The resource action 'Microsoft.Network/publicIpAddresses/write' is disallowed by one or more policies. Policy identifier(s): '/subscriptions/{guid}/providers/Microsoft.Authorization/policyDefinitions/regionPolicyDefinition'.\"}}"
}

疑难解答

若要检索有关阻止部署的策略的详细信息,请使用以下方法之一:

PowerShell

注意

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

在 PowerShell 中,提供该策略标识符作为 Id 参数,检索有关阻止部署的策略的详细信息。

(Get-AzPolicyDefinition -Id "/subscriptions/{guid}/providers/Microsoft.Authorization/policyDefinitions/regionPolicyDefinition").Properties.policyRule | ConvertTo-Json

Azure CLI

在 Azure CLI 中,提供策略定义的名称:

# Get all the name and displayName collection with Azure CLI
az policy definition list --query '[*].{Name: name, DisplayName: displayName}' -o table
 
# Replace {regionPolicyAssignment} with the specific name showed on output of previous cmdlet, e.g. feedbf84-6b99-488c-acc2-71c829aa5ffc.
az policy definition show --name {regionPolicyAssignment}

解决方案

为了安全性和符合性,订阅管理员可能会分配限制资源部署方式的策略。 例如,订阅可能具有阻止创建公共 IP 地址、网络安全组、用户定义的路由或路由表的策略。 “症状”部分中的错误消息显示策略的名称。 要解决此问题,请查看资源策略,并确定如何部署符合这些策略的资源。

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