Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El servicio Graph API de Microsoft Entra ID (anteriormente Azure Active Directory o Azure AD) se va a retirar. Esta retirada forma parte de un esfuerzo más amplio para simplificar la plataforma de identificación de Microsoft Entra y mejorar la experiencia del desarrollador de microsoft Entra ID.
Pasos de mitigación
La retirada de Graph API afecta a todos los clientes de Azure Stack Hub que usan Entra ID como proveedor de identidades y requiere que ejecute el script incluido en este artículo para todas las aplicaciones afectadas. Si tiene aplicaciones que necesitan acceso continuo a las API de Graph, el script establece una marca que configura estas aplicaciones para una extensión que permite que estas aplicaciones específicas sigan llamando a Graph API heredada.
El script de PowerShell proporcionado en este artículo establece una marca para cada aplicación para configurar la extensión de Graph API para cada proveedor de identidades de Entra ID de Azure Stack Hub.
Para asegurarse de que los entornos de Azure Stack Hub que usan Entra ID como proveedor de identidades siguen funcionando, debe ejecutar este script a finales de febrero de 2025.
Nota:
Si retrasa la adición de esta marca más allá de febrero de 2025, se producirá un error en la autenticación. Después, puede ejecutar este script para asegurarse de que azure Stack Hub funciona según sea necesario.
Ejecute el script.
Ejecute el siguiente script de PowerShell en el entorno de Entra ID que utiliza Azure Stack Hub como directorio principal (el principal proveedor de identidades de Azure Stack Hub), así como en el entorno de Entra ID en el cual ha registrado su sistema Azure Stack Hub. Puede ser un directorio diferente al del directorio principal. El script interactúa con Azure, por lo que no es necesario ejecutarlo en una máquina específica. Sin embargo, necesita al menos privilegios de administrador de aplicaciones en la entidad de Entra ID correspondiente para ejecutar el script.
Asegúrese de ejecutar el siguiente script con privilegios de administrador en el equipo local:
# Install the Graph modules if necessary
#Install-Module Microsoft.Graph.Authentication
#Install-Module Microsoft.Graph.Applications
$ErrorActionPreference='Stop'
Import-Module Microsoft.Graph.Authentication
Import-Module Microsoft.Graph.Applications
# Target your Azure Cloud instance name; use Get-MgEnvironment to list available clouds and Add-MgEnvironment to add new ones as needed for custom private/secure clouds
$envName = 'Global'
# Repeat this flow for each of your target directory tenants
$tenantId = 'MyTenantId'
# Sign in with admin permissions to read and write all application objects
Connect-MgGraph -Environment $envName -TenantId $tenantId -Scopes Application.ReadWrite.All
# Retrieve all applications in the current directory
Write-Host "Looking-up all applications in directory '$tenantId'..."
$applications = Get-MgApplication -All -Property id, displayName, appId, identifierUris, requiredResourceAccess, authenticationBehaviors
Write-Host "Found '$($applications.Count)' total applications in directory '$tenantId'"
# Find all the unique deployment GUIDs, each one representing an Azure Stack deployment or registration in the current directory
$deploymentGuids = $applications.IdentifierUris |
Where-Object { $_ -like 'https://management.*' -or $_ -like 'https://adminmanagement.*' -or $_ -like 'https://azurebridge*' } |
ForEach-Object { "$_".Split('/')[3] } |
Select-Object -Unique
Write-Host "Found '$($deploymentGuids.Count)' total Azure Stack deployments or registrations in directory '$tenantId'"
# Find all the Azure Stack application objects for each deployment or registration
$azureStackApplications = @()
foreach ($application in $applications)
{
foreach ($deploymentGuid in $deploymentGuids)
{
if (($application.IdentifierUris -join '') -like "*$deploymentGuid*")
{
$azureStackApplications += $application
break
}
}
}
# Find which Azure Stack applications require access to the legacy Graph Service
$azureStackLegacyGraphApplications = $azureStackApplications |
Where-Object {
($_.RequiredResourceAccess.ResourceAppId -contains '00000002-0000-0000-c000-000000000000') -or
($_.IdentifierUris | Where-Object { $_ -like 'https://azurebridge*' }) }
# Find which of those applications need to have their authentication behaviors patched to allow access to legacy Graph
$azureStackLegacyGraphApplicationsToUpdate = $azureStackLegacyGraphApplications | Where-Object {
$oldLocationSet = $false -eq $_.AdditionalProperties.authenticationBehaviors.blockAzureADGraphAccess
$newLocationNotSet = $false -eq $_.AuthenticationBehaviors.BlockAzureAdGraphAccess
return (-not $oldLocationSet -and -not $newLocationNotSet)
}
# Update the applications that require their authentication behaviors patched to allow access to legacy Graph
Write-Host "Found '$($azureStackLegacyGraphApplicationsToUpdate.Count)' total Azure Stack applications which need permission to continue calling Legacy Microsoft Graph Service"
$count = 0
foreach ($application in $azureStackLegacyGraphApplicationsToUpdate)
{
$count++
Write-Host "$count/$($azureStackLegacyGraphApplicationsToUpdate.Count) - Updating application '$($application.DisplayName)' (appId=$($application.AppId)) (id=$($application.Id))"
Update-MgApplication -ApplicationId $application.Id -BodyParameter @{
authenticationBehaviors = @{ blockAzureADGraphAccess = $false }
}
}
El script muestra la siguiente salida de ejemplo:
Looking-up all applications in directory '<ID>'...
Found '###' total applications in directory '<ID>'
Found '1' total Azure Stack deployments in directory '<app ID>'
Found '16' total Azure Stack applications which need permission to continue calling Legacy Microsoft Graph Service
1/16 - Updating application 'Azure Stack - AKS' (appId=<app ID>) (id=<ID>)
2/16 - Updating application 'Azure Stack - Hubs' (appId=<app ID>) (id=<ID>)
3/16 - Updating application 'Azure Stack - Portal Administration' (appId=<app ID>) (id=<app>)
4/16 - Updating application 'Azure Stack - RBAC Administration' (appId=<app ID>) (id=ID)
5/16 - Updating application 'Azure Stack - Container Registry' (appId=<app ID>) (id=ID)
6/16 - Updating application 'Azure Stack - RBAC' (appId=<app ID>) (id=ID)
7/16 - Updating application 'Azure Stack - Hubs Administration' (appId=<app ID>) (id=ID)
8/16 - Updating application 'Azure Stack - Deployment Provider' (appId=<app ID>) (id=ID)
9/16 - Updating application 'Azure Stack - Deployment' (appId=<app ID>) (id=ID)
10/16 - Updating application 'Azure Stack - KeyVault' (appId=<app ID>) (id=ID)
11/16 - Updating application 'Azure Stack' (appId=<app ID>) (id=ID)
12/16 - Updating application 'Azure Stack - Administration' (appId=<app ID>) (id=ID)
13/16 - Updating application 'Azure Stack - Policy Administration' (appId=<app ID>) (id=ID)
14/16 - Updating application 'Azure Stack - Policy' (appId=<app ID>) (id=ID)
15/16 - Updating application 'Azure Stack - Portal' (appId=<app ID>) (id=ID)
16/16 - Updating application 'Azure Stack - KeyVault Administration ' (appId=<app ID>) (id=ID)
Ejecute el script una segunda vez para comprobar que todas las aplicaciones se actualizaron. El script debe devolver la salida siguiente si todas las aplicaciones se actualizaron correctamente:
Looking-up all applications in directory '<ID>'...
Found '####' total applications in directory '<ID>>'
Found '1' total Azure Stack deployments in directory '<ID>>'
Found '0' total Azure Stack applications which need permission to continue calling Legacy Microsoft Graph Service
La salida siguiente del Get-MgEnvironment comando muestra las instancias de nube predeterminadas que se incluyen al instalar el módulo Graph:
C:\> Get-MgEnvironment
Name AzureADEndpoint GraphEndpoint Type
---- --------------- ------------- ----
USGovDoD https://login.microsoftonline.us https://dod-graph.microsoft.us Built-in
Germany https://login.microsoftonline.de https://graph.microsoft.de Built-in
USGov https://login.microsoftonline.us https://graph.microsoft.us Built-in
China https://login.chinacloudapi.cn https://microsoftgraph.chinacloudapi.cn Built-in
Global https://login.microsoftonline.com https://graph.microsoft.com Built-in