Я работал над получением списка ролей RBAC, назначенных подписке Azure, чтобы знать, какой RBAC назначен пользователю или группе AD. Судя по веб-сайту Microsoft, я могу сделать это с помощью PowerShell с помощью следующего кода Get-AZRoleAssignment.
Моя первая попытка заключалась в создании локального файла PowerShell, чтобы протестировать процесс получения данных и добавить выходные данные в Excel (я проходил аутентификацию в Microsoft Entra (AD), используя своего собственного пользователя). Результаты были такими, как ожидалось
Чтобы автоматизировать это и не использовать собственное имя пользователя и пароль (избегая всплывающих окон MFA), я решил использовать Azure Automation Powershell Runbook (вместо этого используйте управление удостоверением для подписки Azure и учетной записи хранения). Код был выполнен успешно, и Excel был создан, НО теперь есть 2 пустых столбца, которые не были пустыми раньше + Значение столбца «Тип объекта» неизвестно во всех строках (если я запущу локальную оболочку PowerShell, они отобразят данные). Строка на рисунке ниже аналогична изображению № 1, но выполняется в Azure Runbook:
Я подумал, что, возможно, мне не хватает модуля AzureAD, поэтому я добавил его, а также некоторые другие модули, такие как: EntraIDTools, ResolveEntraID (они были добавлены в мою учетную запись автоматизации Azure, потому что в моем локальном коде PowerShell первая строка установила модуль AzureAD). Пока ничего не работает, и в окончательном выводе Excel по-прежнему значения столбцов DisplayName и SignInName пусты + тип объекта говорит «Uknown». Я немного расстроен в этот момент
Ниже приведен мой модуль Runbook Powershell для автоматизации Azure 7.2.
# Add needed variables
Param
(
[Parameter (Mandatory= $true)]
[String] $StorageAccountName
)
# Connect using a Managed Service Identity
try {
$AzureContext = (Connect-AzAccount -Identity).context
}
catch{
Write-Output "There is no system-assigned user identity. Aborting.";
exit
}
Get-AZRoleAssignment |
Select-Object RoleAssignmentId, Scope, DisplayName, SignInName, RoleDefinitionName, RoleDefinitionId, ObjectId, ObjectType, CanDelegate |
Export-CSV -Encoding ASCII ($env:TEMP2+"MT_AZRoleAssigments.csv") -Notype
# Connect using a Managed Service Identity
try {
$AzureContext = (Connect-AzAccount -Identity).context
}
catch{
Write-Output "There is no system-assigned user identity. Aborting.";
exit
}
$Context = New-AzStorageContext -StorageAccountName $StorageAccountName
Set-AzStorageBlobContent -Context $Context -Container "compliance" -File ($env:TEMP2+"MT_AZRoleAssigments.csv") -Blob "MT_AZRoleAssigments.csv" -Force
В документации Get-AzRoleAssignment очень ясно объясняется, почему может произойти ObjectType
, равный Unknown
:
Командлет может вызывать API Microsoft Graph ниже в соответствии с входными параметрами:
- ПОЛУЧИТЕ
/users/{id}
- ПОЛУЧИТЕ
/servicePrincipals/{id}
- ПОЛУЧИТЕ
/groups/{id}
- ПОЛУЧИТЕ
/directoryObjects/{id}
- ПОСТ
/directoryObjects/getByIds
Обратите внимание, что этот командлет пометит
ObjectType
какUnknown
в выводе, если объект назначения роли не найден или текущая учетная запись не имеет достаточных привилегий для получения типа объекта.
Если вы хотите, чтобы ваша Управляемая личность могла извлекать эту информацию из назначений ролей, вам необходимо будет назначить ей необходимые разрешения API, т. е. предоставить Directory.Read.All , чтобы ваш MI мог запрашивать любого принципала в Entra ID. . В противном случае, если вы хотите большей детализации, User.Read.All только для пользователей и так далее.
@CarlosSamayoa см. stackoverflow.com/questions/72904838/…
Позвольте мне просмотреть разрешения API, потому что кажется, что их нельзя добавить на портал, поскольку это управление удостоверениями.