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ı
- Azure Container Registry için hizmet uç noktalarının gelecekte geliştirilmesi şu anda planlı değildir. Bunun yerine özel uç noktaları kullanmanızı öneririz.
- Kayıt defterinde hizmet uç noktalarını yapılandırmak için Azure portalını kullanamazsınız.
- Hizmet uç noktası kullanarak kapsayıcı kayıt defterine erişmek için konak olarak yalnızca bir Azure Kubernetes Service kümesi veya Azure sanal makinesi kullanılabilir. Azure Container Instances dahil olmak üzere diğer Azure hizmetleri desteklenmez.
- Azure Container Registry için hizmet uç noktaları, Azure ABD Kamu bulutunda veya 21Vianet bulutu tarafından sağlanan Microsoft Azure'da desteklenmez.
Ö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.
Önkoş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. Örneğin:
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
Çıktı:
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. Örneğin:
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}"
Çıktı:
[
{
"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
Çıktı:
/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. Örneğin:
# 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.