PowerShell을 사용해 위임된 동의 권한을 추가하거나 제거하는 방법

Microsoft 환경에서 애플리케이션의 위임된 권한을 관리하는 것은 관리자에게 중요한 작업입니다. 이 가이드에서는 Microsoft Graph PowerShell 스크립트 를 사용해 위임된 권한을 더 세밀하게 제어하며 추가하거나 제거하는 방법을 설명합니다.


위임된 권한을 수정해야 하는 이유

위임된 권한을 사용하면 애플리케이션이 로그인한 사용자를 대신해 동작할 수 있습니다. 하지만 다음과 같은 경우에는 이러한 권한을 조정해야 할 수 있습니다.

  • 보안상 불필요하거나 과도한 권한을 제거하기 위해.
  • 애플리케이션 기능에 필요한 새 권한을 추가하기 위해.
  • API 액세스 문제를 해결하기 위해.

참고: 여기서 제공하는 스크립트는 권한을 세밀하게 제어할 수 있어 고급 시나리오에 이상적입니다.


PowerShell 스크립트: 위임된 권한 추가 또는 제거

위임된 권한을 관리하는 전체 PowerShell 스크립트는 다음과 같습니다.

구성 섹션

# CONFIGURATION

# Application ID of app
$appId= "YOUR_APP_ID"

# Uncomment below line if you want to modify user consent
# $UserId = [email protected]

# Microsoft Graph App ID (DO NOT CHANGE)
# AAD Graph App Id: "00000002-0000-0000-c000-000000000000"
# MS Graph App Id: "00000003-0000-0000-c000-000000000000"
$resourceId= "00000003-0000-0000-c000-000000000000"

# Delegated Permissions you want on this service principal
$AddPermissions = @(
    "User.Read"
)

$RemovePermissions = @(
    "Mail.Send",
    "Group.ReadWrite.All"
)

주 스크립트

# Connect to Microsoft Graph PowerShell
Connect-MgGraph -Scopes "Directory.Read.All DelegatedPermissionGrant.ReadWrite.All"

$appPrincipal = Get-MgServicePrincipal -Filter "appId eq '$($appId)'"
$ResourceServicePrincipal = Get-MgServicePrincipal -Filter "appId eq '$($resourceId)'"
$UserPrincipal = Get-MgUser -UserId $UserId

# Find grant if one already exists
if($UserId) {
    $grants = Get-MgOauth2PermissionGrant -Filter "clientId eq '$($appPrincipal.id)' and resourceId eq '$($ResourceServicePrincipal.id)' and principalId eq '$($UserPrincipal.id)'"
} else {
    $grants = Get-MgOauth2PermissionGrant -Filter "clientId eq '$($appPrincipal.id)' and resourceId eq '$($ResourceServicePrincipal.id)'"
}

# Update existing grant
$RemovePermissions += $AddPermissions
foreach($grant in $grants) {
    # Remove permissions from grant
    foreach($permission in $RemovePermissions) {
        Write-Host "Removing: $($permission)"
        # Remove permission from grant
        $grant.scope = $grant.scope.Replace($permission, "")
    }

    # Add permissions to grant
    foreach($permission in $AddPermissions) {
        $grant.scope += $permission + " "
    }

    # Update existing Grant
    Update-MgOauth2PermissionGrant -Oauth2PermissionGrantId $grant.id -Scope $grant.scope.Trim()
}

# Create grant if none exists
if(!$grants) {
    $ScopeString = $AddPermissions -join " "
    if($UserId) {
        New-MgOauth2PermissionGrant -ClientId $appPrincipal.id -ResourceId $ResourceServicePrincipal.id -Scope $ScopeString -ConsentType Principal -PrincipalId $UserPrincipal.id
    } else {
        New-MgOauth2PermissionGrant -ClientId $appPrincipal.id -ResourceId $ResourceServicePrincipal.id -Scope $ScopeString -ConsentType AllPrincipals
    }
}

관리자를 위한 주요 참고 사항

  1. 필수 조건:
    • 최신 버전을 설치하세요: Microsoft Graph PowerShell SDK.
    • 위임된 권한을 관리하는 데 필요한 권한이 있는지 확인하세요(Directory.Read.All 및 DelegatedPermissionGrant.ReadWrite.All).
  2. 스크립트 사용자 지정:
    • 자리 표시자 YOUR_APP_ID 를 관리할 앱의 애플리케이션 ID로 바꾸세요.
    • 다음 $AddPermissions 및 $RemovePermissions 배열을 수정하여 추가하거나 제거하려는 권한을 포함하세요.
  3. 사용자 권한과 애플리케이션 권한:
    • 특정 사용자의 권한을 수정하려면 주석을 해제하고 $UserId 을(를) 해당 사용자의 이메일 주소로 설정하세요.
    • 모든 사용자의 권한을 관리하는 경우 $UserId 을(를) 주석 처리된 상태로 두세요.
  4. 스크립트 테스트:
    • 프로덕션에서 스크립트를 실행하기 전에 비프로덕션 환경에서 테스트해 예상대로 동작하는지 확인하세요.

사용 사례 예시

  • 권한 추가: 다음 권한 User.Read 를 추가하면 앱이 기본 사용자 프로필 정보에 액세스할 수 있습니다.
  • 권한 제거: 다음 권한 Mail.Send 을(를) 제거하면 앱이 사용자를 대신해 이메일을 보내는 것을 막을 수 있습니다.
  • 세분화된 제어: 권한 추가와 제거를 하나의 스크립트로 결합하면 효율적으로 관리할 수 있습니다.

댓글 남기기