Я пытаюсь подключиться к Microsoft Graph, используя удостоверение, управляемое пользователем (UMI). Я создал управляемое удостоверение через портал Azure, но теперь мне нужно назначить этому удостоверению такие разрешения, как Users.Read.All и Group.Read.All, с помощью PowerShell, чтобы оно могло получить доступ к информации о пользователях и группах.
Я нашел сценарий, использующий модуль AzureAD, но, поскольку он скоро устареет, я хочу перейти на модуль Microsoft Graph PowerShell, где мне понадобится помощь с эквивалентными командами.
Вот старый скрипт, который я нашел:
Connect-AzureAD
$TenantID = "TenantID"
$GraphAppId = "00000003-0000-0000-c000-000000000000"
$NameOfMSI = "my-managed-identity"
$Permissions = @(
"Group.Read.All",
"User.Read.All"
)
$MSI = (Get-AzureADServicePrincipal -Filter "displayName eq '$NameOfMSI'")
Start-Sleep -Seconds 10
$GraphServicePrincipal = Get-AzureADServicePrincipal -Filter "appId eq
'$GraphAppId'"
foreach ($PermissionName in $Permissions) {
$AppRole = $GraphServicePrincipal.AppRoles | Where-Object {
$_.Value -eq $PermissionName -and $_.AllowedMemberTypes -contains
"Application" }
New-AzureAdServiceAppRoleAssignment -ObjectId $MSI.ObjectId
-PrincipalId $MSI.ObjectId -ResourceId $GraphServicePrincipal.ObjectId
-Id $AppRole.Id
}
Может ли кто-нибудь предоставить руководство или сценарий для достижения этой цели с помощью модуля Microsoft Graph PowerShell?
Назначение ролей вашему Управляемому удостоверению с помощью Graph API будет выглядеть следующим образом. Вызовы в этом примере следующие:
Если вы хотите использовать командлеты из модуля Microsoft.Graph.Applications
вместо прямых вызовов API с помощью Invoke-MgGraphRequest , вам нужно использовать командлеты Get-MgServicePrincipal и New-MgServicePrincipalAppRoleAssignment.
Connect-MgGraph ....
$Permissions = @(
'Group.Read.All',
'User.Read.All'
)
$NameOfMSI = 'my-managed-identity'
$msi = Invoke-MgGraphRequest GET "v1.0/servicePrincipals?`$filter=displayName eq '$NameOfMSI'"
$msiId = $msi.value[0]['id']
$GraphAppId = '00000003-0000-0000-c000-000000000000'
$GraphServicePrincipal = Invoke-MgGraphRequest GET "v1.0/servicePrincipals(appId='$GraphAppId')"
foreach ($role in $GraphServicePrincipal['appRoles']) {
if ($role['value'] -in $Permissions -and 'Application' -in $role['allowedMemberTypes']) {
Invoke-MgGraphRequest POST "v1.0/servicePrincipals/$msiId/appRoleAssignments" -Body @{
principalId = $msiId
resourceId = $GraphAppId
appRoleId = $role['id']
}
}
}