Как получить список пользователей, имеющих права доступа для подписки Azure с использованием Python - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь получить список пользователей, у которых есть доступ владельца к подписке.

Я попытался проверить Python Azure SDK.Но я не получаю API, который выполняет эту функцию.

API-интерфейс списка подписки доступен, но он не предоставляет сведения о пользователях, имеющих доступ к определенной подписке.

Я пробовал приведенный ниже код

subscriptionClient = SubscriptionClient(credentials)
for subscription in subscriptionClient.subscriptions.list():
    print (subscription)

Буду признателен за любую помощь

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

эта команда PowerShell:

(Get-AzureRmRoleAssignment -RoleDefinitionId "8e3af657-a8ff-443c-a75c-2fe8c4bcb635" -Scope "/subscriptions/<your azure sub ID>" | where {($_.ObjectType -EQ "user") -and ($_.Scope -EQ "/subscriptions/<your azure sub ID>") }  ) | select DisplayName,SignInName

вернет всех пользователей Azure AD с ролью владельца подписки.

Я пытался перехватить пакеты данных об этой команде ps, и для завершения этого процесса она вызвала несколько API отдыха.Вы можете разместить эту команду в веб-заданиях службы приложений Azure, в функции Azure или в автоматизации Azure и изучить веб-крючок, чтобы получить список пользователей, когда вам это нужно.Надеюсь, это поможет.

0 голосов
/ 16 октября 2018

Azure Python SDK

Если вы хотите использовать Azure Python SDK, вам следует использовать AuthorizationManagementClient класс

Вы можете попытаться получить RoleAssignments для своей подпискив рамках самой подписки.

Я тесно сотрудничаю с C #, поэтому не имею под рукой кода Python, но постараюсь обновить его с помощью кода Python чуть позже.

ОБНОВЛЕНИЕ

Вот пример кода.Я надеюсь, что этого достаточно для продолжения.

from azure.mgmt.authorization import AuthorizationManagementClient

authorizationClient = AuthorizationManagementClient(credentials, '<your subscription guid>')
roles = authorizationClient.role_assignments.list()
for role in roles:
print(role)

REST API

Если вы хотите напрямую вызывать REST API из кода, используйте REST API Microsoft.Authorization / roleAssignments.

GET https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments?api-version=2018-01-01-preview

{scope} будет subscriptions/<your subscriptionId> для выборки roleAssignments на уровне подписки.

Вот пример запроса к этому API и ответ.

Чтобы найти всепользователи, которым была явно назначена роль «Владелец» на уровне подписки

Запрос:

GET https://management.azure.com/subscriptions/{my subscription GUID}/providers/Microsoft.Authorization/roleAssignments?api-version=2018-01-01-preview

Ответ:

Обратите внимание, что идентификатор определения роли в ответе равен "8e3af657-a8ff-443c-a75c-2fe8c4bcb635" .Это соответствует встроенной роли владельца.

{"value":[{"properties":{"roleDefinitionId":"/subscriptions/{my Subscription GUID}/providers/Microsoft.Authorization/roleDefinitions/8e3af657-a8ff-443c-a75c-2fe8c4bcb635","principalId":"{some user GUID}","principalType":"User","scope":"/subscriptions/{my Subscription GUID}","createdOn":"2018-10-03T05:12:52.7213301Z","updatedOn":"2018-10-03T05:12:52.7213301Z","createdBy":"GUID","updatedBy":"GUID"},"id":"/subscriptions/{my Subscription GUID}/providers/Microsoft.Authorization/roleAssignments/83eee76b-4a0d-4f61-8c62-409501e95457","type":"Microsoft.Authorization/roleAssignments","name":"83eee76b-4a0d-4f61-8c62-409501e95457"}]}

Как только вы получите ответ, он будет содержать идентификаторы определений ролей вместо точных имен.Для всех встроенных ролей вы можете узнать, какая это роль заранее, посетив эту документацию Microsoft .Например, идентификатор владельца для роли «8e3af657-a8ff-443c-a75c-2fe8c4bcb635»

...