Как добавлять или удалять делегированные согласованные разрешения с помощью 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 на идентификатор приложения, которым вы хотите управлять.
    • Измените массивы $AddPermissions и $RemovePermissions так, чтобы они включали разрешения, которые вы хотите добавить или удалить.
  3. Разрешения пользователя и разрешения приложения:
    • Если вы изменяете разрешения для конкретного пользователя, раскомментируйте и задайте $UserId равным адресу электронной почты пользователя.
    • Если вы управляете разрешениями для всех пользователей, оставьте $UserId закомментированной.
  4. Тестирование скрипта:
    • Перед запуском скрипта в рабочей среде протестируйте его в непродуктивной среде, чтобы убедиться, что он работает как ожидается.

Примеры использования

  • Добавление разрешений: Добавьте User.Read , чтобы приложение могло получить доступ к основной информации профиля пользователя.
  • Удаление разрешений: Удалите Mail.Send , чтобы приложение не могло отправлять электронные письма от имени пользователей.
  • Детальный контроль: Объедините добавление и удаление разрешений в одном скрипте для эффективного управления.

Оставить комментарий