Azure Bicep 和租户范围(假设与创建)

Azure Bicep and tenant scope (what-if vs create)

我正在使用 Azure Bicep 部署管理组。虽然 create 工作正常,但我遇到了 what-if 的意外(至少对我来说还不清楚)问题。我正在使用 this 方法。我的“目标”管理组不是根租户管理组。我收到的错误消息是:

DeploymentWhatIfResourceError - The request to predict template deployment changes to scope '/providers/Microsoft.Management/managementGroups/target-mg' has failed due to a resource error. See details for more information. AuthorizationFailed - The client '<<redacted>>' with object id '<<redacted>>' does not have authorization to perform action 'Microsoft.Management/managementGroups/read' over scope '/providers/Microsoft.Management/managementGroups/test-name' or the scope is invalid. If access was recently granted, please refresh your credentials.

what-if 是否需要比创建更多的权限?我有以下模板:

targetScope = 'managementGroup'
param name string = 'test-name'
param displayName string = 'test displayName'

resource managemagentGroup 'Microsoft.Management/managementGroups@2021-04-01' = {
  name: name
  scope: tenant()
  properties: {
    details: {
      parent: {
        id: managementGroup().id
      }
    }
    displayName: displayName
  }
}

然后 运行 像这样:

# this fails with the error above.
az deployment mg what-if -f main.bicep -m target-mg -l westeurope

# this works fine
az deployment mg validate -f main.bicep -m target-mg -l westeurope

# this works fine
az deployment mg create -f main.bicep -m target-mg -l westeurope

有人 运行 遇到同样的问题吗?

我认为您运行遇到了一个已知问题,即 ManagementGroup 资源提供程序 returns 为 non-existent managementGroup 在 GET 上的 403(而不是 404)。

What-If 执行 GET 以查看当前状态并接收 403。What-if 假设 403 意味着它所说的并且您没有权限。 What-if 在这种情况下应该收到 404。要确认这就是您 运行 正在进入的内容,如果您继续 create 毫克,然后再次 运行 what-if 它应该会成功。

re: 烫发 - 如果你有允许 validatecreate 成功的烫发,那么你在范围内有足够的烫发 - 你不需要租户的任何烫发(即"/") 范围。

至于解决方法,您可以给校长更多的权限来解决这个问题,但我还不能确定最低限度的权限是什么……我知道您是否是租户所有者(即perms at "/") 这会起作用——这就是为什么我不能在我这边重现它——但这不是必需的,它等同于 sudo/root 许可,所以不是一个很好的选择。另一种选择是当您知道 MG 不存在时跳过 what-if,这将需要在管道中或模板外的某个地方执行一个单独的步骤来检测是否存在,因为您不能在模板中执行此操作。

有帮助吗?