В этой статье мы обсудим, как получить каталог приложений, зарегистрированных в AAD. Для этого мы можем использовать Powershell с модулем AzureADPreview.
Есть два способа получить информацию о приложениях — через объект Service Principal (SPN), который создается для почти всех приложений при регистрации или через командлет Get-AzureADApplication. Первый способ использует командлет Get-AzureADServicePrincipal.
Обратите внимание, что эти два командлета используются разные ObjectID: Get-AzureADServicePrincipal использует ObjectID принципиала, а Get-AzureADApplication — сам объект приложения.
При поиске по SPN вам доступны почти все те же атрибуты, что и по самому приложению, но также еще доступны теги. Именно по тегам можно понять, какой тип приложения используется.
Напомню, что есть приложения SAML SSO (тег WindowsAzureActiveDirectoryCustomSingleSignOnApplication), WebApp/Web API (тег WindowsAzureActiveDirectoryIntegratedApp), Native Apps (тег WindowsAzureActiveDirectoryIntegratedApp) и Azure Application Proxy регистрации (WindowsAzureActiveDirectoryOnPremApp). Однако, некоторые типы приложений могут иметь несколько тегов сразу.
Пример получения WebApps и Native Apps:
$modernapps = Get-AzureADServicePrincipal -Top 1000 | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryIntegratedApp" -and $_.Tags -notcontains "WindowsAzureActiveDirectoryCustomSingleSignOnApplication" -and $_.Tags -notcontains "WindowsAzureActiveDirectoryOnPremApp"} $webapps = @() $native = @() foreach ($i in $modernapps) { $appid = $i.appid if ( $(Get-AzureADApplication -Filter "appid eq '$appid'" | select -ExpandProperty PublicClient) -eq $false) { $webapps += $i } else { $native += $i } }
Теперь получим количество приложении SSO, использующих SAML.
(Get-AzureADServicePrincipal -All:$True | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryCustomSingleSignOnApplication"}).count
И публикации Azure Application Proxy:
(Get-AzureADServicePrincipal -All:$True | where-object {$_.Tags -Contains "WindowsAzureActiveDirectoryOnPremApp"}).count
Теперь давайте получим список пользователь и AD групп, которые заасайнены на SAML приложения. Вместе с этим создадим кастомный объект, который будет в сбееб содержать полезную информацию о приложении, такую как URL, роли, AppID, срок истечения сертификата. для вывода объекта в Excel будем использовать дополнительный модуль ImportExcel.
$ssoapps = Get-AzureADServicePrincipal -All:$True | where {$_.Tags -contains "WindowsAzureActiveDirectoryCustomSingleSignOnApplication"} | sort DisplayName foreach ($app in $ssoapps) { $dispname = $app.DisplayName "*** Processing: " + $dispname $appobj = Get-AzureADApplication -Filter "AppID eq '$($app.AppID)'" $Groupclaims = $appobj.GroupMembershipClaims $IdentifierUris = ($appobj.IdentifierUris -join "; ") $replyuris = ($appobj.ReplyUrls -join "; ") $samlurls = ($appobj.SamlMetadataUrl -join "; ") $keys = $app.PasswordCredentials.EndDate $approles = ($app.Approles.DisplayName -join "; ") try { $assignments = (Get-AzureADServiceAppRoleAssignment -ObjectId $app.ObjectId | select -ExpandProperty PrincipalDisplayName) -join "; " } catch { $assignments = "" } $exportobj = [PSCustomObject][Ordered]@{ DisplayName = $dispname AppID = $app.AppID ObjectID = $appobj.ObjectID "Certificate expiration" = $keys "App roles" = $approles "Users and Groups" = $assignments "Metadata URL" = $samlurls "Identifier URLs" = $IdentifierUris "Reply URLs" = $replyuris } $exportobj | Export-Excel -Path "c:\temp\AAD Inventory.xlsx" -WorksheetName "SAML SSO" -Append -TitleBold -AutoSize }