Microsoft Graph PowerShell을 사용하여 Azure AD Enterprise Applications 권한 관리

최근에 저는 이런 질문을 받았습니다.

Is it supported to revoke permissions (selectively) for an enterprise application?



이 블로그 게시물은 엔터프라이즈 애플리케이션 권한을 관리하는 방법을 보여줍니다. Azure Portal UI는 이러한 작업을 허용하지 않으므로 일부 스크립팅에 의존해야 합니다. 따라서 이 블로그 게시물입니다.

엔터프라이즈 애플리케이션이란 무엇입니까?



시간을 절약하기 위해 중 하나에서 스 니펫을 가져옵니다.

엔터프라이즈 애플리케이션의 권한을 나열하려면



주어진 서비스 응용 프로그램에 대해 부여된 권한 목록을 가져오려면 script posted to my GitHub Gist 을 사용할 수 있습니다. 다음은 예제 출력입니다.

엔터프라이즈 애플리케이션의 기존 권한을 취소하려면



Waldo 앱을 예로 들어 보겠습니다. 다음은 Waldo 앱의 엔터프라이즈 애플리케이션입니다. 이 서비스 주체의 개체 ID를 기록해 둡니다.

그런 다음 이 앱에 부여된 권한을 봅니다. 다음 두 탭에서 권한을 확인할 수 있습니다.
  • 관리자 동의 및
  • 사용자 동의.

    Waldo 앱에 대한 권한 부여를 받으려면 해당 개체 ID로 cmdlet 아래를 실행합니다.

  • Get-MgServicePrincipalOauth2PermissionGrant -ServicePrincipalId 090beef1-f5b6-4f35-9326-6d8596e42942
    

    출력의 ConsentType 열은 관리자 동의(AllPrincipals) 또는 사용자 동의(Principal) 권한인지 여부를 나타냅니다.

    모든 권한 취소



    아래 cmdlet을 사용하고 출력에서 ​​ID 값을 GrantId로 전달하여 모든 권한을 완전히 제거할 수 있습니다.

    Remove-MgOauth2PermissionGrant -OAuth2PermissionGrantId 8e4LCbb1NU-TJm2FluQpQjqF4W-UGkRLtzPexGZThns
    


    권한을 선택적으로 취소



    권한(일명 범위)을 선택적으로 제거하기 위해. 다음은 예입니다. "User.Read"및 "Directory.Read.All"범위를 제거하지만 다른 범위는 유지하고 싶다고 가정해 보겠습니다. 제거할 범위에 대한 배열을 만듭니다.

    $permissionsToRemove = @("User.Read", "Directory.Read.All")
    


    개체 ID를 사용하여 권한을 얻습니다.

    $grant = Get-MgServicePrincipalOauth2PermissionGrant -ServicePrincipalId 090beef1-f5b6-4f35-9326-6d8596e42942
    $grant.Scope
    


    다음은 이미 부여된 범위의 샘플 출력입니다.

    Place.Read.All offline_access User.Read User.ReadBasic.All User.Read.All Directory.Read.All Calendars.ReadWrite openid ChatMessage.Send Chat.ReadBasic Chat.Create



    원치 않는 범위를 제거하여 새로운 범위 배열을 만듭니다.

    $permissionsToRemove = $permissionsToRemove | % { $_.ToLower() }
    $newPermissions = $grant.Scope.Split(" ") | ? { -not $permissionsToRemove.Contains($_.ToLower()) }
    $newScope = $newPermissions -join " "
    


    마지막으로 부여 ID를 사용하여 새로운 범위로 부여를 업데이트합니다.

    Update-MgOauth2PermissionGrant -OAuth2PermissionGrantId $grant.Id -Scope $newScope
    


    다음은 위 cmdlet의 샘플 실행입니다.


    2개의 범위를 제거한 후 현재 권한은 다음과 같습니다.

    엔터프라이즈 애플리케이션에 권한을 부여하려면



    다음은 엔터프라이즈 애플리케이션에 Microsoft Graph 권한을 추가하는 방법을 보여주는 샘플 스크립트입니다.

    # The object id of the enterprise application 
    $ObjectId = "b29d7573-2f76-49b6-b660-cc85b34fe516"
    # Add the correct Graph scope to grant (e.g. User.Read)
    $graphScope = "Sites.Selected"
    
    Connect-MgGraph -Scope AppRoleAssignment.ReadWrite.All
    
    # Get the Microsoft Graph service principal
    $graph = Get-MgServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
    
    # Get the graph app role for the scope that we want to grant
    $graphAppRole = $graph.AppRoles | ? Value -eq $graphScope
    
    # Prepare the app role assignment
    $appRoleAssignment = @{
        "principalId" = $ObjectId
        "resourceId"  = $graph.Id
        "appRoleId"   = $graphAppRole.Id
    }
    
    # Grant the app role
    New-MgServicePrincipalAppRoleAssignment -ServicePrincipalId $ObjectID -BodyParameter $appRoleAssignment | Format-List
    
    


    위의 스크립트는 특권 ​​권한인 AppRoleAssignment.ReadWrite.All을 사용합니다. 특권 권한이 필요하지 않은 앱 권한 부여 동의 정책을 사용하여 애플리케이션 권한을 부여할 수 있습니다. 다음은 수행 방법에 대한 세부 정보가 포함된 blog post from Sahil Malik입니다.

    좋은 웹페이지 즐겨찾기