Поделиться через


Назначение ролей Azure с помощью Azure CLI

Управление доступом на основе ролей Azure (Azure RBAC) — это система авторизации, используемая для управления доступом к ресурсам в Azure. Чтобы предоставить доступ, вы назначаете роли пользователям, группам, субъектам-службам или управляемым удостоверениям в определенной области действия. В этой статье описывается назначение ролей с помощью Azure CLI.

Предпосылки

Чтобы назначить роли, необходимо:

Действия по назначению роли Azure

Процесс назначения роли включает три элемента: сущность безопасности, определение роли и область.

Шаг 1. Определение пользователей, которым требуется доступ

Роль можно назначить пользователю, группе, служебному принципалу или управляемому удостоверению. Чтобы назначить роль, может потребоваться указать уникальный идентификатор объекта. Идентификатор имеет формат: 11111111-1111-1111-1111-111111111111 Вы можете получить идентификатор с помощью портала Azure или Azure CLI.

Пользователь

Для пользователя Microsoft Entra получите основное имя пользователя, например [email protected], или идентификатор объекта пользователя. Чтобы получить идентификатор объекта, можно использовать az ad user show.

az ad user show --id "{principalName}" --query "id" --output tsv

Группа

Для группы Microsoft Entra требуется идентификатор объекта группы. Чтобы получить идентификатор объекта, можно использовать az ad group show или az ad group list.

az ad group show --group "{groupName}" --query "id" --output tsv

Управляющий службой

Для учетной записи Microsoft Entra (идентичности, в которой используется приложение) вам потребуется идентификатор объекта учетной записи. Чтобы получить идентификатор объекта, можно использовать az ad sp list. Для субъекта-службы используйте идентификатор объекта, а не идентификатор приложения.

az ad sp list --all --query "[].{displayName:displayName, id:id}" --output tsv
az ad sp list --display-name "{displayName}"

Managed identity

Для управляемого удостоверения, будь то назначается системой или пользователем, требуется объектный идентификатор. Чтобы получить идентификатор объекта, можно использовать az ad sp list.

az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"

Чтобы просто перечислить управляемые удостоверения, назначаемые пользователем, можно использовать az identity list.

az identity list

Шаг 2. Выбор подходящей роли

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

Чтобы вывести список ролей и получить уникальный идентификатор роли, можно использовать az role definition list.

az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv

Вот как перечислить сведения об определенной роли.

az role definition list --name "{roleName}"

Дополнительные сведения см. в разделе Список определений ролей в Azure.

Шаг 3. Определение необходимой области

Azure предоставляет четыре уровня области: ресурс, группу ресурсов, подписку и группу управления. Рекомендуется предоставлять доступ с минимальными привилегиями, поэтому избегайте назначения роли в более широкой области. Дополнительные сведения об областях см. в разделе Понимание области.

Область ресурсов

Для области ресурсов необходим идентификатор этого ресурса. Идентификатор ресурса можно найти, просмотрев свойства ресурса на портале Azure. Идентификатор ресурса имеет следующий формат.

/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}

Область группы ресурсов

Для определения области группы ресурсов важно знать имя этой группы. Вы можете найти имя на странице групп ресурсов на портале Azure или с помощью команды az group list.

az group list --query "[].{name:name}" --output tsv

Область подписки

Для области подписки требуется идентификатор подписки. Идентификатор можно найти на странице "Подписки" на портале Azure или использовать az account list.

az account list --query "[].{name:name, id:id}" --output tsv

Область группы управления

Для области группы управления вам потребуется имя группы управления. Имя можно найти на странице Группы управления на Портале Azure или использовать az account management-group list.

az account management-group list --query "[].{name:name, id:id}" --output tsv

Шаг 4. Назначение роли

Чтобы назначить роль, используйте команду az role assignment create . В зависимости от области команда обычно имеет один из следующих форматов.

Область ресурсов

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"

Область группы ресурсов

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

Область подписки

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"

Область группы управления

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"

Ниже показан пример выходных данных, когда роль Virtual Machine Contributor назначена пользователю на уровне группы ресурсов.

{
  "canDelegate": null,
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
  "name": "{roleAssignmentId}",
  "principalId": "{principalId}",
  "principalType": "User",
  "resourceGroup": "{resourceGroupName}",
  "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
  "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
  "type": "Microsoft.Authorization/roleAssignments"
}

Примеры назначения ролей

Назначение роли для всех контейнеров блобов в области ресурсов учетной записи хранения.

Назначает роль Участник данных BLOB-объектов хранилища служебному принципалу с идентификатором объекта 55555555-5555-5555-5555-555555555555 в области ресурсов для учетной записи хранения с именем storage12345.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"

Назначьте роль для конкретной области ресурсов контейнера BLOB

Назначает роль участника данных хранилища Blob сервисному принципалу с идентификатором объекта 55555555-5555-5555-5555-555555555555 в рамках ресурса для контейнера Blob с именем blob-container-01.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"

Назначение роли для группы в определенной области ресурсов виртуальной сети

Назначает роль Virtual Machine Contributor группе Ann Mack Team с ID 22222222-2222-2222-2222-222222222222 в области ресурсов виртуальной сети с именем pharma-sales-project-network.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"

Назначение роли пользователю в масштабе группы ресурсов

Присваивает пользователю роль участника виртуальной машины в области группы ресурсов [email protected].

az role assignment create --assignee "[email protected]" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Назначить роль пользователю, используя уникальный идентификатор роли в пределах группы ресурсов.

Существует несколько раз, когда имя роли может измениться, например:

  • Вы используете собственную пользовательскую роль и решите изменить имя.
  • Вы используете роль, в названии которой указано (предварительный). Когда роль освобождается, она переименовывается.

Даже если роль переименована, идентификатор роли остается прежним. Если вы используете скрипты или автоматизацию для создания назначений ролей, рекомендуется использовать уникальный идентификатор роли вместо имени роли. Таким образом, если роль будет переименована, ваши скрипты с большей вероятностью будут работать.

В следующем примере роль Участника с правами управления виртуальными машинами назначается пользователю [email protected] на уровне группы ресурсов pharma-sales.

az role assignment create --assignee "[email protected]" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Назначьте роль для всех контейнеров BLOB-объектов на уровне группы ресурсов.

Назначает роль взаимодействия с BLOB-данными хранилища служебному принципалу с идентификатором объекта 55555555-5555-5555-5555-555555555555 в области группы ресурсов Example-Storage-rg.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"

Назначить роль для приложения на уровне группы ресурсов

Назначает роль участника виртуальной машины приложению с идентификатором объекта субъекта-службы 44444444-4444-4444-4444-4444444444 в области группы ресурсов pharma-sales .

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Назначение роли для нового субъекта-службы в области группы ресурсов

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

Чтобы назначить роль, используйте az role assignment create, укажите значение для --assignee-object-id, а затем задайте значение --assignee-principal-typeServicePrincipal.

az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

В следующем примере роль участника виртуальной машины назначается управляемому удостоверению msi-test в области группы ресурсов pharma-sales :

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Назначьте роль пользователю на уровне подписки

Назначает пользователю роль [email protected] на уровне подписки.

az role assignment create --assignee "[email protected]" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Назначьте роль для группы в рамках подписки

Назначает роль Reader группе Ann Mack Team с идентификатором 22222222-2222-2222-2222-222222222222 в области подписки.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Назначьте роль для всех контейнеров BLOB в области подписки.

Назначает роль чтения данных BLOB-объектов хранилища[email protected] пользователю в области подписки.

az role assignment create --assignee "[email protected]" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Назначить пользователю роль в области управления группой

Назначает пользователю роль [email protected] на уровне группы управления.

az role assignment create --assignee "[email protected]" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"

Дальнейшие действия