如何允许用户分配的托管身份(UAMI)到R / W Azure AD组? 我有一个以UMAI运行的.Net Core 3.1 Azure Function应用程序。该应用程序需要能够对Azure AD组进行读写。我的代码通过笔记本电脑上的应用程序注册服务负责人运行。在Azure中,UAMI是订阅提供者,并且与FunctionApp相关联。
这在本地和Azure中有效:
<i class="feather icon-edit-1 "></i>
在本地工作,在Azure上失败:
var azureFluentClient = AzureAuthenticator.AzureFluentClient(context._ILogger, context.ExecutionContext,context.Settings);
var resourceGroups = await azureFluentClient.ResourceGroups.ListAsync();
错误:
var azureFluentClient = AzureAuthenticator.AzureFluentClient(context._ILogger, context.ExecutionContext, context.Settings);
var groups = await azureFluentClient.AccessManagement.ActiveDirectoryGroups.GetByNameAsync("AAA1");
区别在于本地运行有一个具有 API权限的应用程序注册:Azure Active Directory图形/目录.ReadWrite.All 。我认为问题在于没有与UAMI关联的应用程序注册,因此没有办法授予权限。
答案 0 :(得分:0)
是的,用户分配的身份是与AD App无关的服务主体。
在这种情况下,如果要授予Azure AD组的R / W权限,则可以直接为其赋予管理员角色Groups administrator
。
在门户中导航至Azure Active Directory
-> Roles and administrators
->选择Groups administrator
-> Add assignments
->搜索身份名称并将其添加。
答案 1 :(得分:0)
解决方案: FunctionApp的用户分配的托管身份(UAMI)需要
请注意,UAMI将无法创建,分配,删除或管理由于所有权未明确授予许可的任何广告组。
由于AD延迟/缓存了对受管理身份的更改(更改可能要花一些时间才会出现,使我迷惑于兔子的洞),所以我花费了大量时间。我写了这个脚本来帮助确定我的FunctionApp的实际要求。运行此脚本后,我将运行FunctionApp测试方法。由于Identity每次都是新的,因此不存在缓存或延迟的实现。
Connect-AzureRmAccount -TenantId $tenantId
Connect-AzureAD -TenantId $tenantId
Set-AzureRmContext -TenantId $tenantId -SubscriptionId $subscriptionId
#Drops/recreates manged Identity
Set-AzureRmWebApp -AssignIdentity $false -ResourceGroupName "rg01" -Name "fa01"
Set-AzureRmWebApp -AssignIdentity $true -ResourceGroupName "rg01" -Name "fa01"
$current = Get-AzureRmWebApp -ResourceGroupName "rg01" -Name "fa01"
$objectId = $current.Identity.PrincipalId
#Add functionApp Identity to Contributor
$role = Get-AzureRmRoleDefinition -Name "Contributor"
New-AzureRMRoleAssignment -ObjectId $objectId -RoleDefinitionName "Contributor" -Scope "/subscriptions/{subscription guid}"
#Assign functionApp Identity to AD Role 'Directory Readers'
$roleDefinition = Get-AzureADMSRoleDefinition -Filter "displayName eq 'Directory Readers'"
$roleAssignment = New-AzureADMSRoleAssignment -RoleDefinitionId $roleDefinition.Id -PrincipalId $objectId -ResourceScope "/"
#Assign functionApp Identity to AD Group
$group = Get-AzureADGroup -Filter "DisplayName eq 'adgroup01'"
Add-AzureADGroupOwner -ObjectId $group.ObjectId -RefObjectId $objectId