Azure cli -az 角色分配

问题描述 投票:0回答:1

我尝试使用此脚本将 Databricks 访问连接器分配给 storahe 帐户作为存储 blob 数据贡献者

    function Assign-RBACRoleToAccessConnector {
    param (
        [string] $rgName,
        [string] $acName,
        [string] $saName,
        [string] $subscriptionId
    )

    # Get the object ID of the access connector
    Write-Host "we are here 1"
    $accessConnector = Get-AzDatabricksAccessConnector -ResourceGroupName $rgName -Name $acName
    # $accessConnector = Get-AzDataBricksWorkspace -ResourceGroupName $rgName -Name $acName
    $accessConnector
    Write-Host "we are here 2"
    $accessConnectorObjectId = $accessConnector.Identity.PrincipalId

    Write-Host "Access Connector Object ID: $accessConnectorObjectId"

    # Get the object ID of the storage account
    # $storageAccount = Get-AzStorageAccount -ResourceGroupName $rgName -Name $saName
    # # $storageAccountObjectId = $storageAccount.Identity.PrincipalId

    # Assign RBAC role to the access connector
    az role assignment create --assignee $accessConnectorObjectId --role "Storage Blob Data Contributor" --scope "/subscriptions/$subscriptionId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$saName"
}

但是这不起作用!我尝试通过一一获取输出来进行调试。第一次输出

$accessConnector
变量成功,我可以看到详细数据,包括 IdentityPrincipalId,但该变量的第二个输出
$accessConnectorObjectId
为空。我可以得到它,因此会导致错误

访问连接器对象 ID:
错误:参数--受让人:预期的一个 争论

我该如何解决这个问题?

azure powershell azure-resource-manager azure-cli
1个回答
0
投票

该问题是由

$accessConnector.Identity.PrincipalId
中的拼写错误引起的,查看 Get-AzDatabricksAccessConnector 文档中的
Outputs
,我们可以看到 cmdlet 输出一个实现
IAccessConnector
 Interface
的对象,并且,如果我们查看对于该接口,我们可以看到属性名称是
.IdentityPrincipalId
 而不是 
.Identity.PrincipalId
(基本上是在 
.PrincipalId
 下具有属性 
.Identity
 的嵌套对象)。因此,您实际上因引用对象中不存在的成员而得到 
null
,从而导致 az CLI 出现错误。

所以,问题的解决方法:

$accessConnectorObjectId = $accessConnector.IdentityPrincipalId
除此之外,我建议您在这里使用

New-AzRoleAssignment

,它会给您一个更好的错误消息,这将有助于更快地调试这个问题:

$newAzRoleAssignmentSplat = @{ ObjectId = $accessConnectorObjectId RoleDefinitionName = 'Storage Blob Data Contributor' Scope = "/subscriptions/$subscriptionId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$saName" } New-AzRoleAssignment @newAzRoleAssignmentSplat
    
© www.soinside.com 2019 - 2024. All rights reserved.