Accorder et révoquer des autorisations d’API pour les identités managées

Les identités managées fournissent une identité managée automatiquement dans l’ID Microsoft Entra pour les applications à utiliser lors de la connexion aux ressources qui prennent en charge l’authentification Microsoft Entra. Vous pouvez accorder des autorisations d’API directement au principal de service d’une identité managée, ce qui élimine la nécessité de stocker les informations d’identification dans le code ou les fichiers de configuration.

Dans cet article, vous allez apprendre à accorder et révoquer des autorisations Microsoft API Graph pour les identités managées affectées par le système et affectées par l’utilisateur à l’aide de Microsoft Entra PowerShell.

Prerequisites

Accorder des autorisations d’API à une identité managée

Suivez ces étapes pour accorder à Microsoft API Graph des autorisations à votre identité managée.

  1. Se connecter à Microsoft Entra

    Pour accorder des autorisations d’API aux identités gérées, connectez-vous avec les portées Application.ReadWrite.All et AppRoleAssignment.ReadWrite.All :

    Connect-Entra -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All"
    

    Caution

    L’autorisation AppRoleAssignment.ReadWrite.All permet à une application ou un service de gérer les octrois d’autorisations et d’élever des privilèges pour n’importe quelle application, utilisateur ou groupe dans votre organisation. Accordez uniquement cette autorisation aux administrateurs approuvés.

  2. Identifier le principal du service d’identité managée

    Recherchez le principal de service qui représente votre identité managée dans Microsoft Entra ID.

    Pour les identités managées affectées par le système, utilisez le nom de la ressource Azure :

    $managedIdentityName = "MyAzureVM"
    $managedIdentitySP = Get-EntraServicePrincipal -Filter "displayName eq '$managedIdentityName' and servicePrincipalType eq 'ManagedIdentity'"
    
    if (-not $managedIdentitySP) {
        Write-Error "Managed identity service principal '$managedIdentityName' not found." -ErrorAction Stop
    }
    
    Write-Host "Found managed identity service principal:"
    Write-Host "Display Name: $($managedIdentitySP.DisplayName)"
    Write-Host "Object ID: $($managedIdentitySP.Id)"
    

    Note

    Si le filtre retourne plusieurs résultats (par exemple, lorsque plusieurs identités managées partagent le même nom d’affichage), utilisez l’ID d’objet pour identifier le principal de service correct : Get-EntraServicePrincipal -ServicePrincipalId '<object-id>'.

    Pour les identités gérées attribuées par l’utilisateur, utilisez le nom de l’identité gérée :

    $userAssignedMIName = "MyUserAssignedMI"
    $managedIdentitySP = Get-EntraServicePrincipal -Filter "displayName eq '$userAssignedMIName' and servicePrincipalType eq 'ManagedIdentity'"
    
    if (-not $managedIdentitySP) {
        Write-Error "Managed identity service principal '$userAssignedMIName' not found." -ErrorAction Stop
    }
    
  3. Obtenir le principal de service Microsoft Graph

    Récupérer le principal de service Microsoft Graph :

    $graphServicePrincipal = Get-EntraServicePrincipal -Filter "appId eq '00000003-0000-0000-c000-000000000000'"
    
  4. Identifier les autorisations d’API requises

    Recherchez les autorisations de Microsoft Graph spécifiques requises par votre identité managée :

    $appRole = $graphServicePrincipal.AppRoles | Where-Object { $_.Value -eq "User.Read.All" }
    
  5. Accorder des autorisations d’API à l’identité managée

    Accordez l’autorisation d’API à votre identité managée :

    $params = @{
        ServicePrincipalId = $managedIdentitySP.Id
        PrincipalId = $managedIdentitySP.Id
        ResourceId = $graphServicePrincipal.Id
        AppRoleId = $appRole.Id
    }
    
    $appRoleAssignment = New-EntraServicePrincipalAppRoleAssignment @params
    
  6. Vérifier les autorisations accordées

    Vérifiez que les autorisations ont été accordées avec succès :

    $assignments = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id
    Write-Host "Current app role assignments for $($managedIdentitySP.DisplayName):"
    foreach ($assignment in $assignments) {
        $resource = Get-EntraServicePrincipal -ServicePrincipalId $assignment.ResourceId
        $assignedRole = $resource.AppRoles | Where-Object { $_.Id -eq $assignment.AppRoleId }
        Write-Host "- Resource: $($resource.DisplayName)"
        Write-Host "  Permission: $($assignedRole.Value)"
    }
    

Révoquer des autorisations d’API à partir d’une identité managée

Suivez ces étapes pour révoquer les autorisations microsoft API Graph de votre identité managée.

  1. Identifier l’autorisation de suppression

    Recherchez l’attribution de rôle d’application spécifique à révoquer :

    $assignmentToRemove = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id |
        Where-Object { $_.AppRoleId -eq $appRole.Id -and $_.ResourceId -eq $graphServicePrincipal.Id }
    
  2. Supprimer l’attribution de rôle d’application

    Supprimer l’attribution de rôle de l’application à l’aide de son identifiant :

    if ($assignmentToRemove) {
        Remove-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id -AppRoleAssignmentId $assignmentToRemove.Id
        Write-Host "Successfully removed permission: $($appRole.Value)"
    }
    
  3. Vérifier que l’autorisation a été supprimée

    Vérifiez qu’aucune affectation ne reste pour l’autorisation révoquée :

    $remainingAssignments = Get-EntraServicePrincipalAppRoleAssignment -ServicePrincipalId $managedIdentitySP.Id
    if ($remainingAssignments) {
        Write-Host "Remaining permissions for $($managedIdentitySP.DisplayName):"
        foreach ($assignment in $remainingAssignments) {
            $resource = Get-EntraServicePrincipal -ServicePrincipalId $assignment.ResourceId
            $assignedRole = $resource.AppRoles | Where-Object { $_.Id -eq $assignment.AppRoleId }
            Write-Host "- $($assignedRole.Value) on $($resource.DisplayName)"
        }
    } else {
        Write-Host "No app role assignments remain for $($managedIdentitySP.DisplayName)."
    }