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


Настройка разрешений Конструктора образов виртуальных машин Azure с использованием Azure CLI

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

При регистрации в построителе образов виртуальных машин Azure подписка получает доступ к имени субъекта-службы построителя образов виртуальных машин (SPN). Эта регистрация также разрешает службе разрешение на создание, управление и удаление промежуточной группы ресурсов. Для процесса создания образа назначение роли участника также требуется в промежуточной группе ресурсов.

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

Перед созданием образа необходимо настроить разрешения и привилегии. В следующих разделах подробно описано, как настроить возможные сценарии с помощью Azure CLI.

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

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

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

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

Примечание.

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

В следующем примере показано, как создать управляемое удостоверение, назначаемое пользователем Azure. Замените местозаполнители собственными переменными.

Параметр Description
<Группа ресурсов> Группа ресурсов, в которой вы хотите создать управляемое удостоверение, назначаемое пользователем.
identityName="aibIdentity"
imageResourceGroup=<Resource group>

az identity create \
    --resource-group $imageResourceGroup \
    --name $identityName

Дополнительные сведения см. в статье Управляемое удостоверение, назначаемое пользователем Azure.

Разрешение Конструктору образов виртуальных машин распространять образы

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

Для распространения образов не нужно предоставлять права участника назначаемому пользователем управляемому удостоверению в группе ресурсов. Однако управляемому удостоверению, назначаемому пользователем, требуются следующие разрешения Actions Azure в группе ресурсов распространения:

Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete

Если вы хотите распространить данные в коллекцию вычислений Azure, вам также потребуется:

Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write

Разрешение на настройку существующих образов

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

Ниже показано, как выполнить сборку на основе существующего пользовательского образа:

Microsoft.Compute/images/read

Ниже описывается процесс сборки из существующей версии Коллекции вычислений Azure:

Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read

Разрешение на настройку образов в виртуальных сетях

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

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

Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action

Создание определения роли Azure

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

Действия с образом позволяют выполнять чтение и запись. Определите, что подходящие параметры для существующей среды. Например, создайте роль, позволяющую Конструктору образов виртуальных машин Azure читать образы из группы ресурсов example-RG-1 и записывать образы в группу ресурсов example-RG-2.

Пример роли Azure для пользовательского образа

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

Чтобы упростить замену значений в примере, сначала задайте следующие переменные. Замените местозаполнители собственными переменными.

Параметр Description
<ИД подписки> Идентификатор вашей подписки Azure.
<Группа ресурсов> Группа ресурсов для пользовательского образа.
# Subscription ID - You can get this using `az account show | grep id` or from the Azure portal.
subscriptionID=$(az account show --query id --output tsv)
# Resource group - image builder will only support creating custom images in the same Resource Group as the source managed image.
imageResourceGroup=<Resource group>
identityName="aibIdentity"

# Use *cURL* to download the a sample JSON description 
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json

# Create a unique role name to avoid clashes in the same Azure Active Directory domain
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')

# Update the JSON definition using stream editor
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$imageResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json

# Create a custom role from the sample aibRoleImageCreation.json description file.
az role definition create --role-definition ./aibRoleImageCreation.json

# Get the user-assigned managed identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)

# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
az role assignment create \
    --assignee $imgBuilderCliId \
    --role $imageRoleDefName \
    --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup

Пример роли Azure существующей виртуальной сети

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

Чтобы упростить замену значений в примере, сначала задайте следующие переменные. Замените местозаполнители собственными переменными.

Параметр Description
<ИД подписки> Идентификатор вашей подписки Azure.
<Группа ресурсов> Группа ресурсов виртуальной сети
# Subscription ID - You can get this using `az account show | grep id` or from the Azure portal.
subscriptionID=$(az account show --query id --output tsv)
VnetResourceGroup=<Resource group>
identityName="aibIdentity"

# Use *cURL* to download the a sample JSON description 
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json -o aibRoleNetworking.json

# Create a unique role name to avoid clashes in the same domain
netRoleDefName="Azure Image Builder Network Def"$(date +'%s')

# Update the JSON definition using stream editor
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleNetworking.json
sed -i -e "s/<vnetRgName>/$VnetResourceGroup/g" aibRoleNetworking.json
sed -i -e "s/Azure Image Builder Service Networking Role/$netRoleDefName/g" aibRoleNetworking.json

# Create a custom role from the aibRoleNetworking.json description file.
az role definition create --role-definition ./aibRoleNetworking.json

# Get the user-assigned managed identity id
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)

# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
az role assignment create \
    --assignee $imgBuilderCliId \
    --role $netRoleDefName \
    --scope /subscriptions/$subscriptionID/resourceGroups/$VnetResourceGroup

Использование управляемого удостоверения для доступа к хранилищу Azure

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

Примечание.

Конструктор образов виртуальных машин использует удостоверение только во время отправки шаблона образа. Виртуальная машина сборки не имеет доступа к удостоверению во время сборки образа.

Используйте Azure CLI для создания управляемого удостоверения, назначаемого пользователем:

az role assignment create \
    --assignee <Image Builder client ID> \
    --role "Storage Blob Data Reader" \
    --scope /subscriptions/<Subscription ID>/resourceGroups/<Resource group>/providers/Microsoft.Storage/storageAccounts/$scriptStorageAcc/blobServices/default/containers/<Storage account container>

В шаблоне Конструктора образов виртуальных машин необходимо указать назначаемое пользователем управляемое удостоверение:

    "type": "Microsoft.VirtualMachineImages/imageTemplates",
    "apiVersion": "2020-02-14",
    "location": "<Region>",
    ..
    "identity": {
    "type": "UserAssigned",
          "userAssignedIdentities": {
            "<Image Builder ID>": {}     
        }

Замените следующие шаблонные настройки собственными параметрами:

Параметр Description
<Регион> Область шаблона
<Группа ресурсов> Группа ресурсов
<Контейнер учетной записи хранения> имя контейнера в учетной записи хранения.
<ИД подписки> Подписка Azure.

Более подробную информацию см. в статье Создание образа и использование управляемого удостоверения, назначаемого пользователем, для доступа к файлам в службе хранилища Azure. Вы узнаете, как создать и настроить управляемое удостоверение, назначаемое пользователем, для доступа к учетной записи хранения.

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

Общие сведения о Конструкторе образов виртуальных машин Azure