使用 ARM 部署向密钥保管库添加访问策略时如何调试 ConflictError

How to debug a ConflictError when adding an access policy to a key vault using an ARM deployment

我正在尝试使用 ARM 部署向 Keyvault 添加访问策略。正在同时部署多个访问策略(使用复制 Arm 方法和嵌套模板),其中一些(当我重新触发部署时并不总是相同的)失败并出现以下错误:

{
  "error": {
    "code": "ConflictError",
    "message": "A conflict occurred to prevent the operation from completing."
  }
}

错误消息并没有真正的描述性,有没有办法获得有关错误原因的更多信息?

在部署期间,您可以请求在部署期间记录其他信息。在 powershell 中,将 DeploymentDebugLogLevel 参数设置为 All.

New-AzResourceGroupDeployment `
  -Name exampledeployment `
  -ResourceGroupName examplegroup `
  -TemplateFile c:\Azure\Templates\storage.json `
  -DeploymentDebugLogLevel All

然后您可以检查请求内容或响应内容。

(Get-AzResourceGroupDeploymentOperation `
-DeploymentName exampledeployment `
-ResourceGroupName examplegroup).Properties.response `
| ConvertTo-Json

有关解决部署错误的更多详细信息,您可以参考https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-common-deployment-errors

我遇到了同样的问题。我不确定此问题的根本原因是什么,并且无法稳定重现。但是我猜可能是因为我同时创建了多个访问策略,实际上这是一个并发问题。也许您可以尝试按顺序添加访问策略。

我有同样的错误,我猜这是因为你试图并行修改同一个项目"key vault"。 此更改解决了我的问题:

"mode": "serial"

"copy": {
    "name": "<name-of-loop>",
    "count": <number-of-iterations>,
    "mode": "serial" <or> "parallel"
}

我在尝试使用访问策略同时部署多个 Key Vault 时也 运行 遇到了这个错误。切换到顺序部署对我的情况没有帮助。访问策略作为单独的对象部署在 ARM 模板中。我终于想到我忘记了访问策略对父资源的依赖:

"dependsOn": [
            "[resourceId('Microsoft.KeyVault/vaults', parameters('My_Key_Vault_name'))]"
        ]

啊,臭名昭著的 Microsoft 错误消息的乐趣...

如果您尝试将密钥创建到具有相同名称的已删除密钥(KeyVault 已启用软删除)的 KeyVault 中,您还会收到错误消息 (A conflict occurred to prevent the operation from completing)。