Программно назначить ресурсу Azure A роль участника ресурсу B Azure

Я хочу программно предоставить виртуальной машине Azure роль участника для другого изменения вещей в других ресурсах, таких как таблицы маршрутов, учетные записи хранилища.

https://docs.microsoft.com/en-us/azure/active-directory/managed-service-identity/howto-assign-access-cli

В приведенном выше документе msft объясняется, как можно предоставить виртуальной машине с поддержкой MSI роль участника для учетной записи хранения Azure с помощью Azure CLI. Может ли кто-нибудь добиться того же, используя пакет SDK для Azure Python вместо Azure CLI? Можно ли достичь той же цели без включения MSI?


person explorer    schedule 18.07.2018    source источник


Ответы (1)


Если вы создаете субъект-службу для своей виртуальной машины и каким-то образом проталкиваете учетные данные на виртуальную машину, вы можете избежать MSI. Но MSI был создан специально, чтобы этого избежать, поскольку на самом деле это непростой процесс и не безопасно вводить учетные данные внутри виртуальной машины.

Чтобы назначить роль идентификатору Active Directory (независимо от того, используется ли MSI или выделенный ServicePrincipal), вы можете использовать этот код для назначения роли (используя пакет azure-mgmt-authorization).

https://github.com/Azure-Samples/compute-python-msi-vm#role-assignement-to-the-msi-credentials.

# Get "Contributor" built-in role as a RoleDefinition object
role_name = 'Contributor'
roles = list(authorization_client.role_definitions.list(
    resource_group.id,
    filter="roleName eq '{}'".format(role_name)
))
assert len(roles) == 1
contributor_role = roles[0]

# Add RG scope to the AD id
# This assumes "sp_id" is either a MSI id or a SP id
role_assignment = authorization_client.role_assignments.create(
    resource_group.id,
    uuid.uuid4(), # Role assignment random name
    {
        'role_definition_id': contributor_role.id,
        'principal_id': sp_id
    }
)

Тогда этот идентификатор AD сможет воздействовать только на эту роль и не более того.

person Laurent Mazuel    schedule 18.07.2018
comment
Спасибо, Лоран! и если вы хотите ограничить область действия конкретным ресурсом вместо RG, я полагаю, вы все равно можете сделать это, заменив resource_group.id на resource.id в приведенном выше примере. - person explorer; 19.07.2018
comment
Как получить объект authorization_client, который мы используем? - person explorer; 19.07.2018
comment