Вопрос или проблема
Добрый день,
Я пытаюсь получить все свои подписки Azure для моего тенанта и экспортировать список всех назначений ролей в панели управления доступом (IAM).
Конечная цель – проверить все типы ролей и узнать, есть ли у каких-либо пользователей доступ без нахождения в группе. После завершения с подписками я также хочу проверить все группы ресурсов.
Я вручную объединю все CSV в один, но если есть способ, чтобы все данные попали в один CSV, это было бы значительно проще.
Connect-AzAccount
$subscriptions = Get-AzSubscription
foreach ($subscription in $subscriptions) {
Set-AzContext -SubscriptionId $subscription.Id
$roleAssignments = Get-AzRoleAssignment
$filePath = "C:\path\to\your\folder\RoleAssignments_$($subscription.Name).csv"
$roleAssignments | Export-Csv -Path $filePath -NoTypeInformation
}
Сначала вы можете получить все CSV, а затем использовать import-csv и export-csv
get-childitem -path "C:\path\to\your\folder\" -filter "*.csv" |%{
import-csv -path $_.FullName | export-csv -Path "c:\test\newfile.csv" -Append -Force
}
Или вы можете использовать напрямую, как ниже, имя файла здесь постоянное
$roleAssignments | Export-Csv -Path "c:\test\somestaticfilename.csv" -append -NoTypeInformation
Ответ или решение
Конечно, я помогу вам с этой задачей! Ниже приведенное решение сбора всех подписок Azure и экспорта списка назначений ролей в CSV-файл.
Полное решение с использованием Azure PowerShell
-
Подключитесь к вашей учетной записи Azure:
Сначала вам нужно подключиться к вашей учетной записи Azure, используя командуConnect-AzAccount
. -
Получите все подписки в вашем тенанте:
Используем командуGet-AzSubscription
для получения списка всех подписок. -
Создайте CSV-файл для хранения всех назначений ролей:
Мы будем экспортировать назначения ролей в общий CSV-файл, чтобы упростить дальнейшую обработку данных. -
Соберите назначения ролей для каждой подписки:
Для каждой подписки используйте командуGet-AzRoleAssignment
для получения назначений ролей и добавления их в общий CSV-файл.
Вот полный код, который выполняет вышеописанные шаги:
# Подключение к учетной записи Azure
Connect-AzAccount
# Получение всех подписок
$subscriptions = Get-AzSubscription
# Удаление файла, если он существует, чтобы избежать дублирования
$outputFilePath = "C:\path\to\your\folder\AllRoleAssignments.csv"
if (Test-Path $outputFilePath) {
Remove-Item $outputFilePath
}
# Создание заголовка CSV
"SubscriptionId,SubscriptionName,PrincipalId,PrincipalType,RoleDefinitionName,Scope" | Out-File -FilePath $outputFilePath -Encoding utf8
# Итерирование по каждой подписке
foreach ($subscription in $subscriptions) {
Set-AzContext -SubscriptionId $subscription.Id
$roleAssignments = Get-AzRoleAssignment
foreach ($role in $roleAssignments) {
# Составляем строки, добавляя информацию о назначениях
$line = "$($subscription.Id),$($subscription.Name),$($role.PrincipalId),$($role.PrincipalType),$($role.RoleDefinitionName),$($role.Scope)"
Add-Content -Path $outputFilePath -Value $line
}
}
# Ваша информация о всех назначениях ролей теперь сохранена в AllRoleAssignments.csv
Объяснение:
- Подключение:
Connect-AzAccount
инициализирует сессию PowerShell и позволяет вам взаимодействовать с вашими ресурсами в Azure. - Получение подписок и назначений: В цикле
foreach
мы переключаем контекст на каждую подписку и извлекаем назначения ролей. - Экспорт в CSV: Вместо экспорта для каждой подписки в отдельный CSV-файл мы формируем одну строку для каждой роли и добавляем ее в общий файл
AllRoleAssignments.csv
.
Следующие шаги:
После того, как вы получите CSV-файл, вы сможете легко импортировать его в Excel или любой другой инструмент для анализа данных, чтобы проверить, какие пользователи имеют доступ без групп. Вы также можете использовать фильтры и формулы в Excel, чтобы проверить роли и права доступа.
Надеюсь, это решение действительно поможет вам организовать ваши данные и облегчить анализ назначений доступа. Если у вас есть дополнительные вопросы или вам нужно больше помощи, пожалуйста, дайте знать!