我的目标是使应用程序成为存储帐户的“庞大存储贡献者”。 为此,我尝试授予应用程序角色,但不能-尝试时遇到错误。
我正在尝试使用以下命令:
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"
有什么想法吗?
答案 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
PS:您还可以通过以下方式获取存储帐户ID:
$stracc = Get-AzStorageAccount -ResourceGroupName <resourecegroupname> -Name <Storage Account name>
$stracc.Id
答案 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