Настройка разрешений Конструктора образов виртуальных машин Azure с использованием PowerShell
Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы
При регистрации в Конструкторе образов виртуальных машин Azure предоставляется разрешение на создание, администрирование и удаление промежуточной группы ресурсов. Служба также имеет права на добавление ресурсов, необходимых для сборки образов, в группу ресурсов. Во время успешной регистрации подписка получает доступ к имени субъекта-службы Конструктора образов виртуальных машин Azure.
Если вы хотите, чтобы Конструктор образов виртуальных машин Azure распространял образы, необходимо создать удостоверение, назначаемое пользователем, в Azure с разрешениями на чтение и запись образов. Например, может потребоваться распространить образы в управляемые образы или в коллекцию вычислений Azure. Если вы обращаетесь к Службе хранилища Azure, то создаваемому пользователем удостоверению требуются разрешения на чтение частных или общедоступных контейнеров.
Перед созданием образа необходимо настроить разрешения и привилегии. В следующих разделах подробно описано, как настроить возможные сценарии с помощью PowerShell.
Создание управляемого удостоверения, назначаемого пользователем
Конструктор образов Azure требует создания управляемого удостоверения, назначаемого пользователем Azure. Конструктор образов виртуальных машин Azure использует управляемое удостоверение, назначаемое пользователем, для чтения и записи образов, а также для доступа к учетным записям хранения Azure. Вы предоставляете разрешение на идентификацию для выполнения конкретных действий в подписке.
Примечание.
Назначаемое пользователем управляемое удостоверение — это правильный способ предоставления разрешений группам ресурсов образа. Не рекомендуется использовать имя субъекта-службы для этой цели.
В следующем примере показано, как создать управляемое удостоверение, назначаемое пользователем Azure. Замените местозаполнители собственными переменными.
Параметр | Description |
---|---|
<Группа ресурсов> | Группа ресурсов, в которой вы хотите создать управляемое удостоверение, назначаемое пользователем. |
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity
$parameters = @{
Name = 'aibIdentity'
ResourceGroupName = '<Resource group>'
}
# create identity
New-AzUserAssignedIdentity @parameters
Дополнительные сведения см. в статье Управляемое удостоверение, назначаемое пользователем 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. |
<Группа ресурсов> | Группа ресурсов для пользовательского образа. |
$sub_id = "<Subscription ID>"
# 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 a web request to download the sample JSON description
$sample_uri="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json"
$role_definition="aibRoleImageCreation.json"
Invoke-WebRequest -Uri $sample_uri -Outfile $role_definition -UseBasicParsing
# Create a unique role name to avoid clashes in the same Azure Active Directory domain
$timeInt=$(get-date -UFormat "%s")
$imageRoleDefName="Azure Image Builder Image Def"+$timeInt
# Update the JSON definition placeholders with variable values
((Get-Content -path $role_definition -Raw) -replace '<subscriptionID>',$sub_id) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace '<rgName>', $imageResourceGroup) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace 'Azure Image Builder Service Image Creation Role', $imageRoleDefName) | Set-Content -Path $role_definition
# Create a custom role from the aibRoleImageCreation.json description file.
New-AzRoleDefinition -InputFile $role_definition
# Get the user-identity properties
$identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
$identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
# Grant the custom role to the user-assigned managed identity for Azure Image Builder.
$parameters = @{
ObjectId = $identityNamePrincipalId
RoleDefinitionName = $imageRoleDefName
Scope = '/subscriptions/' + $sub_id + '/resourceGroups/' + $imageResourceGroup
}
New-AzRoleAssignment @parameters
Пример роли Azure существующей виртуальной сети
В следующем примере создается роль Azure для использования и распространения образа существующей виртуальной сети. Затем вы предоставляете пользовательскую роль управляемому удостоверению, назначаемому пользователем, для конструктора образов виртуальных машин Azure.
Чтобы упростить замену значений в примере, сначала задайте следующие переменные. Замените местозаполнители собственными переменными.
Параметр | Description |
---|---|
<ИД подписки> | Идентификатор вашей подписки Azure. |
<Группа ресурсов> | Группа ресурсов виртуальной сети. |
$sub_id = "<Subscription ID>"
$res_group = "<Resource group>"
$identityName = "aibIdentity"
# Use a web request to download the sample JSON description
$sample_uri="https://raw.githubusercontent.com/azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleNetworking.json"
$role_definition="aibRoleNetworking.json"
Invoke-WebRequest -Uri $sample_uri -Outfile $role_definition -UseBasicParsing
# Create a unique role name to avoid clashes in the same AAD domain
$timeInt=$(get-date -UFormat "%s")
$networkRoleDefName="Azure Image Builder Network Def"+$timeInt
# Update the JSON definition placeholders with variable values
((Get-Content -path $role_definition -Raw) -replace '<subscriptionID>',$sub_id) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace '<vnetRgName>', $res_group) | Set-Content -Path $role_definition
((Get-Content -path $role_definition -Raw) -replace 'Azure Image Builder Service Networking Role',$networkRoleDefName) | Set-Content -Path $role_definition
# Create a custom role from the aibRoleNetworking.json description file
New-AzRoleDefinition -InputFile $role_definition
# Get the user-identity properties
$identityNameResourceId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).Id
$identityNamePrincipalId=$(Get-AzUserAssignedIdentity -ResourceGroupName $imageResourceGroup -Name $identityName).PrincipalId
# Assign the custom role to the user-assigned managed identity for Azure Image Builder
$parameters = @{
ObjectId = $identityNamePrincipalId
RoleDefinitionName = $networkRoleDefName
Scope = '/subscriptions/' + $sub_id + '/resourceGroups/' + $res_group
}
New-AzRoleAssignment @parameters
Следующие шаги
Общие сведения о Конструкторе образов виртуальных машин Azure