Azure AD - связь между основной и гостевой учетными записями разных клиентов - PullRequest
1 голос
/ 21 октября 2019

Мы боремся с приведенным ниже сценарием использования в строго регламентированном контексте, в котором аудиты проводятся во всех Azure AD. Любая помощь приветствуется.

Контекст:

  • 1 основной клиент Azure AD в компании, являющийся арендатором O365 (помеченный как «пользовательский арендатор»)
  • Несколько других клиентов Azure AD в компании, которые являются арендаторами «приложений»:
    • В каждом отделе / ​​бизнес-подразделении имеется собственный клиент приложения (в целях изоляции) для управления своими ресурсами Azure. (одна или несколько подписок)
    • Некоторым пользователям из пользователей-арендаторов (O365) приглашаются некоторые приложения-арендаторы (Azure) в качестве гостевых учетных записей

Вариант использования для решения:

  • Сотрудник покидает компанию и исключается из арендатора «пользователей» (O365)
  • Компания должна удалить этого сотрудника из всехарендаторы «приложений», к которым он / она был добавлен в качестве гостевой учетной записи
  • Существует ли способ автоматически / программно идентифицировать и удалить все учетные записи этого сотрудника в другом AAD арендаторы на основе арендатора O365?
  • Существует ли публичная «связь» между учетными записями AAD (основной> гостевой), которую мы можем использовать для идентификации / удаления пользователей AAD?
  • Обходные пути? Лучшие практики?

1 Ответ

0 голосов
/ 30 октября 2019

На основании вашего описания вы можете зарегистрировать мультитенантное приложение в своем основном арендаторе: enter image description here После создания приложения создайте для него секрет и запишите его идентификатор приложения и секрет , мы будем использовать его для подключения к вашим арендаторам позже: enter image description here

Предоставьте «User.ReadWrite.All»разрешение Microsoft Graph API для этого приложения, так как мы будем называть Microsoft Graph API для удаления пользователей: enter image description here Не забудьте нажать кнопку «Предоставить согласие администратора для вашего арендатора», чтобы завершить процесс назначения.

разрешение администратора других арендаторов дать согласие на использование этого приложения по ссылке:

https://login.microsoftonline.com/<your tenant ID>/adminConsent?client_id=<your multi-tenant app ID>

enter image description here, и это приложение будет добавлено к другим арендаторам в качестве принципа обслуживания:enter image description here, чтобы мы могли использовать это приложение для выполнения некоторых действий со всеми арендаторами.

Просто запустите приведенный ниже Powershell, чтобы удалить пользователя из всех ваших арендаторов, который я протестировал на моей стороне. и это работает для меня. Кстати, пожалуйста, удалите все роли каталога перед его запуском, иначе вы получите ошибку 403, если пользователю назначены некоторые роли администратора.

#config your multi tenant app id and secret here.
$appid = "<YOUR MULTI TENANT APP ID>"
$secret = "<YOUR MULTI TENANT APP SECRET>"
$userEmailaddress = "<EMAIL ADDRESS OF THE USER YOU WANT TO DELETE>"

#config all your tenents here
$tenants = "<TENANT 1 ID/NAME>","TENANT 2 ID/NAME",...

#check and delete user by email address in all tenants 
foreach($tenant in $tenants){

    #get token to call microsoft graph api to delete users 
    $body=@{
        "grant_type"="client_credentials";
        "resource"="https://graph.microsoft.com";
        "client_id"=$appid;
        "client_secret" = $secret
    }
 
    $result=Invoke-RestMethod -Uri "https://login.windows.net/$tenant/oauth2/token" -Method POST -Body $body 


    #get user object from tenant 
    $userguestPrefix = $userEmailaddress.Replace('@','_')
    $searchURL = "https://graph.microsoft.com/v1.0/users?`$filter=startswith(userPrincipalName,'$userEmailaddress') or startswith(userPrincipalName,'$userguestPrefix')"

    $searchUserResult = Invoke-RestMethod -Uri $searchURL -Method GET -Headers @{'Authorization'='Bearer '+$result.access_token}

    #remove the user from tenant
    if($searchUserResult.value.Length -eq 1){
        echo "remove:"$searchUserResult.value[0].displayName" from tenant : $tenant"
        $removeURL = "https://graph.microsoft.com/v1.0/users/" + $searchUserResult.value[0].id
        Invoke-RestMethod -Uri $removeURL -Method DELETE -Headers @{'Authorization'='Bearer '+$result.access_token}
    }

}

Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...