Azure sanal ağında hizmet uç noktası kullanarak kapsayıcı kayıt defterine erişimi kısıtlama

Azure Sanal Ağ, Azure ve şirket içi kaynaklarınız için güvenli ve özel ağ sağlar. Hizmet uç noktası, kapsayıcı kayıt defterinizin genel IP adresini yalnızca sanal ağınızın güvenliğini sağlamanızı sağlar. Bu uç nokta, trafiğe Azure omurga ağı üzerinden kaynağa en uygun yolu sağlar. Sanal ağın ve alt ağın kimlikleri de her istekle birlikte iletilir.

Bu makalede, bir sanal ağda kapsayıcı kayıt defteri hizmet uç noktasının (önizleme) nasıl yapılandırılır gösterilmektedir.

Her kayıt defteri en fazla 100 sanal ağ kuralını destekler.

Önemli

Azure Container Registry artık Azure Özel Bağlantı destekleyerek sanal ağdan gelen özel uç noktaların kayıt defterine yerleştirilmesini sağlıyor. Özel uç noktalara, özel IP adresleri kullanılarak sanal ağ içinden erişilebilir. Çoğu ağ senaryosunda hizmet uç noktaları yerine özel uç noktaları kullanmanızı öneririz. Kapsayıcı kayıt defteri, sanal ağdan yapılandırılan hem özel bağlantı hem de hizmet uç noktası özelliklerinin etkinleştirilmesini desteklemez. Bu nedenle, listeyi çalıştırmanızı ve ağ kurallarını gerektiği gibi kaldırmanızı öneririz.

Bir kayıt defteri hizmet uç noktasını yapılandırmak Premium kapsayıcı kayıt defteri hizmet katmanında kullanılabilir. Kayıt defteri hizmet katmanları ve sınırları hakkında bilgi için bkz . Azure Container Registry hizmet katmanları.

Önizleme sınırlamaları

Önemli

Bazı işlevler kullanılamayabilir veya özel uç noktalara, seçili alt ağlara veya IP adreslerine erişimi kısıtlayan bir kapsayıcı kayıt defterinde daha fazla yapılandırma gerektirebilir.

  • Bir kayıt defterine genel ağ erişimi devre dışı bırakıldığında, Azure Güvenlik Merkezi dahil olmak üzere bazı güvenilen hizmetler tarafından kayıt defteri erişimi, ağ kurallarını atlamak için bir ağ ayarının etkinleştirilmesini gerektirir.
  • Genel ağ erişimi devre dışı bırakıldıktan sonra, Azure DevOps Services dahil olmak üzere belirli Azure hizmetlerinin örnekleri şu anda kapsayıcı kayıt defterine erişemez.
  • Özel uç noktalar şu anda Azure DevOps yönetilen aracılarında desteklenmemektedir. Özel uç noktaya ağ görüş hattıyla şirket içinde barındırılan bir aracı kullanmanız gerekir.
  • Kayıt defterinin onaylı bir özel uç noktası varsa ve genel ağ erişimi devre dışıysa, depolar ve etiketler Azure portalı, Azure CLI veya diğer araçlar kullanılarak sanal ağın dışında listelenemez.

Ön koşullar

  • Bu makaledeki Azure CLI adımlarını kullanmak için Azure CLI sürüm 2.0.58 veya üzeri gereklidir. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

  • Henüz bir kapsayıcı kayıt defteriniz yoksa, bir tane oluşturun (Premium katman gerekli) ve Docker Hub'dan gibi hello-world örnek bir görüntü gönderin. Örneğin, kayıt defteri oluşturmak için Azure portalını veya Azure CLI'yı kullanın.

  • Farklı bir Azure aboneliğindeki bir hizmet uç noktasını kullanarak kayıt defteri erişimini kısıtlamak istiyorsanız kaynak sağlayıcısını bu aboneliğe Azure Container Registry için kaydedin. Örnek:

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

Docker özellikli sanal makine oluşturma

Test amacıyla, Azure kapsayıcı kayıt defterine erişmek için Docker özellikli bir Ubuntu VM kullanın. Kayıt defterinde Microsoft Entra kimlik doğrulamasını kullanmak için VM'ye Azure CLI'yı da yükleyin. Zaten bir Azure sanal makineniz varsa bu oluşturma adımını atlayın.

Sanal makineniz ve kapsayıcı kayıt defteriniz için aynı kaynak grubunu kullanabilirsiniz. Bu kurulum sonunda temizlemeyi basitleştirir ancak gerekli değildir. Sanal makine ve sanal ağ için ayrı bir kaynak grubu oluşturmayı seçerseniz az group create komutunu çalıştırın. Aşağıdaki örnekte, kaynak grubu adı ve kayıt defteri konumu için ortam değişkenleri ayarladığınız varsayılır:

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

Şimdi az vm create ile varsayılan bir Ubuntu Azure sanal makinesi dağıtın. Aşağıdaki örnek myDockerVM adlı bir VM oluşturur.

VM_NAME=myDockerVM

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

VM’nin oluşturulması birkaç dakika sürer. Komut tamamlandığında Azure CLI tarafından görüntülenenleri publicIpAddress not alın. VM'ye SSH bağlantıları oluşturmak için bu adresi kullanın.

Docker'ı VM'ye yükleme

VM çalıştırıldıktan sonra VM'ye bir SSH bağlantısı oluşturun. publicIpAddress değerini VM'nizin genel IP adresiyle değiştirin.

ssh azureuser@publicIpAddress

Ubuntu VM'sine Docker yüklemek için aşağıdaki komutları çalıştırın:

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

Yüklemeden sonra, Docker'ın VM'de düzgün çalıştığını doğrulamak için aşağıdaki komutu çalıştırın:

sudo docker run -it hello-world

Çıkış:

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

Azure CLI'yi yükleme

Azure CLI'yı Ubuntu sanal makinenize yüklemek için Apt ile Azure CLI'yı yükleme makalesindeki adımları izleyin. Örnek:

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

SSH bağlantısından çıkın.

Kayıt defteri için ağ erişimini yapılandırma

Bu bölümde, kapsayıcı kayıt defterinizi Azure sanal ağındaki bir alt ağdan erişime izin verecek şekilde yapılandırın. Adımlar Azure CLI kullanılarak sağlanır.

Alt ağa hizmet uç noktası ekleme

Vm oluşturduğunuzda, Azure varsayılan olarak aynı kaynak grubunda bir sanal ağ oluşturur. Sanal ağın adı, sanal makinenin adına bağlıdır. Örneğin, sanal makinenizi myDockerVM olarak adlandırırsanız, varsayılan sanal ağ adı myDockerVMVNET'tir ve myDockerVMSubnet adlı bir alt ağ kullanılır. Az network vnet list komutunu kullanarak bunu doğrulayın:

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

Çıkış:

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

Alt ağınıza bir Microsoft.ContainerRegistry hizmet uç noktası eklemek için az network vnet subnet update komutunu kullanın. Aşağıdaki komutta sanal ağınızın ve alt ağınızın adlarını yazın:

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

Alt ağın kaynak kimliğini almak için az network vnet subnet show komutunu kullanın. Bir ağ erişim kuralı yapılandırmak için sonraki bir adımda buna ihtiyacınız vardır.

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

Çıkış:

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

Varsayılan ağ erişimini kayıt defterine değiştirme

Varsayılan olarak, Azure kapsayıcı kayıt defteri herhangi bir ağdaki konaklardan bağlantılara izin verir. Seçili ağa erişimi sınırlamak için varsayılan eylemi erişimi reddedecek şekilde değiştirin. Aşağıdaki az acr update komutunda kayıt defterinizin adını yazın:

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

Kayıt defterine ağ kuralı ekleme

Kayıt defterinize VM'nin alt ağından erişime izin veren bir ağ kuralı eklemek için az acr network-rule add komutunu kullanın. Aşağıdaki komutta kapsayıcı kayıt defterinin adını ve alt ağın kaynak kimliğini yazın:

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

Kayıt defterine erişimi doğrulama

Yapılandırmanın güncelleştirilecek şekilde birkaç dakika bekledikten sonra VM'nin kapsayıcı kayıt defterine erişebildiğini doğrulayın. VM'nize SSH bağlantısı oluşturun ve kayıt defterinizde oturum açmak için az acr login komutunu çalıştırın.

az acr login --name mycontainerregistry

Kayıt defterinden örnek bir görüntü çekmek için çalıştırma docker pull gibi kayıt defteri işlemleri gerçekleştirebilirsiniz. Kayıt defteri oturum açma sunucusu adıyla ön ekli kayıt defterinize uygun bir görüntü ve etiket değerini değiştirin (tümü küçük harfle):

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

Docker görüntüyü vm'ye başarıyla çeker.

Bu örnekte, ağ erişim kuralı aracılığıyla özel kapsayıcı kayıt defterine erişebildiğiniz gösterilmektedir. Ancak, kayıt defterine ağ erişim kuralı yapılandırılmamış bir oturum açma konağından erişilemiyor. Komutunu veya docker login komutunu kullanarak az acr login başka bir konaktan oturum açmayı denerseniz, çıktı aşağıdakine benzer:

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

Varsayılan kayıt defteri erişimini geri yükleme

Kayıt defterini varsayılan olarak erişime izin verecek şekilde geri yüklemek için, yapılandırılan ağ kurallarını kaldırın. Ardından varsayılan eylemi erişime izin verecek şekilde ayarlayın.

Ağ kurallarını kaldırma

Kayıt defteriniz için yapılandırılmış ağ kurallarının listesini görmek için aşağıdaki az acr network-rule list komutunu çalıştırın:

az acr network-rule list --name mycontainerregistry 

Yapılandırılan her kural için az acr network-rule remove komutunu çalıştırarak kaldırın. Örnek:

# 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

Erişime izin ver

Aşağıdaki az acr update komutunda kayıt defterinizin adını yazın:

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

Kaynakları temizleme

Tüm Azure kaynaklarını aynı kaynak grubunda oluşturduysanız ve artık bunlara ihtiyacınız yoksa, isteğe bağlı olarak tek bir az group delete komutu kullanarak kaynakları silebilirsiniz :

az group delete --name myResourceGroup

Sonraki adımlar

  • Sanal ağda özel uç nokta kullanarak kayıt defterine erişimi kısıtlamak için bkz. Azure kapsayıcı kayıt defteri için Azure Özel Bağlantı yapılandırma.
  • İstemci güvenlik duvarının arkasından kayıt defteri erişim kuralları ayarlamanız gerekiyorsa bkz . Güvenlik duvarının arkasındaki Azure kapsayıcı kayıt defterine erişmek için kuralları yapılandırma.