我尝试使用此脚本将 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:
错误:参数--受让人:预期的一个 争论
我该如何解决这个问题?
该问题是由
$accessConnector.Identity.PrincipalId
中的拼写错误引起的,查看 Get-AzDatabricksAccessConnector
文档中的 Outputs,我们可以看到 cmdlet 输出一个实现
IAccessConnector
Interface的对象,并且,如果我们查看对于该接口,我们可以看到属性名称是
.IdentityPrincipalId
而不是 .Identity.PrincipalId
(基本上是在
.PrincipalId
下具有属性
.Identity
的嵌套对象)。因此,您实际上因引用对象中不存在的成员而得到
null
,从而导致 az CLI 出现错误。所以,问题的解决方法:
$accessConnectorObjectId = $accessConnector.IdentityPrincipalId
除此之外,我建议您在这里使用,它会给您一个更好的错误消息,这将有助于更快地调试这个问题:
$newAzRoleAssignmentSplat = @{
ObjectId = $accessConnectorObjectId
RoleDefinitionName = 'Storage Blob Data Contributor'
Scope = "/subscriptions/$subscriptionId/resourceGroups/$rgName/providers/Microsoft.Storage/storageAccounts/$saName"
}
New-AzRoleAssignment @newAzRoleAssignmentSplat