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

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

Необходимые компоненты

Чтобы назначать роли, необходимо наличие следующего:

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

Назначение ролей состоит из трех элементов: субъект безопасности, определение роли и область действия.

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

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

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

Для пользователя Microsoft Entra получите имя субъекта-пользователя, например patlong@contoso.com идентификатор объекта пользователя. Чтобы получить идентификатор объекта, можно использовать az ad user show.

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

Групповое

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

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}"

Управляемое удостоверение

Для назначенного системой или управляемого пользователем удостоверения требуется идентификатор объекта. Чтобы получить идентификатор объекта, можно использовать 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}"

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

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

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

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

Для области ресурса требуется идентификатор ресурса. Идентификатор ресурса можно найти, ознакомившись со свойствами ресурса на портале 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}"

Ниже приведен пример выходных данных при назначении пользователю в области группы ресурсов роли Участник виртуальных машин.

{
  "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-объектов в области ресурсов учетной записи хранения

Назначается роль Участник для данных 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"

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

Назначается роль Участник виртуальной машины группе Ann Mack Team с идентификатором 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"

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

Назначает роль patlong@contoso.com участника виртуальной машины пользователю в группе ресурсов pharma-sales область.

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

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

В некоторых случаях имя роли может измениться, например в следующих:

  • вы используете собственную настраиваемую роль и решили переименовать ее;
  • вы используете роль предварительного просмотра с указанием (Preview) в имени. После выпуска роли она будет переименована.

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

В следующем примере роль участника patlong@contoso.com виртуальной машины назначается пользователю в группе ресурсов pharma-sales область.

az role assignment create --assignee "patlong@contoso.com" \
--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-444444444444 в пределах группы ресурсов 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-type значение ServicePrincipal.

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"

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

Назначает роль annm@example.com читателя пользователю в область подписки.

az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

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

Назначает роль Читатель для группы 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-объектов в пределах подписки

Назначает пользователю роль alain@example.com чтения данных служба хранилища BLOB-объектов в подписке область.

az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

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

Назначает роль alain@example.com читателя выставления счетов пользователю в группе управления область.

az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"

Следующие шаги