Configurar permissões do Construtor de Imagens da VM do Azure com o PowerShell
Aplica-se a: ✔️ Conjuntos de dimensionamento flexíveis de VMs ✔️ do Linux
Quando se registar no Construtor de Imagens da VM do Azure, isto concede ao serviço permissão para criar, gerir e eliminar um grupo de recursos de teste. O serviço também tem direitos para adicionar recursos a um grupo de recursos, necessário para a compilação de imagens. Durante um registo bem-sucedido, a sua subscrição obtém acesso a um nome principal de serviço (SPN) do Construtor de Imagens da VM.
Se pretender que o Construtor de Imagens da VM distribua imagens, tem de criar uma identidade atribuída pelo utilizador no Azure, com permissões para ler e escrever imagens. Por exemplo, poderá querer distribuir imagens para imagens geridas ou para a Galeria de Computação do Azure. Se estiver a aceder ao Armazenamento do Azure, a identidade atribuída pelo utilizador que criar necessita de permissões para ler contentores privados ou públicos.
Tem de configurar permissões e privilégios antes de criar uma imagem. As secções seguintes detalham como configurar cenários possíveis com o PowerShell.
Criar uma identidade gerida atribuída pelo utilizador
O Construtor de Imagens da VM requer que crie uma identidade gerida atribuída pelo utilizador do Azure. O Construtor de Imagens da VM utiliza esta identidade para ler imagens, escrever imagens e aceder a contas de Armazenamento do Azure. Concede a permissão de identidade para realizar ações específicas na sua subscrição.
Nota
A identidade gerida atribuída pelo utilizador é a forma correta de conceder permissões aos grupos de recursos de imagem. O SPN foi preterido para este fim.
O exemplo seguinte mostra-lhe como criar uma identidade gerida atribuída pelo utilizador do Azure. Substitua as definições do marcador de posição para definir as variáveis.
Definições | Descrição |
---|---|
<Grupo de recursos> | O grupo de recursos onde pretende criar a identidade gerida atribuída pelo utilizador. |
## Add AZ PS module to support AzUserAssignedIdentity
Install-Module -Name Az.ManagedServiceIdentity
$parameters = @{
Name = 'aibIdentity'
ResourceGroupName = '<Resource group>'
}
# create identity
New-AzUserAssignedIdentity @parameters
Para obter mais informações, veja Identidade gerida atribuída pelo utilizador do Azure.
Permitir que o Construtor de Imagens da VM distribua imagens
Para que o Construtor de Imagens da VM distribua imagens, o serviço tem de ter permissão para injetar as imagens em grupos de recursos. Para conceder as permissões necessárias, crie uma identidade gerida atribuída pelo utilizador e conceda-lhe direitos no grupo de recursos onde a imagem é criada. O Construtor de Imagens da VM não tem permissão para aceder a recursos noutros grupos de recursos na subscrição. Tem de efetuar ações explícitas para permitir o acesso, para impedir que as compilações falhem.
Não precisa de conceder aos utilizadores direitos de contribuidor de identidade gerida atribuídos pelo utilizador no grupo de recursos para distribuir imagens. No entanto, a identidade gerida atribuída pelo utilizador precisa das seguintes permissões do Azure Actions
no grupo de recursos de distribuição:
Microsoft.Compute/images/write
Microsoft.Compute/images/read
Microsoft.Compute/images/delete
Se quiser distribuir para a Galeria de Computação do Azure, também precisa de:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Microsoft.Compute/galleries/images/versions/write
Permissão para personalizar imagens existentes
Para que o Construtor de Imagens da VM crie imagens a partir de imagens personalizadas de origem, o serviço tem de ter permissão para ler as imagens nestes grupos de recursos. Para conceder as permissões necessárias, crie uma identidade gerida atribuída pelo utilizador e conceda-lhe direitos no grupo de recursos onde a imagem está localizada.
Eis como compila a partir de uma imagem personalizada existente:
Microsoft.Compute/images/read
Eis como compila a partir de uma versão existente da Galeria de Computação do Azure:
Microsoft.Compute/galleries/read
Microsoft.Compute/galleries/images/read
Microsoft.Compute/galleries/images/versions/read
Permissão para personalizar imagens nas suas redes virtuais
O Construtor de Imagens da VM tem a capacidade de implementar e utilizar uma rede virtual existente na sua subscrição, permitindo assim que as personalizações acedam a recursos ligados.
Não precisa de conceder direitos de contribuidor de identidade gerida atribuídos pelo utilizador no grupo de recursos para implementar uma VM numa rede virtual existente. No entanto, a identidade gerida atribuída pelo utilizador precisa das seguintes permissões do Azure Actions
no grupo de recursos de rede virtual:
Microsoft.Network/virtualNetworks/read
Microsoft.Network/virtualNetworks/subnets/join/action
Criar uma definição de função do Azure
Os exemplos seguintes criam uma definição de função do Azure a partir das ações descritas nas secções anteriores. Os exemplos são aplicados ao nível do grupo de recursos. Avalie e teste se os exemplos são granulares o suficiente para os seus requisitos.
As ações da imagem permitem ler e escrever. Decida o que é adequado para o seu ambiente. Por exemplo, crie uma função para permitir que o Construtor de Imagens da VM leia imagens do grupo de recursos example-rg-1 e escreva imagens no grupo de recursos example-rg-2.
Exemplo de função do Azure de imagem personalizada
O exemplo seguinte cria uma função do Azure para utilizar e distribuir uma imagem personalizada de origem. Em seguida, concede a função personalizada à identidade gerida atribuída pelo utilizador para o Construtor de Imagens da VM.
Para simplificar a substituição de valores no exemplo, defina primeiro as seguintes variáveis. Substitua as definições do marcador de posição para definir as variáveis.
Definições | Descrição |
---|---|
<ID da Subscrição> | O seu ID de subscrição do Azure. |
<Grupo de recursos> | Grupo de recursos para a imagem personalizada. |
$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
Exemplo de função do Azure de rede virtual existente
O exemplo seguinte cria uma função do Azure para utilizar e distribuir uma imagem de rede virtual existente. Em seguida, concede a função personalizada à identidade gerida atribuída pelo utilizador para o Construtor de Imagens da VM.
Para simplificar a substituição de valores no exemplo, defina primeiro as seguintes variáveis. Substitua as definições do marcador de posição para definir as variáveis.
Definições | Descrição |
---|---|
<ID da Subscrição> | O seu ID de subscrição do Azure. |
<Grupo de recursos> | O grupo de recursos de rede virtual. |
$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
Passos seguintes
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários