Azure 개인 링크를 사용 하 여 Azure container registry에 비공개로 연결Connect privately to an Azure container registry using Azure Private Link

Azure 개인 링크를 사용 하 여 가상 네트워크 개인 IP 주소를 레지스트리 끝점에 할당 하 여 레지스트리에 대 한 액세스를 제한 합니다.Limit access to a registry by assigning virtual network private IP addresses to the registry endpoints and using Azure Private Link. 가상 네트워크의 클라이언트와 레지스트리의 개인 끝점 간의 네트워크 트래픽은 Microsoft 백본 네트워크에서 가상 네트워크와 개인 링크를 순회 하 여 공용 인터넷의 노출을 제거 합니다.Network traffic between the clients on the virtual network and the registry's private endpoints traverses the virtual network and a private link on the Microsoft backbone network, eliminating exposure from the public internet. 또한 개인 링크를 통해 Azure express 경로 개인 피어 링 또는 VPN gateway를 통해 온-프레미스에서 개인 레지스트리 액세스를 사용할 수 있습니다.Private Link also enables private registry access from on-premises through Azure ExpressRoute private peering or a VPN gateway.

레지스트리의 전용 끝점에 대 한 DNS 설정을 구성할 수 있습니다. 그러면 설정이 레지스트리의 할당 된 개인 IP 주소로 확인 됩니다.You can configure DNS settings for the registry's private endpoints, so that the settings resolve to the registry's allocated private IP address. DNS 구성을 사용하는 경우, 네트워크의 클라이언트 및 서비스는 myregistry.azurecr.io 와 같은 레지스트리의 정규화된 도메인 이름(FQDN)에서 레지스트리에 계속 액세스할 수 있습니다.With DNS configuration, clients and services in the network can continue to access the registry at the registry's fully qualified domain name, such as myregistry.azurecr.io.

이 기능은 프리미엄 컨테이너 레지스트리 서비스 계층에서 사용할 수 있습니다.This feature is available in the Premium container registry service tier. 현재 레지스트리에 대해 최대 10 개의 개인 끝점을 설정할 수 있습니다.Currently, a maximum of 10 private endpoints can be set up for a registry. 레지스트리 서비스 계층 및 제한에 대한 자세한 내용은 Azure Container Registry 계층을 참조하세요.For information about registry service tiers and limits, see Azure Container Registry tiers.

중요

  • Azure Security Center는 현재 개인 끝점, 선택한 서브넷 또는 IP 주소에 대 한 액세스를 제한 하는 레지스트리에서 이미지 취약성 검사 를 수행할 수 없습니다.Azure Security Center can't currently perform image vulnerability scanning in a registry that restricts access to private endpoints, selected subnets, or IP addresses.
  • Azure DevOps Services, Web Apps 및 Azure Container Instances를 비롯 한 특정 Azure 서비스의 인스턴스도 네트워크 제한 컨테이너 레지스트리에 액세스할 수 없습니다.Instances of certain Azure services including Azure DevOps Services, Web Apps, and Azure Container Instances are also unable to access a network-restricted container registry.

사전 요구 사항Prerequisites

  • 이 문서에서 Azure CLI 단계를 사용하려면 Azure CLI 버전 2.6.0 이상이 권장됩니다.To use the Azure CLI steps in this article, Azure CLI version 2.6.0 or later is recommended. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.If you need to install or upgrade, see Install Azure CLI. 또는 Azure Cloud Shell에서 실행합니다.Or run in Azure Cloud Shell.

  • 컨테이너 레지스트리가 아직 없는 경우 하나 (프리미엄 계층 필요)를 만들고 Microsoft Container Registry에서와 같은 샘플 공용 이미지를 가져옵니다 mcr.microsoft.com/hello-world .If you don't already have a container registry, create one (Premium tier required) and import a sample public image such as mcr.microsoft.com/hello-world from Microsoft Container Registry. 예를 들어 Azure Portal 또는 Azure CLI를 사용하여 레지스트리를 만듭니다.For example, use the Azure portal or the Azure CLI to create a registry.

  • 다른 Azure 구독의 프라이빗 링크를 사용하여 레지스트리 액세스를 구성하려면 해당 구독에 Azure Container Registry에 대한 리소스 공급자를 등록해야 합니다.To configure registry access using a private link in a different Azure subscription, you need to register the resource provider for Azure Container Registry in that subscription. 다음은 그 예입니다.For example:

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

이 문서의 Azure CLI 예제에서는 다음과 같은 환경 변수들을 사용합니다.The Azure CLI examples in this article use the following environment variables. 사용자 환경에 적절한 값으로 대체합니다.Substitute values appropriate for your environment. 모든 예제는 다음과 같이 Bash 셸용으로 서식이 지정되어 있습니다.All examples are formatted for the Bash shell:

REGISTRY_NAME=<container-registry-name>
REGISTRY_LOCATION=<container-registry-location> # Azure region such as westeurope where registry created
RESOURCE_GROUP=<resource-group-name>
VM_NAME=<virtual-machine-name>

Docker 사용 가상 컴퓨터 만들기Create a Docker-enabled virtual machine

테스트를 위해 Docker 사용 Ubuntu VM을 사용 하 여 Azure container registry에 액세스 합니다.For test purposes, use a Docker-enabled Ubuntu VM to access an Azure container registry. 레지스트리에 대 한 Azure Active Directory 인증을 사용 하려면 VM에 Azure CLI 도 설치 합니다.To use Azure Active Directory authentication to the registry, also install the Azure CLI on the VM. Azure 가상 머신이 이미 있는 경우이 만들기 단계를 건너뜁니다.If you already have an Azure virtual machine, skip this creation step.

가상 머신과 컨테이너 레지스트리에 동일한 리소스 그룹을 사용할 수 있습니다.You may use the same resource group for your virtual machine and your container registry. 이 설정은 종료 시 정리 작업을 단순화 하지만 필요 하지는 않습니다.This setup simplifies clean-up at the end but isn't required. 가상 컴퓨터 및 가상 네트워크에 대 한 별도의 리소스 그룹을 만들도록 선택 하는 경우 az group create를 실행 합니다.If you choose to create a separate resource group for the virtual machine and virtual network, run az group create. 다음 예제에서는 리소스 그룹 이름 및 레지스트리 위치에 대해 환경 변수를 설정 했다고 가정 합니다.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

이제 az vm create를 사용 하 여 기본 Ubuntu Azure virtual machine을 배포 합니다.Now deploy a default Ubuntu Azure virtual machine with az vm create. 다음 예제에서는 Mydockervm이라는 vm을 만듭니다.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

VM을 만드는 데 몇 분 정도 걸립니다.It takes a few minutes for the VM to be created. 명령이 완료되면 Azure CLI에 표시된 publicIpAddress를 기록해 둡니다.When the command completes, take note of the publicIpAddress displayed by the Azure CLI. 이 주소를 사용하여 VM에 SSH 연결을 만듭니다.Use this address to make SSH connections to the VM.

VM에 Docker 설치Install Docker on the VM

VM이 실행된 후 VM에 SSH 연결을 만듭니다.After the VM is running, make an SSH connection to the VM. publicIpAddress를 VM의 공용 IP 주소로 바꿉니다.Replace publicIpAddress with the public IP address of your VM.

ssh azureuser@publicIpAddress

다음 명령을 실행 하 여 Ubuntu VM에 Docker를 설치 합니다.Run the following commands to install Docker on the Ubuntu VM:

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

설치 후 다음 명령을 실행하여 VM에서 Docker가 제대로 실행되는지 확인합니다.After installation, run the following command to verify that Docker is running properly on the VM:

sudo docker run -it hello-world

출력:Output:

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

Azure CLI 설치Install the Azure CLI

apt를 사용하여 Azure CLI 설치의 단계를 따라 Ubuntu 가상 머신에 Azure CLI를 설치합니다.Follow the steps in Install Azure CLI with apt to install the Azure CLI on your Ubuntu virtual machine. 예를 들면 다음과 같습니다.For example:

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

SSH 연결을 종료 합니다.Exit the SSH connection.

네트워크 및 서브넷 이름 가져오기Get network and subnet names

가상 네트워크 및 서브넷의 이름이 아직 없다면 프라이빗 링크를 설정하기 위해 필요합니다.If you don't have them already, you'll need the names of a virtual network and subnet to set up a private link. 이 예제에서는 VM에 대해 동일한 서브넷을 사용하며 레지스트리의 프라이빗 엔드포인트를 사용합니다.In this example, you use the same subnet for the VM and the registry's private endpoint. 그러나 많은 시나리오에서는 별도의 서브넷에서 엔드포인트를 설정합니다.However, in many scenarios you would set up the endpoint in a separate subnet.

VM을 만들 때 Azure는 기본적으로 동일한 리소스 그룹에서 가상 네트워크를 만듭니다.When you create a VM, Azure by default creates a virtual network in the same resource group. 가상 네트워크의 이름은 가상 머신의 이름을 기반으로 합니다.The name of the virtual network is based on the name of the virtual machine. 예를 들어 가상 머신의 이름을 myDockerVM 으로 지정하는 경우, 기본 가상 네트워크 이름은 myDockerVMVNET 으로 설정되며 서브넷 이름은 myDockerVMSubnet 으로 지정됩니다.For example, if you name your virtual machine myDockerVM , the default virtual network name is myDockerVMVNET , with a subnet named myDockerVMSubnet. az network vnet list 명령을 실행하여 환경 변수에서 이러한 값들을 다음과 같이 설정합니다.Set these values in environment variables by running the az network vnet list command:

NETWORK_NAME=$(az network vnet list \
  --resource-group $RESOURCE_GROUP \
  --query '[].{Name: name}' --output tsv)

SUBNET_NAME=$(az network vnet list \
  --resource-group $RESOURCE_GROUP \
  --query '[].{Subnet: subnets[0].name}' --output tsv)

echo NETWORK_NAME=$NETWORK_NAME
echo SUBNET_NAME=$SUBNET_NAME

서브넷에서 네트워크 정책 사용 안 함Disable network policies in subnet

프라이빗 엔드포인트에 대한 서브넷의 네트워크 보안 그룹과 같은 네트워크 정책을 사용하지 않도록 설정합니다.Disable network policies such as network security groups in the subnet for the private endpoint. az 네트워크 vnet 서브넷 업데이트를 사용해 서브넷 구성을 다음과 같이 업데이트합니다.Update your subnet configuration with az network vnet subnet update:

az network vnet subnet update \
 --name $SUBNET_NAME \
 --vnet-name $NETWORK_NAME \
 --resource-group $RESOURCE_GROUP \
 --disable-private-endpoint-network-policies

프라이빗 DNS 영역 구성Configure the private DNS zone

개인 Azure container registry 도메인에 대 한 개인 DNS 영역 을 만듭니다.Create a private DNS zone for the private Azure container registry domain. 이후 단계에서는 이 DNS 영역에서 레지스트리 도메인에 대한 DNS 레코드를 만듭니다.In later steps, you create DNS records for your registry domain in this DNS zone.

프라이빗 영역을 사용하여 Azure Container Registry에 대한 기본 DNS 확인을 재정의하려면 영역 이름을 privatelink.azurecr.io 로 지정해야 합니다.To use a private zone to override the default DNS resolution for your Azure container registry, the zone must be named privatelink.azurecr.io. 다음과 같은 az network private-dns zone create 명령을 실행하여 프라이빗 영역을 만듭니다.Run the following az network private-dns zone create command to create the private zone:

az network private-dns zone create \
  --resource-group $RESOURCE_GROUP \
  --name "privatelink.azurecr.io"

az network private-dns link vnet create를 실행하여 프라이빗 영역을 가상 네트워크와 연결합니다.Run az network private-dns link vnet create to associate your private zone with the virtual network. 이 예제에서는 myDNSLink 라는 링크를 만듭니다.This example creates a link called myDNSLink.

az network private-dns link vnet create \
  --resource-group $RESOURCE_GROUP \
  --zone-name "privatelink.azurecr.io" \
  --name MyDNSLink \
  --virtual-network $NETWORK_NAME \
  --registration-enabled false

프라이빗 레지스트리 엔드포인트 만들기Create a private registry endpoint

이 섹션에서는 가상 네트워크에 레지스트리의 프라이빗 엔드포인트를 만듭니다.In this section, create the registry's private endpoint in the virtual network. 먼저 레지스트리의 리소스 ID를 가져옵니다.First, get the resource ID of your registry:

REGISTRY_ID=$(az acr show --name $REGISTRY_NAME \
  --query 'id' --output tsv)

az network private-endpoint create 명령을 실행하여 레지스트리의 프라이빗 엔드포인트를 만듭니다.Run the az network private-endpoint create command to create the registry's private endpoint.

다음 예제에서는 엔드포인트 myPrivateEndpoint 와 서비스 연결 myConnection 을 만듭니다.The following example creates the endpoint myPrivateEndpoint and service connection myConnection. 엔드포인트에 대한 컨테이너 레지스트리 리소스를 지정하려면 다음과 같이 --group-ids registry를 전달합니다.To specify a container registry resource for the endpoint, pass --group-ids registry:

az network private-endpoint create \
    --name myPrivateEndpoint \
    --resource-group $RESOURCE_GROUP \
    --vnet-name $NETWORK_NAME \
    --subnet $SUBNET_NAME \
    --private-connection-resource-id $REGISTRY_ID \
    --group-ids registry \
    --connection-name myConnection

개인 IP 주소 가져오기Get private IP addresses

az network private-endpoint show를 실행하여 네트워크 인터페이스 ID에 대한 엔드포인트를 쿼리합니다.Run az network private-endpoint show to query the endpoint for the network interface ID:

NETWORK_INTERFACE_ID=$(az network private-endpoint show \
  --name myPrivateEndpoint \
  --resource-group $RESOURCE_GROUP \
  --query 'networkInterfaces[0].id' \
  --output tsv)

이 예제에서 네트워크 인터페이스와 연결된 것은 컨테이너 레지스트리에 대한 두 개의 개인 IP 주소인데, 하나는 레지스트리 자체에 대한 주소이며 다른 하나는 레지스트리의 데이터 엔드포인트에 대한 주소입니다.Associated with the network interface in this example are two private IP addresses for the container registry: one for the registry itself, and one for the registry's data endpoint. 다음 az resource show 명령을 실행하면 컨테이너 레지스트리와 레지스트리의 데이터 엔드포인트에 대한 개인 IP 주소를 가져옵니다.The following az resource show commands get the private IP addresses for the container registry and the registry's data endpoint:

PRIVATE_IP=$(az resource show \
  --ids $NETWORK_INTERFACE_ID \
  --api-version 2019-04-01 \
  --query 'properties.ipConfigurations[1].properties.privateIPAddress' \
  --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az resource show \
  --ids $NETWORK_INTERFACE_ID \
  --api-version 2019-04-01 \
  --query 'properties.ipConfigurations[0].properties.privateIPAddress' \
  --output tsv)

참고

레지스트리가 지역에서 복제된 경우 각 레지스트리 복제본의 추가 데이터 엔드포인트를 쿼리합니다.If your registry is geo-replicated, query for the additional data endpoint for each registry replica.

프라이빗 영역에서 DNS 레코드 만들기Create DNS records in the private zone

다음 명령을 실행하면 레지스트리 엔드포인트와 그 데이터 엔드포인트에 대한 DNS 레코드가 프라이빗 영역에 생성됩니다.The following commands create DNS records in the private zone for the registry endpoint and its data endpoint. 예를 들어 westeurope 지역에 myregistry 라는 이름의 레지스트리가 있다면 엔드포인트 이름은 myregistry.azurecr.iomyregistry.westeurope.data.azurecr.io입니다.For example, if you have a registry named myregistry in the westeurope region, the endpoint names are myregistry.azurecr.io and myregistry.westeurope.data.azurecr.io.

참고

레지스트리가 지역에서 복제된 경우, 각 복제본의 데이터 엔드포인트 IP에 대해 DNS 레코드를 추가로 만듭니다.If your registry is geo-replicated, create additonal DNS records for each replica's data endpoint IP.

먼저 az network private-dns record-set a create 명령을 실행하여 레지스트리 엔드포인트 및 데이터 엔드포인트에 대해 빈 A 레코드 집합을 만듭니다.First run az network private-dns record-set a create to create empty A record sets for the registry endpoint and data endpoint:

az network private-dns record-set a create \
  --name $REGISTRY_NAME \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP

# Specify registry region in data endpoint name
az network private-dns record-set a create \
  --name ${REGISTRY_NAME}.${REGISTRY_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP

az network private-dns record-set add-record 명령을 실행하여 레지스트리 엔드포인트 및 데이터 엔드포인트에 대한 A 레코드를 만듭니다.Run the az network private-dns record-set a add-record command to create the A records for the registry endpoint and data endpoint:

az network private-dns record-set a add-record \
  --record-set-name $REGISTRY_NAME \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP \
  --ipv4-address $PRIVATE_IP

# Specify registry region in data endpoint name
az network private-dns record-set a add-record \
  --record-set-name ${REGISTRY_NAME}.${REGISTRY_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP \
  --ipv4-address $DATA_ENDPOINT_PRIVATE_IP

이제 프라이빗 링크가 구성되었으며 사용할 준비가 되었습니다.The private link is now configured and ready for use.

레지스트리를 만들 때 프라이빗 링크를 설정하거나 기존 레지스트리에 프라이빗 링크를 추가합니다.Set up a private link when you create a registry, or add a private link to an existing registry. 다음 단계는 테스트를 위해 VM을 사용하여 가상 네트워크 및 서브넷을 이미 설정했다고 가정합니다.The following steps assume you already have a virtual network and subnet set up with a VM for testing. 새 가상 네트워크 및 서브넷을 만들 수도 있습니다.You can also create a new virtual network and subnet.

프라이빗 엔드포인트 만들기 - 새 레지스트리Create a private endpoint - new registry

  1. 포털에서 레지스트리를 만들 때 기본 탭의 SKU 에서 프리미엄 을 선택합니다.When creating a registry in the portal, on the Basics tab, in SKU , select Premium.

  2. 네트워킹 탭을 선택합니다.Select the Networking tab.

  3. 네트워크 연결 에서 프라이빗 엔드포인트 > + 추가 를 선택합니다.In Network connectivity , select Private endpoint > + Add.

  4. 다음 정보를 입력하거나 선택합니다.Enter or select the following information:

    설정Setting Value
    SubscriptionSubscription 구독을 선택합니다.Select your subscription.
    Resource groupResource group 기존 그룹의 이름을 입력하거나 새 그룹을 만듭니다.Enter the name of an existing group or create a new one.
    속성Name 고유한 이름을 입력합니다.Enter a unique name.
    하위 리소스Subresource 레지스트리 를 선택합니다.Select registry
    네트워킹Networking
    가상 네트워크Virtual network 가상 머신이 배포된 가상 네트워크(예: myDockerVMVNET )를 선택합니다.Select the virtual network where your virtual machine is deployed, such as myDockerVMVNET.
    서브넷Subnet 가상 머신이 배포된 서브넷(예: myDockerVMSubnet )을 선택합니다.Select a subnet, such as myDockerVMSubnet where your virtual machine is deployed.
    프라이빗 DNS 통합Private DNS Integration
    프라이빗 DNS 영역과 통합Integrate with private DNS zone 를 선택합니다.Select Yes.
    프라이빗 DNS 영역Private DNS Zone (새) privatelink.azurecr.io 를 선택합니다.Select (New) privatelink.azurecr.io
  5. 나머지 레지스트리 설정을 구성한 다음, 검토 + 만들기 를 선택합니다.Configure the remaining registry settings, and then select Review + Create.

프라이빗 엔드포인트를 사용하여 레지스트리 만들기

프라이빗 엔드포인트 만들기 - 기존 레지스트리Create a private endpoint - existing registry

  1. 포털에서 컨테이너 레지스트리로 이동합니다.In the portal, navigate to your container registry.

  2. 설정 에서 네트워킹 을 선택합니다.Under Settings , select Networking.

  3. 프라이빗 엔드포인트 탭에서 + 프라이빗 엔드포인트 를 선택합니다.On the Private endpoints tab, select + Private endpoint.

  4. 기본 탭에서 다음 정보를 입력하거나 선택합니다.In the Basics tab, enter or select the following information:

    설정Setting Value
    프로젝트 세부 정보Project details
    SubscriptionSubscription 구독을 선택합니다.Select your subscription.
    Resource groupResource group 기존 그룹의 이름을 입력하거나 새 그룹을 만듭니다.Enter the name of an existing group or create a new one.
    인스턴스 세부 정보Instance details
    속성Name 이름을 입력합니다.Enter a name.
    지역Region 지역을 선택합니다.Select a region.
  5. 완료되면 다음: 리소스 를 선택합니다.Select Next: Resource.

  6. 다음 정보를 입력하거나 선택합니다.Enter or select the following information:

    설정Setting Value
    연결 방법Connection method 내 디렉터리의 Azure 리소스에 연결 을 선택합니다.Select Connect to an Azure resource in my directory.
    SubscriptionSubscription 구독을 선택합니다.Select your subscription.
    리소스 유형Resource type Microsoft.ContainerRegistry/registries 를 선택합니다.Select Microsoft.ContainerRegistry/registries.
    리소스Resource 레지스트리의 이름을 선택Select the name of your registry
    대상 하위 리소스Target subresource 레지스트리 를 선택합니다.Select registry
  7. 완료되면 다음: 구성 을 선택합니다.Select Next: Configuration.

  8. 다음과 같이 정보를 입력하거나 선택합니다.Enter or select the information:

    설정Setting Value
    네트워킹Networking
    가상 네트워크Virtual network 가상 머신이 배포된 가상 네트워크(예: myDockerVMVNET )를 선택합니다.Select the virtual network where your virtual machine is deployed, such as myDockerVMVNET.
    서브넷Subnet 가상 머신이 배포된 서브넷(예: myDockerVMSubnet )을 선택합니다.Select a subnet, such as myDockerVMSubnet where your virtual machine is deployed.
    프라이빗 DNS 통합Private DNS Integration
    프라이빗 DNS 영역과 통합Integrate with private DNS zone 를 선택합니다.Select Yes.
    프라이빗 DNS 영역Private DNS Zone (새) privatelink.azurecr.io 를 선택합니다.Select (New) privatelink.azurecr.io
  9. 검토 + 만들기 를 선택합니다.Select Review + create. 검토 + 만들기 페이지로 이동됩니다. 여기서 구성이 유효한지 검사됩니다.You're taken to the Review + create page where Azure validates your configuration.

  10. 유효성 검사 통과 메시지가 표시되면 만들기 를 선택합니다.When you see the Validation passed message, select Create.

프라이빗 엔드포인트를 만든 후 프라이빗 영역의 DNS 설정은 포털의 프라이빗 엔드포인트 페이지에 다음과 같이 표시됩니다.After the private endpoint is created, DNS settings in the private zone appear on the Private endpoints page in the portal:

  1. 포털에서 컨테이너 레지스트리로 이동하고 설정 > 네트워킹 을 선택합니다.In the portal, navigate to your container registry and select Settings > Networking.
  2. 사용자가 만든 프라이빗 엔드포인트를 프라이빗 엔드포인트 탭에서 선택합니다.On the Private endpoints tab, select the private endpoint you created.
  3. 개요 페이지에서 링크 설정 및 사용자 지정 DNS 설정을 검토합니다.On the Overview page, review the link settings and custom DNS settings.

엔드포인트 DNS 설정

이제 프라이빗 링크가 구성되었으며 사용할 준비가 되었습니다.Your private link is now configured and ready for use.

공용 액세스 사용 안 함Disable public access

상당수 시나리오의 경우, 공용 네트워크의 레지스트리 액세스를 사용하지 않도록 설정합니다.For many scenarios, disable registry access from public networks. 이 구성을 적용하면 가상 네트워크 외부의 클라이언트가 레지스트리 엔드포인트에 도달하지 않습니다.This configuration prevents clients outside the virtual network from reaching the registry endpoints.

공용 액세스 사용 안 함 - CLIDisable public access - CLI

Azure CLI를 통해 공용 액세스를 사용하지 않으려면 az acr update를 실행하고 --public-network-enabledfalse로 설정합니다.To disable public access using the Azure CLI, run az acr update and set --public-network-enabled to false.

참고

public-network-enabled 인수에는 Azure CLI 2.6.0 이상이 필요합니다.The public-network-enabled argument requires Azure CLI 2.6.0 or later.

az acr update --name $REGISTRY_NAME --public-network-enabled false

공용 액세스 사용 안 함 - 포털Disable public access - portal

  1. 포털에서 컨테이너 레지스트리로 이동하고 설정 > 네트워킹 을 선택합니다.In the portal, navigate to your container registry and select Settings > Networking.
  2. 공용 액세스 탭의 공용 네트워크 액세스 허용 에서 사용 안 함 을 선택합니다.On the Public access tab, in Allow public network access , select Disabled. 그런 다음 저장 을 선택합니다.Then select Save.

프라이빗 엔드포인트의 동일한 서브넷 내에 있는 리소스가 개인 IP 주소를 통해 레지스트리에 연결되고 프라이빗 DNS 영역이 올바르게 통합되었는지 확인해야 합니다.You should validate that the resources within the subnet of the private endpoint connect to your registry over a private IP address, and have the correct private DNS zone integration.

프라이빗 링크 연결의 유효성을 검사하려면 가상 네트워크에서 설정한 가상 머신에 대해 SSH를 수행합니다.To validate the private link connection, SSH to the virtual machine you set up in the virtual network.

또는와 같은 유틸리티를 nslookup 실행 dig 하 여 개인 링크를 통해 레지스트리의 IP 주소를 조회 합니다.Run a utility such as nslookup or dig to look up the IP address of your registry over the private link. 예를 들어:For example:

dig $REGISTRY_NAME.azurecr.io

예제 출력은 서브넷의 주소 공간에 있는 레지스트리의 IP 주소를 다음과 같이 표시합니다.Example output shows the registry's IP address in the address space of the subnet:

[...]
; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> myregistry.azurecr.io
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52155
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;myregistry.azurecr.io.         IN      A

;; ANSWER SECTION:
myregistry.azurecr.io.  1783    IN      CNAME   myregistry.privatelink.azurecr.io.
myregistry.privatelink.azurecr.io. 10 IN A      10.0.0.7

[...]

이 결과를 공용 엔드포인트에서 동일한 레지스트리에 대한 dig 출력의 공용 IP 주소와 다음과 같이 비교합니다.Compare this result with the public IP address in dig output for the same registry over a public endpoint:

[...]
;; ANSWER SECTION:
myregistry.azurecr.io.  2881    IN  CNAME   myregistry.privatelink.azurecr.io.
myregistry.privatelink.azurecr.io. 2881 IN CNAME xxxx.xx.azcr.io.
xxxx.xx.azcr.io.    300 IN  CNAME   xxxx-xxx-reg.trafficmanager.net.
xxxx-xxx-reg.trafficmanager.net. 300 IN CNAME   xxxx.westeurope.cloudapp.azure.com.
xxxx.westeurope.cloudapp.azure.com. 10  IN A 20.45.122.144

[...]

또한 서브넷의 가상 머신에서 레지스트리 작업을 수행할 수 있는지 확인합니다.Also verify that you can perform registry operations from the virtual machine in the subnet. 가상 머신에 대한 SSH 연결을 설정하고 az acr login 명령을 실행하여 레지스트리에 로그인합니다.Make an SSH connection to your virtual machine, and run az acr login to login to your registry. VM 구성에 따라 다음 명령에 sudo를 접두사로 붙여야 할 수도 있습니다.Depending on your VM configuration, you might need to prefix the following commands with sudo.

az acr login --name $REGISTRY_NAME

docker pull과 같은 레지스트리 작업을 수행하여 레지스트리에서 샘플 이미지를 끌어옵니다.Perform registry operations such as docker pull to pull a sample image from the registry. hello-world:v1을 레지스트리에 적합한 이미지 및 태그로 바꾸고 레지스트리 로그인 서버 이름(모두 소문자)을 접두사로 사용합니다.Replace hello-world:v1 with an image and tag appropriate for your registry, prefixed with the registry login server name (all lowercase):

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

Docker는 이미지를 VM으로 끌어오는 데 성공합니다.Docker successfully pulls the image to the VM.

프라이빗 엔드포인트 연결 관리Manage private endpoint connections

Azure Portal을 사용하여 레지스트리의 프라이빗 엔드포인트 연결을 관리하거나 az acr private-endpoint-connection 명령 그룹의 명령을 사용하여 이 연결을 관리합니다.Manage a registry's private endpoint connections using the Azure portal, or by using commands in the az acr private-endpoint-connection command group. 작업에는 레지스트리의 프라이빗 엔드포인트 연결의 승인, 삭제, 나열, 거부 또는 세부 정보 표시가 포함됩니다.Operations include approve, delete, list, reject, or show details of a registry's private endpoint connections.

예를 들어, 레지스트리의 프라이빗 엔드포인트 연결을 나열하려면 az acr private-endpoint-connection list 명령을 실행합니다.For example, to list the private endpoint connections of a registry, run the az acr private-endpoint-connection list command. 다음은 그 예입니다.For example:

az acr private-endpoint-connection list \
  --registry-name $REGISTRY_NAME 

이 문서의 단계를 사용 하 여 개인 끝점 연결을 설정 하는 경우 레지스트리는 레지스트리에 대 한 Azure RBAC 권한이 있는 클라이언트 및 서비스의 연결을 자동으로 수락 합니다.When you set up a private endpoint connection using the steps in this article, the registry automatically accepts connections from clients and services that have Azure RBAC permissions on the registry. 연결의 수동 승인을 요구하도록 엔드포인트를 설정할 수 있습니다.You can set up the endpoint to require manual approval of connections. 프라이빗 엔드포인트 연결을 승인 및 거부하는 방법에 대한 자세한 내용은 프라이빗 엔드포인트 연결 관리를 참조하세요.For information about how to approve and reject private endpoint connections, see Manage a Private Endpoint Connection.

복제본에 대한 영역 레코드 추가Add zone records for replicas

이 문서에 표시 된 것 처럼 레지스트리에 개인 끝점 연결을 추가 하는 경우 레지스트리에 privatelink.azurecr.io 대 한 영역 및 레지스트리가 복제된 지역에서 해당 데이터 끝점에 DNS 레코드를 만듭니다.As shown in this article, when you add a private endpoint connection to a registry, you create DNS records in the privatelink.azurecr.io zone for the registry and its data endpoints in the regions where the registry is replicated.

나중에 새 복제본을 추가하는 경우, 해당 지역에서 데이터 엔드포인트에 대한 새 영역 레코드를 수동으로 추가해야 합니다.If you later add a new replica, you need to manually add a new zone record for the data endpoint in that region. 예를 들어 northeurope 위치에서 myregistry 의 복제본을 만드는 경우, myregistry.northeurope.data.azurecr.io에 대한 영역 레코드를 추가합니다.For example, if you create a replica of myregistry in the northeurope location, add a zone record for myregistry.northeurope.data.azurecr.io. 단계에 관한 설명은 이 문서의 프라이빗 영역에서 DNS 레코드 만들기를 참조하세요.For steps, see Create DNS records in the private zone in this article.

DNS 구성 옵션DNS configuration options

이 예제의 개인 끝점은 기본 가상 네트워크와 연결 된 개인 DNS 영역과 통합 됩니다.The private endpoint in this example integrates with a private DNS zone associated with a basic virtual network. 이 설치 프로그램은 Azure에서 제공 하는 DNS 서비스를 직접 사용 하 여 레지스트리의 공용 FQDN을 가상 네트워크의 개인 IP 주소에 대해 확인 합니다.This setup uses the Azure-provided DNS service directly to resolve the registry's public FQDN to its private IP address in the virtual network.

개인 링크는 사용자 지정 DNS 솔루션을 포함 하 여 개인 영역을 사용 하는 추가 DNS 구성 시나리오를 지원 합니다.Private link supports additional DNS configuration scenarios that use the private zone, including with custom DNS solutions. 예를 들어 가상 네트워크에 배포 된 사용자 지정 DNS 솔루션이 있거나 네트워크의 온-프레미스에서 VPN gateway 또는 Azure Express 경로를 사용 하 여 가상 네트워크에 연결 하는 경우를 예로 들어 볼 수 있습니다.For example, you might have a custom DNS solution deployed in the virtual network, or on-premises in a network you connect to the virtual network using a VPN gateway or Azure ExpressRoute.

이러한 시나리오에서 레지스트리의 공용 FQDN을 개인 IP 주소로 확인 하려면 Azure DNS 서비스 (168.63.129.16)에 대 한 서버 수준 전달자를 구성 해야 합니다.To resolve the registry's public FQDN to the private IP address in these scenarios, you need to configure a server-level forwarder to the Azure DNS service (168.63.129.16). 정확한 구성 옵션 및 단계는 기존 네트워크 및 DNS에 종속 됩니다.Exact configuration options and steps depend on your existing networks and DNS. 예제는 Azure 개인 끝점 DNS 구성을 참조 하세요.For examples, see Azure Private Endpoint DNS configuration.

중요

고가용성을 위해 여러 지역에서 개인 끝점을 만든 경우 각 지역에 별도의 리소스 그룹을 사용 하 고 가상 네트워크와 연결 된 개인 DNS 영역을 추가 하는 것이 좋습니다.If for high availability you created private endpoints in several regions, we recommend that you use a separate resource group in each region and place the virtual network and the associated private DNS zone in it. 또한이 구성은 동일한 개인 DNS 영역을 공유 하 여 발생 하는 예기치 않은 DNS 확인을 방지 합니다.This configuration also prevents unpredictable DNS resolution caused by sharing the same private DNS zone.

리소스 정리Clean up resources

동일한 리소스 그룹에서 모든 Azure 리소스를 만들었으며 이 리소스가 더 이상 필요하지 않은 경우, 단일한 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 $RESOURCE_GROUP

포털에서 리소스를 정리하려면 리소스 그룹으로 이동합니다.To clean up your resources in the portal, navigate to your resource group. 리소스 그룹이 로드되면 리소스 그룹 삭제 를 클릭하여 리소스 그룹 및 이 그룹에 저장된 리소스를 제거합니다.Once the resource group is loaded, click on Delete resource group to remove the resource group and the resources stored there.

다음 단계Next steps