【问题标题】:Function code cannot run command that works interactively功能代码无法运行交互工作的命令
【发布时间】:2022-09-27 17:27:55
【问题描述】:

我有一个 Azure Durable 函数,它运行一些 PowerShell 代码。

该代码从新创建的应用程序帐户中获取应用程序 ID,并授予其对资源组的贡献者访问权限。

代码如下所示:

$param = @{
    ApplicationId      = $SpnAppId
    RoleDefinitionName = \'Contributor\'
    ResourceGroupName  = $ResourceGroupName
    ErrorAction        = \'Stop\'
    }
New-AzRoleAssignment @param

我的代码在 2 个不同的租户中运行。在这两个租户中,我可以使用运行函数会话的应用程序帐户的凭据运行交互式 PowerShell 控制台,并将新创建的应用程序帐户添加为资源组的参与者。调整函数的两个应用程序帐户在包含资源组的订阅上都有 Directory.Read.All(Application) 和 Owner。

奇怪的是,在一个租户中,该函数按预期将贡献者角色授予资源组上的应用程序帐户,在运行该函数时,在另一个租户中却没有。

考虑到交互运行时两个租户中的操作都成功,什么可能导致函数在一个租户中失败,ERROR: Insufficient privileges to complete the operation 在另一个租户中失败?

    标签: powershell azure-functions azure-rbac


    【解决方案1】:

    交互式会话不适用于 Azure Functions,您必须使用服务主体。

    此角色权限是在帐户上分配的,因此需要服务主体才能将角色分配给特定服务或应用程序(如 Azure Function 应用程序)。

    错误:权限不足,无法完成操作

    如果对象 ID 没有创建或分配服务主体所需的权限,即使它在订阅级别被分配为所有者,也会出现此错误。

    修复上述错误,make as owner of the subscription, CreateService principal用于角色分配并将该服务主体名称传递给role assignment PowerShell command,参考这个MS Doc的角色分配格式。

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 2020-06-28
      • 2014-08-29
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      相关资源
      最近更新 更多