Экспорт всех подписок RBAC с упором на группы Azure AD и разрешение назначенных пользователей

Каков наилучший способ экспортировать все подписки с их RBAC, но с упором на группы AAD и разрешение членства пользователей? Кажется, я потерялся в операторе if.

Get-AzSubscription | 

foreach-object {

    Write-Verbose -Message "Changing to Subscription $($_.Name)" -Verbose

    Set-AzContext -TenantId $_.TenantId -SubscriptionId $_.Id -Force
    $Name     = $_.Name
    $TenantId = $_.TenantId
    $SubId    = $_.SubscriptionId  

        Get-AzRoleAssignment -IncludeClassicAdministrators | Select-Object RoleDefinitionName,DisplayName,SignInName,ObjectType,Scope,
    @{name="TenantId";expression = {$TenantId}},@{name="SubscriptionName";expression = {$Name}},@{name="SubscriptionId";expression = {$SubId}
    } 

        if(Get-AzRoleAssignment.ObjectType -eq "Group") 
        {
        Get-AzADGroup -ObjectId.Id  | Select-Object DisplayName,SignInName,ObjectType,Scope | foreach-object { Get-AzADUser | Select-Object UserPrincipalName,ObjectType,Id
            }
        }
        else { continue }
    } 

-OutVariable ra
$ra | Export-Csv -Path .\Export-SubAzRolesGroups-$Name.csv -NoTypeInformation
}

person zibs    schedule 18.05.2020    source источник


Ответы (1)


Самый простой/быстрый способ, вероятно, состоял бы в том, чтобы использовать powershell с модулем az, написать небольшой скрипт, получить все подписки, к которым у этой учетной записи есть доступ (надеюсь, используя какого-то пользователя с широкими правами на чтение), а затем получить все назначения ролей для каждой подписки. , и делайте все, что вам нужно, чтобы получить группы и участников для каждой группы. записать все это в файлы.

команды powershell, которые вы хотите изучить: get-azsubscription get-azroleassignment get-azadgroup get-azaduser

другие варианты включают в себя то, что вы можете использовать Rest API диспетчера ресурсов azure или какую-либо другую библиотеку azurerm для написания приложения, которое делает то же самое.

Надеюсь, это поможет вам начать.

ОБНОВЛЕНИЕ

Get-AzSubscription | 
foreach-object {
    Write-Verbose -Message "Changing to Subscription $($_.Name)" -Verbose

    Set-AzContext -TenantId $_.TenantId -SubscriptionId $_.Id -Force
    $Name     = $_.Name
    $TenantId = $_.TenantId
    $SubId    = $_.SubscriptionId  

    Get-AzRoleAssignment -IncludeClassicAdministrators | Select-Object RoleDefinitionName,DisplayName,SignInName,ObjectId,ObjectType,Scope,
    @{name="TenantId";expression = {$TenantId}},@{name="SubscriptionName";expression = {$Name}},@{name="SubscriptionId";expression = {$SubId}} | 
    foreach-object{ if($_.ObjectType -eq "Group") 
        {
            $_ | ft
            $group = Get-AzADGroup -ObjectId $_.ObjectId
            $group | Select-Object DisplayName,SignInName,ObjectType,Scope | ft
            $group | Get-azadgroupmember | Select-Object UserPrincipalName,ObjectType,Id | ft
        }
        else { $_ | ft}
    }
} -OutVariable ra
$ra | out-file .\Export-SubAzRolesGroups-$Name.csv
person alphaz18    schedule 18.05.2020
comment
Не могли бы вы объяснить, что вы пытаетесь сделать с длинным оператором get-azroleasignment, а затем с оператором if после этого? я не уверен, что понимаю, что вы пытаетесь там сделать, вы пытаетесь распечатать все назначения ролей rbac для всех областей? например для каждого приложения и все? или вы просто пытаетесь получить rbac для уровня подписки? затем, когда вы столкнетесь с записью rbac с группой в ней, чтобы еще больше разбить группу на ее пользователей? - person alphaz18; 19.05.2020
comment
Я немного отредактировал ваш сценарий, он не идеален, но должен приблизить вас к тому, что вы хотите. - person alphaz18; 19.05.2020
comment
Я пытался экспортировать все RBAC для каждой подписки и расширить членство в группе, чтобы иметь полную видимость, а не запускать отдельный отчет для каждой группы AAD. - person zibs; 19.05.2020
comment
Я просто подумал, будет ли это быстрее (если возможно) при запуске Azure Graph с KQL? Кто-нибудь пробовал - person zibs; 19.05.2020
comment
я не верю, что вы можете получить назначения ролей из обозревателя графа ресурсов Azure с помощью kql, так что это может быть проблемой с этим подходом - person alphaz18; 19.05.2020
comment
Я пытался запустить его с -out-file, но форматирование кажется сумасшедшим. Как только я поставил Export-csv, я получил только одну подписку. - person zibs; 19.05.2020
comment
потому что там есть разные таблицы/форматы, потому что таблица назначения ролей отличается от таблицы подчиненных, которая отличается от таблиц групп и пользователей, поэтому export-csv запутается, поскольку ожидает только 1 формат. я не уверен, как вы планируете форматировать данные, чтобы все они были одинаковыми, поэтому я просто выгружаю файл - person alphaz18; 19.05.2020
comment
RoleDefinitionName, DisplayName (группа или пользователь), SignInName, Group-> User (ObjectType), Scope, TenantId, SubscriptionName, SubscriptionId Каждая итерация должна выполняться для пользователей как исходный сценарий, но группы должны быть расширены, как с вложенными группами, я не уверен, что это смысл? - person zibs; 20.05.2020
comment
Я полностью понимаю, что вы имеете в виду, но с точки зрения CSV я не знаю, как это вообще возможно, потому что формат CSV состоит из 1 набора столбцов заголовков, а затем данных, соответствующих этому формату. например, идентификатор подписки, имя подписки. затем в строках данных должно отображаться, скажем, 123123-123123, подписка 1. Следующая строка в csv не сможет показать, скажем, определение роли, поскольку формат будет другим. должны быть разные поля, поэтому это должен быть какой-то выходной файл, отформатированный так, как вы хотите. - person alphaz18; 20.05.2020