Restringir o acesso a um registro de contêiner usando um ponto de extremidade de serviço em uma rede virtual do AzureRestrict access to a container registry using a service endpoint in an Azure virtual network

A Rede Virtual do Azure fornece uma rede privada segura para seus recursos locais e do Azure.Azure Virtual Network provides secure, private networking for your Azure and on-premises resources. Um ponto de extremidade de serviço permite proteger o endereço IP público do registro de contêiner somente para sua rede virtual.A service endpoint allows you to secure your container registry's public IP address to only your virtual network. Esse ponto de extremidade fornece ao tráfego uma rota ideal para o recurso pela rede de backbone do Azure.This endpoint gives traffic an optimal route to the resource over the Azure backbone network. As identidades de rede virtual e a sub-rede também são transmitidas com cada solicitação.The identities of the virtual network and the subnet are also transmitted with each request.

Este artigo mostra como configurar um ponto de extremidade de serviço do registro de contêiner (versão prévia) em uma rede virtual.This article shows how to configure a container registry service endpoint (preview) in a virtual network.

Importante

O Registro de Contêiner do Azure agora oferece suporte ao Link Privado do Azure, permitindo que pontos de extremidade privados de uma rede virtual sejam colocados em um registro.Azure Container Registry now supports Azure Private Link, enabling private endpoints from a virtual network to be placed on a registry. Os pontos de extremidade privados podem ser acessados de dentro da rede virtual, usando endereços IP privados.Private endpoints are accessible from within the virtual network, using private IP addresses. É recomendável usar pontos de extremidade privados em vez de pontos de extremidade de serviço na maioria dos cenários de rede.We recommend using private endpoints instead of service endpoints in most network scenarios.

A configuração de um ponto de extremidade de serviço de registro está disponível na camada de serviço Premium do registro de contêiner.Configuring a registry service endpoint is available in the Premium container registry service tier. Para saber mais sobre os limites e as camadas de serviço do registro, confira Camadas de serviço do Registro de Contêiner do Azure.For information about registry service tiers and limits, see Azure Container Registry service tiers.

Limitações de visualizaçãoPreview limitations

  • O desenvolvimento futuro de pontos de extremidade de serviço para o Registro de Contêiner do Azure não está planejado no momento.Future development of service endpoints for Azure Container Registry isn't currently planned. Recomendamos o uso de pontos de extremidade privados.We recommend using private endpoints instead.
  • Você não pode usar o portal do Azure para configurar pontos de extremidade de serviço em um registro.You can't use the Azure portal to configure service endpoints on a registry.
  • Somente um cluster do Serviço de Kubernetes do Azure ou a máquina virtual do Azure pode ser usado como host para acessar um registro de contêiner usando um ponto de extremidade de serviço.Only an Azure Kubernetes Service cluster or Azure virtual machine can be used as a host to access a container registry using a service endpoint. Não há suporte para outros serviços do Azure, incluindo Instâncias de Contêiner do Azure.Other Azure services including Azure Container Instances aren't supported.
  • Cada registro oferece suporte ao máximo de 100 regras de acesso à rede.Each registry supports a maximum of 100 network access rules.

Pré-requisitosPrerequisites

  • Para usar as etapas da CLI do Azure neste artigo, a CLI do Azure versão 2.0.58 ou posterior é necessária.To use the Azure CLI steps in this article, Azure CLI version 2.0.58 or later is required. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.If you need to install or upgrade, see Install Azure CLI.

  • Se ainda não tiver um registro de contêiner, crie um (camada Premium necessária) e efetue push de uma amostra de imagem, como hello-world do Docker Hub.If you don't already have a container registry, create one (Premium tier required) and push a sample image such as hello-world from Docker Hub. Por exemplo, use o portal do Azure ou a CLI do Azure para criar um registro.For example, use the Azure portal or the Azure CLI to create a registry.

  • Se você deseja restringir o acesso ao registro usando um ponto de extremidade de serviço em uma assinatura diferente do Azure, registre o provedor de recursos do Registro de Contêiner do Azure nessa assinatura.If you want to restrict registry access using a service endpoint in a different Azure subscription, register the resource provider for Azure Container Registry in that subscription. Por exemplo:For example:

    az account set --subscription <Name or ID of subscription of virtual network>
    
    az provider register --namespace Microsoft.ContainerRegistry
    

Criar uma máquina virtual habilitada para DockerCreate a Docker-enabled virtual machine

Para fins de teste, use uma VM Ubuntu habilitada para Docker para acessar um registro de contêiner do Azure.For test purposes, use a Docker-enabled Ubuntu VM to access an Azure container registry. Para usar Azure Active Directory autenticação para o registro, instale também o CLI do Azure na VM.To use Azure Active Directory authentication to the registry, also install the Azure CLI on the VM. Se você já tiver uma máquina virtual do Azure, ignore esta etapa de criação.If you already have an Azure virtual machine, skip this creation step.

Você pode usar o mesmo grupo de recursos para sua máquina virtual e o registro de contêiner.You may use the same resource group for your virtual machine and your container registry. Essa configuração simplifica a limpeza no final, mas não é necessária.This setup simplifies clean-up at the end but isn't required. Se você optar por criar um grupo de recursos separado para a máquina virtual e a rede virtual, execute AZ Group Create.If you choose to create a separate resource group for the virtual machine and virtual network, run az group create. O exemplo a seguir pressupõe que você definiu variáveis de ambiente para o nome do grupo de recursos e o local do registro:The following example assumes you've set environment variables for the resource group name and registry location:

az group create --name $RESOURCE_GROUP --location $REGISTRY_LOCATION

Agora, implante uma máquina virtual do Ubuntu do Azure padrão com AZ VM Create.Now deploy a default Ubuntu Azure virtual machine with az vm create. O exemplo a seguir cria uma VM chamada myDockerVM.The following example creates a VM named myDockerVM.

VM_NAME=myDockerVM

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name $VM_NAME \
  --image UbuntuLTS \
  --admin-username azureuser \
  --generate-ssh-keys

A criação da VM demora alguns minutos.It takes a few minutes for the VM to be created. Quando o comando for concluído, observe o publicIpAddress exibido pela CLI do Azure.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. Use esse endereço para estabelecer conexões SSH à VM.Use this address to make SSH connections to the VM.

Instalar o Docker na VMInstall Docker on the VM

Depois que a VM estiver em execução, estabeleça uma conexão SSH à VM.After the VM is running, make an SSH connection to the VM. Substitua publicIpAddress pelo endereço IP público da VM.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

Execute os seguintes comandos para instalar o Docker na VM do Ubuntu:Run the following commands to install Docker on the Ubuntu VM:

sudo apt-get update
sudo apt install docker.io -y

Após a instalação, execute o seguinte comando para verificar se o Docker está funcionando corretamente na VM:After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

Saída:Output:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Instalar a CLI do AzureInstall the Azure CLI

Siga as etapas em Instalar a CLI do Azure com apt para instalar a CLI do Azure em sua máquina virtual do Ubuntu.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. Por exemplo:For example:

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Saia da conexão SSH.Exit the SSH connection.

Configurar acesso à rede para o registroConfigure network access for registry

Nesta seção, configure o registro de contêiner para permitir o acesso de uma sub-rede em uma rede virtual do Azure.In this section, configure your container registry to allow access from a subnet in an Azure virtual network. São fornecidas etapas equivalentes usando a CLI do Azure e o portal do Azure.Equivalent steps using the Azure CLI and Azure portal are provided.

Permitir acesso a partir de uma rede virtual - CLIAllow access from a virtual network - CLI

Habilitar um ponto de extremidade de serviço para uma sub-redeAdd a service endpoint to a subnet

Ao criar uma VM, o Azure por padrão cria uma rede virtual no mesmo grupo de recursos.When you create a VM, Azure by default creates a virtual network in the same resource group. O nome da rede virtual é baseado no nome da máquina virtual.The name of the virtual network is based on the name of the virtual machine. Por exemplo, se o nome da máquina virtual for myDockerVM, o nome padrão da rede virtual será myDockerVMVNET e o da sub-rede será myDockerVMSubnet.For example, if you name your virtual machine myDockerVM, the default virtual network name is myDockerVMVNET, with a subnet named myDockerVMSubnet. Verifique isso no portal do Azure ou usando o comando az network vnet list:Verify this in the Azure portal or by using the az network vnet list command:

az network vnet list \
  --resource-group myResourceGroup \
  --query "[].{Name: name, Subnet: subnets[0].name}"

Saída:Output:

[
  {
    "Name": "myDockerVMVNET",
    "Subnet": "myDockerVMSubnet"
  }
]

Use o comando az network vnet subnet update para adicionar um ponto de extremidade de serviço Microsoft.ContainerRegistry à sua sub-rede.Use the az network vnet subnet update command to add a Microsoft.ContainerRegistry service endpoint to your subnet. Substitua os nomes de sua rede virtual e sub-rede no seguinte comando:Substitute the names of your virtual network and subnet in the following command:

az network vnet subnet update \
  --name myDockerVMSubnet \
  --vnet-name myDockerVMVNET \
  --resource-group myResourceGroup \
  --service-endpoints Microsoft.ContainerRegistry

Use o comando az network vnet subnet show para recuperar a ID do recurso da sub-rede.Use the az network vnet subnet show command to retrieve the resource ID of the subnet. Você precisará disso em uma etapa posterior para configurar uma regra de acesso à rede.You need this in a later step to configure a network access rule.

az network vnet subnet show \
  --name myDockerVMSubnet \
  --vnet-name myDockerVMVNET \
  --resource-group myResourceGroup \
  --query "id"
  --output tsv

Saída:Output:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet

Alterar o acesso de rede padrão para o registroChange default network access to registry

Por padrão, um registro de contêiner do Azure aceita conexões de hosts em qualquer rede.By default, an Azure container registry allows connections from hosts on any network. Para limitar o acesso a uma rede selecionada, altere a ação padrão para negar acesso.To limit access to a selected network, change the default action to deny access. Substitua o nome do registro pelo seguinte comando az acr update:Substitute the name of your registry in the following az acr update command:

az acr update --name myContainerRegistry --default-action Deny

Adicionar regra de rede ao registroAdd network rule to registry

Use o comando az acr network-rule add para adicionar uma regra de rede ao registro que permite o acesso a partir da sub-rede da VM.Use the az acr network-rule add command to add a network rule to your registry that allows access from the VM's subnet. Substitua o nome do registro de contêiner e a ID do recurso da sub-rede no seguinte comando:Substitute the container registry's name and the resource ID of the subnet in the following command:

az acr network-rule add \
 --name mycontainerregistry \
 --subnet <subnet-resource-id>

Verificar o acesso ao registroVerify access to the registry

Depois de aguardar alguns minutos para a atualização da configuração, verifique se a VM pode acessar o registro de contêiner.After waiting a few minutes for the configuration to update, verify that the VM can access the container registry. Faça uma conexão SSH com sua VM e execute o comando az acr login para fazer logon no seu registro.Make an SSH connection to your VM, and run the az acr login command to login to your registry.

az acr login --name mycontainerregistry

Você pode executar operações de registro, como docker pull, para efetuar pull de uma amostra de imagem do registro.You can perform registry operations such as run docker pull to pull a sample image from the registry. Substitua uma imagem e um valor de marca apropriados ao registro, prefixado com o nome do servidor de logon do registro (todas as letras minúsculas):Substitute an image and tag value appropriate for your registry, prefixed with the registry login server name (all lowercase):

docker pull mycontainerregistry.azurecr.io/hello-world:v1

O Docker efetua pull da imagem com êxito para a VM.Docker successfully pulls the image to the VM.

Este exemplo demonstra que você pode acessar o registro de contêiner privado por meio da regra de acesso à rede.This example demonstrates that you can access the private container registry through the network access rule. No entanto, o registro não pode ser acessado a partir de um host de logon que não possui uma regra de acesso à rede configurada.However, the registry can't be accessed from a login host that doesn't have a network access rule configured. Se você tentar efetuar logon de outro host usando o comando az acr login ou docker login, a saída será semelhante à seguinte:If you attempt to login from another host using the az acr login command or docker login command, output is similar to the following:

Error response from daemon: login attempt to https://xxxxxxx.azurecr.io/v2/ failed with status: 403 Forbidden

Restaurar o acesso padrão do registroRestore default registry access

Para restaurar o registro para permitir acesso por padrão, remova quaisquer regras de rede configuradas.To restore the registry to allow access by default, remove any network rules that are configured. Em seguida, defina a ação padrão para permitir o acesso.Then set the default action to allow access. São fornecidas etapas equivalentes usando a CLI do Azure e o portal do Azure.Equivalent steps using the Azure CLI and Azure portal are provided.

Restaurar acesso padrão ao registro - CLIRestore default registry access - CLI

Remover regras de redeRemove network rules

Para ver uma lista de regras de rede configuradas para o seu registro, execute o seguinte comando az acr network-rule list:To see a list of network rules configured for your registry, run the following az acr network-rule list command:

az acr network-rule list --name mycontainerregistry 

Para cada regra configurada, execute o comando az acr network-rule remove para removê-la.For each rule that is configured, run the az acr network-rule remove command to remove it. Por exemplo:For example:

# Remove a rule that allows access for a subnet. Substitute the subnet resource ID.

az acr network-rule remove \
  --name mycontainerregistry \
  --subnet /subscriptions/ \
  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myDockerVMVNET/subnets/myDockerVMSubnet

Permitir o acessoAllow access

Substitua o nome do registro pelo seguinte comando az acr update:Substitute the name of your registry in the following az acr update command:

az acr update --name myContainerRegistry --default-action Allow

Limpar os recursosClean up resources

Se você criou todos os recursos do Azure no mesmo grupo de recursos e não precisa mais deles, é possível excluí-los usando um único comando az group delete:If you created all the Azure resources in the same resource group and no longer need them, you can optionally delete the resources by using a single az group delete command:

az group delete --name myResourceGroup

Para limpar seus recursos no portal, navegue até o grupo de recursos myResourceGroup.To clean up your resources in the portal, navigate to the myResourceGroup resource group. Depois que o grupo de recursos for carregado, clique em Excluir grupo de recursos para remover o grupo de recursos e os recursos armazenados nele.Once the resource group is loaded, click on Delete resource group to remove the resource group and the resources stored there.

Próximas etapasNext steps