在存储帐户中授予 "storage blob data contributor" 的应用程序角色

Granting application role of "storage blob data contributor" in storage account

我的目标是让应用成为 "blob storage contributor" 存储帐户 。 为此,我尝试授予应用程序角色,但不能 - 尝试时遇到错误。

我正在尝试使用此命令来完成:

New-AzureRmRoleAssignment -ApplicationId $appId -ResourceGroupName $resourceGroupName -ResourceName $resourceName -ResourceType 'Microsoft.Storage/storageAccounts' -RoleDefinitionName 'Storage Blob Data Contributor'

我收到一个错误:

New-AzureRmRoleAssignment : The provided information does not map to an AD object id.

有谁知道可能是什么问题?我检查了所有参数,对象 ID 肯定是正确的(尝试了 objectId 和 ApplicationId,但仍然无法正常工作)

当我用下面的命令做类似的事情来授予组角色时,它成功了。

New-AzureRmRoleAssignment -ObjectId $groupObjId -ResourceGroupName $resourceGroupName -ResourceName $resourceName -RoleDefinitionName 'Reader' -ResourceType "Microsoft.Storage/storageAccounts"

有什么想法吗?

我正在使用 AZ 模块,但命令应该与 RM 模块相同

$contributor = Get-AzRoleDefinition "Contributor"
$contributor
$scope = "/subscriptions/<SubscriptionID>/resourceGroups/Demo/providers/Microsoft.Storage/storageAccounts/<Storage Account name>"
New-AzRoleAssignment -ApplicationId <appicationID> -RoleDefinitionName $contributor.Name -Scope $scope

PS:您还可以通过以下方式获取范围的存储帐户 ID;

$stracc = Get-AzStorageAccount -ResourceGroupName <resourecegroupname> -Name <Storage Account name>
$stracc.Id

这是完整的功能。我使用的应用程序是 ADF。在 ADF 属性(门户)中,您可以看到“托管身份应用程序 ID”,这是我们在此处提供的应用程序 ID。

[CmdletBinding()]
param (
    $rgName,
    $storageAccountName,
    $adfName
)

#./adls-SetAccessForAdf.ps1 -rgName "myRG" -storageAccountName "mystorage" -adfName "myADF" 

$contributor = Get-AzRoleDefinition "Storage Blob Data Contributor"
$contributor
$stracc = Get-AzStorageAccount -ResourceGroupName $rgName -Name $storageAccountName
$scope= $stracc.Id

Write-host "scope = " $scope


$objectId=(Get-AzDataFactoryV2 -ResourceGroupName $rgName -Name $adfName).Identity.PrincipalId

$appId = (Get-AzADServicePrincipal -ObjectId $objectId).ApplicationId

Write-host "object ID =" $objectId
Write-host "App ID =" $appId

New-AzRoleAssignment -ApplicationId $appId -RoleDefinitionName $contributor.Name -Scope $scope