New-AzureRmRoleAssignment:未将对象引用设置为对象的实例

New-AzureRmRoleAssignment : Object reference not set to an instance of an object

无法使用 New-AzureRmRoleAssignment 命令将角色分配给用户。当我 运行 上面的命令出现如下错误时。

New-AzureRmRoleAssignment : Object reference not set to an instance of an object.

任何人都可以帮助解决这个问题。

要在 运行 书中成功为用户分配角色,请按照以下步骤操作。

注意:您使用的New-AzureRmRoleAssignment属于旧的AzureRM,已弃用,不再更新。在我的示例中,我使用了新的 Az command New-AzRoleAssignment,我也推荐您使用它。

1.Navigate 到门户中的订阅(您需要在订阅中成为 Owner/User Access Administrator)-> 将您的自动化 RunAs 帐户的服务主体添加为 Owner/User Access Administrator(通过默认会在创建时添加为Contributor,但是Contributor没有权限运行 New-AzRoleAssignment).

2.Navigate 到门户中的 Azure Active Directory -> App registrations -> 找到您的 RunAs 帐户的 AD 应用程序并添加 Directory.Read.All Azure Active Directory Graph(Not Microsoft Graph) 中的 application 权限如下所示,不要忘记最后单击 Grant admin consent for xxx 按钮(您需要成为 AAD 租户中的管理员角色)。权限可能需要大约 30 分钟才能生效。

3.Navigate 到门户中的自动化帐户 -> Modules -> 确保你已经安装了 Az.AccountsAz.Resources 模块,如果没有,请转到Browse Gallery,搜索名称,然后安装它们。

4.Then 在 运行 书中,使用下面的脚本,它在我这边工作正常。在我的示例中,我将用户添加为资源组 joyRG 中的 Reader,您可以更改它,这取决于您的要求。

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    Connect-AzAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

$user = Get-AzADUser -UserPrincipalName joyw2@xxxx.onmicrosoft.com
New-AzRoleAssignment -ObjectId $user.id -ResourceGroupName joyRG -RoleDefinitionName Reader