我们可以在 ARM 部署脚本中使用 az rest 吗?

Can we use az rest in ARM deployment scripts?

我正在使用 ARM 部署脚本 AzCli。我们可以在 ARM 部署脚本中使用 az rest 吗? 我得到 Forbidden({"error":{"code":"Authorization_RequestDenied","message":"Insufficient privileges to complete the operation."

我可以在我这边重现你的问题,这意味着你的 user-assigned 身份 (MSI) 没有足够的权限通过 Microsoft Graph 在你的租户中创建 AD 应用程序。

要解决此问题,只需授予 AAD 管理员角色,例如Application administrator 到您的 MSI 的服务主体,请按照以下步骤操作。

1.Navigate 到门户中的 Azure Active Directory -> Roles and administrators -> 单击 Application administrator

2.Click Add assignments -> Select member(s) -> 搜索您的 MSI 名称 -> 添加它。

注意:你也可以把Microsoft Graph应用权限Application.ReadWrite.All给MSI而不是Application administrator,这里就不多说了,如果您对此感兴趣,请告诉我,我可以post。

此外,如果你只是想用Azure CLI创建AD App,其实不需要手动使用az rest,你可以使用built-in 直接命令 az ad app create

测试样本:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "identity": {
      "type": "string"
    },
    "utcValue": {
      "type": "string",
      "defaultValue": "[utcNow()]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deploymentScripts",
      "apiVersion": "2020-10-01",
      "name": "runAzureCLI",
      "location": "[resourceGroup().location]",
      "kind": "AzureCLI",
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "[parameters('identity')]": {
          }
        }
      },
      "properties": {
        "forceUpdateTag": "[parameters('utcValue')]",
        "AzCliVersion": "2.15.0",
        "timeout": "PT30M",
        "scriptContent": "landingPageApp=$(az rest --method POST --headers \"Content-Type=application/json\" --uri https://graph.microsoft.com/v1.0/applications --body '{\"displayName\": \"LandingpageAppARM\"}')",
        "cleanupPreference": "OnSuccess",
        "retentionInterval": "P1D"
      }
    }
  ]
}