在存储帐户中授予“存储Blob数据贡献者”应用程序角色

时间:2019-08-23 21:48:20

标签: azure powershell storage rbac

我的目标是使应用程序成为存储帐户的“庞大存储贡献者”。 为此,我尝试授予应用程序角色,但不能-尝试时遇到错误。

我正在尝试使用以下命令:

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"

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我正在使用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

Image

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

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

Image 2

答案 1 :(得分:0)

这是完整功能。我使用的应用程序是ADF。在ADF属性(门户)中,您可以看到“ Managed Identity Application 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