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
}
}
관리자를 위한 주요 참고 사항
- 필수 조건:
- 최신 버전을 설치하세요: Microsoft Graph PowerShell SDK.
- 위임된 권한을 관리하는 데 필요한 권한이 있는지 확인하세요(
Directory.Read.All및DelegatedPermissionGrant.ReadWrite.All).
- 스크립트 사용자 지정:
- 자리 표시자
YOUR_APP_ID를 관리할 앱의 애플리케이션 ID로 바꾸세요. - 다음
$AddPermissions및$RemovePermissions배열을 수정하여 추가하거나 제거하려는 권한을 포함하세요.
- 자리 표시자
- 사용자 권한과 애플리케이션 권한:
- 특정 사용자의 권한을 수정하려면 주석을 해제하고
$UserId을(를) 해당 사용자의 이메일 주소로 설정하세요. - 모든 사용자의 권한을 관리하는 경우
$UserId을(를) 주석 처리된 상태로 두세요.
- 특정 사용자의 권한을 수정하려면 주석을 해제하고
- 스크립트 테스트:
- 프로덕션에서 스크립트를 실행하기 전에 비프로덕션 환경에서 테스트해 예상대로 동작하는지 확인하세요.
사용 사례 예시
- 권한 추가: 다음 권한
User.Read를 추가하면 앱이 기본 사용자 프로필 정보에 액세스할 수 있습니다. - 권한 제거: 다음 권한
Mail.Send을(를) 제거하면 앱이 사용자를 대신해 이메일을 보내는 것을 막을 수 있습니다. - 세분화된 제어: 권한 추가와 제거를 하나의 스크립트로 결합하면 효율적으로 관리할 수 있습니다.