Управление делегированными разрешениями приложений в средах 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на идентификатор приложения, которым вы хотите управлять. - Измените массивы
$AddPermissionsи$RemovePermissionsтак, чтобы они включали разрешения, которые вы хотите добавить или удалить.
- Замените
- Разрешения пользователя и разрешения приложения:
- Если вы изменяете разрешения для конкретного пользователя, раскомментируйте и задайте
$UserIdравным адресу электронной почты пользователя. - Если вы управляете разрешениями для всех пользователей, оставьте
$UserIdзакомментированной.
- Если вы изменяете разрешения для конкретного пользователя, раскомментируйте и задайте
- Тестирование скрипта:
- Перед запуском скрипта в рабочей среде протестируйте его в непродуктивной среде, чтобы убедиться, что он работает как ожидается.
Примеры использования
- Добавление разрешений: Добавьте
User.Read, чтобы приложение могло получить доступ к основной информации профиля пользователя. - Удаление разрешений: Удалите
Mail.Send, чтобы приложение не могло отправлять электронные письма от имени пользователей. - Детальный контроль: Объедините добавление и удаление разрешений в одном скрипте для эффективного управления.