Membatasi akses ke registri kontainer menggunakan titik akhir layanan di jaringan virtual Azure

Azure Virtual Network menyediakan jaringan pribadi yang aman untuk sumber daya Azure dan lokal Anda. Titik akhir layanan memungkinkan Anda untuk mengamankan alamat IP publik registri kontainer Anda hanya ke jaringan virtual Anda. Endpoint ini memberi lalu lintas rute optimal ke sumber daya melalui jaringan backbone Azure. Identitas subnet dan jaringan virtual juga ditransmisikan dengan setiap permintaan.

Artikel ini memperlihatkan cara mengkonfigurasi titik akhir layanan registri kontainer (pratinjau) dalam jaringan virtual.

Setiap registri mendukung maksimum 100 aturan jaringan virtual.

Penting

Azure Container Registry sekarang mendukung Azure Private Link, memungkinkan titik akhir pribadi dari jaringan virtual untuk ditempatkan pada registri. Titik akhir privat dapat diakses dari dalam jaringan virtual, menggunakan alamat IP pribadi. Sebaiknya gunakan titik akhir privat dibandingkan titik akhir layanan untuk sebagian besar skenario jaringan. Registri kontainer tidak mendukung pengaktifan fitur tautan privat dan titik akhir layanan yang dikonfigurasi dari jaringan virtual. Jadi, sebaiknya jalankan daftar dan hapus aturan jaringan sesuai kebutuhan.

Mengkonfigurasi titik akhir layanan registri tersedia di tingkat layanan registri kontainer Premium. Untuk informasi tentang tingkat dan batas layanan registri, lihat tingkat layanan Azure Container Registry.

Batasan pratinjau

  • Pengembangan titik akhir layanan di masa depan untuk Azure Container Registry saat ini belum direncanakan. Sebaiknya gunakan titik akhir privat sebagai gantinya.
  • Anda tidak dapat menggunakan portal Microsoft Azure untuk mengkonfigurasi titik akhir layanan pada registri.
  • Hanya kluster Azure Kubernetes Service atau komputer virtual Azure yang dapat digunakan sebagai host untuk mengakses registri kontainer menggunakan titik akhir layanan. Layanan Azure lainnya termasuk Azure Container Instances tidak didukung.
  • Titik akhir layanan untuk Azure Container Registry tidak didukung di cloud Azure US Government atau Microsoft Azure yang dioperasikan oleh cloud 21Vianet.

Penting

Beberapa fungsionalitas mungkin tidak tersedia atau memerlukan lebih banyak konfigurasi dalam registri kontainer yang membatasi akses ke titik akhir privat, subnet yang dipilih, atau alamat IP.

  • Bila akses jaringan publik ke registri dinonaktifkan, akses registri oleh layanan tepercaya tertentu termasuk Azure Security Center memerlukan pengaktifan pengaturan jaringan untuk mengabaikan aturan jaringan.
  • Setelah akses jaringan publik dinonaktifkan, instans layanan Azure tertentu termasuk Azure DevOps Services saat ini tidak dapat mengakses registri kontainer.
  • Titik akhir privat saat ini tidak didukung dengan agen terkelola Azure DevOps. Anda harus menggunakan agen yang dihost sendiri dengan garis pandang jaringan ke titik akhir privat.
  • Jika registri memiliki titik akhir privat yang disetujui dan akses jaringan publik dinonaktifkan, repositori dan tag tidak dapat dicantumkan di luar jaringan virtual menggunakan portal Microsoft Azure, Azure CLI, atau alat lainnya.

Prasyarat

  • Untuk menggunakan langkah-langkah Azure CLI dalam artikel ini, Azure CLI versi 2.0.58 atau yang lebih baru diperlukan. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

  • Jika Anda belum memiliki registri kontainer, buatlah (Tingkat Premium diperlukan) dan dorong gambar sampel seperti hello-world dari Docker Hub. Misalnya, gunakan portal Microsoft Azure atau Azure CLI untuk membuat registri.

  • Untuk mengkonfigurasi akses registri menggunakan private link di langganan Azure yang berbeda, Anda perlu mendaftarkan penyedia sumber daya untuk Azure Container Registry dalam langganan tersebut. Contohnya:

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

Buat komputer virtual dengan dukungan Docker

Untuk tujuan pengujian, gunakan VM Ubuntu dengan dukungan Docker untuk mengakses registri kontainer Azure. Untuk menggunakan autentikasi Microsoft Entra ke registri, instal juga Azure CLI pada VM. Jika Anda sudah memiliki komputer Azure, lewati langkah pembuatan ini.

Anda dapat menggunakan grup sumber daya yang sama untuk komputer virtual dan registri kontainer Anda. Pengaturan ini menyederhanakan pembersihan di akhir tetapi tidak diperlukan. Jika Anda memilih untuk membuat grup sumber daya terpisah untuk komputer virtual dan jaringan virtual, jalankan az group create. Contoh berikut mengasumsikan Anda telah menetapkan variabel lingkungan untuk nama grup sumber daya dan lokasi registri:

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

Sekarang sebarkan komputer virtual Azure Ubuntu default dengan buat az vm. Berikut contoh membuat komputer virtual dengan bernama myDockerVM.

VM_NAME=myDockerVM

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

Dibutuhkan beberapa menit untuk VM dibuat. Saat perintah selesai, perhatikan publicIpAddress yang ditampilkan oleh Azure CLI. Gunakan alamat ini untuk membuat sambunga SSH ke VM.

Memasang Docker di VM

Setelah VM berjalan, buat sambungan SSH ke VM. Ganti publicIpAddress dengan alamat IP publik VM Anda.

ssh azureuser@publicIpAddress

Jalankan perintah berikut untuk memasang Docker pada VM Ubuntu:

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

Setelah penginstalan, jalankan perintah berikut untuk memverifikasi bahwa Docker berjalan dengan benar pada VM:

sudo docker run -it hello-world

Output:

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

Instal Azure CLI

Ikuti langkah-langkah dalam Menginstal Azure CLI dengan apt untuk menginstal Azure CLI di komputer virtual Ubuntu Anda. Contohnya:

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

Keluar dari sambungan SSH.

Mengkonfigurasi akses jaringan untuk registri

Di bagian ini, konfigurasikan registri kontainer Anda untuk mengizinkan akses dari subnet di jaringan virtual Azure. Langkah-langkah disediakan menggunakan Azure CLI.

Menambahkan titik akhir layanan ke subnet

Saat Anda membuat VM, Azure secara default membuat jaringan virtual dalam grup sumber daya yang sama. Nama jaringan virtual berdasarkan nama komputer virtual. Misalnya, jika Anda menamai komputer virtual Anda myDockerVM, nama jaringan virtual default adalah myDockerVMVNET, dengan subnet bernama myDockerVMSubnet. Verifikasi ini dengan menggunakan perintah daftar vnet jaringan az:

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

Output:

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

Gunakan perintah pembaruan subnet vnet jaringan az untuk menambahkan titik akhir layanan Microsoft.ContainerRegistry ke subnet Anda. Ganti nama jaringan virtual dan subnet Anda dalam perintah berikut:

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

Gunakan perintah tampilkan subnet vnet jaringan az untuk mendapatkan ID sumber daya subnet. Anda memerlukan ini di langkah selanjutnya untuk mengkonfigurasi aturan akses jaringan.

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

Output:

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

Mengubah akses jaringan default ke registri

Secara default, registri kontainer Azure memungkinkan koneksi dari host di jaringan apa pun. Untuk membatasi akses ke jaringan publik yang dipilih, ubah dulu tindakan default untuk menolak akses. Ganti nama registri Anda dalam perintah perbarui az acr berikut:

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

Menambahkan aturan jaringan ke registri

Gunakan perintah tambahkan aturan jaringan az acr untuk menambahkan aturan jaringan ke registri Anda yang memungkinkan akses dari subnet VM. Ganti nama registri kontainer dan ID sumber daya subnet dalam perintah berikut:

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

Periksa akses publik untuk registrasi

Setelah menunggu beberapa menit agar konfigurasi diperbarui, verifikasi bahwa VM dapat mengakses registri kontainer. Buat koneksi SSH ke VM Anda, dan jalankan perintah login az acr untuk masuk ke registri Anda.

az acr login --name mycontainerregistry

Lakukan operasi registri seperti eksekusi docker pull untuk menarik gambar sampel dari registri. Ganti nilai gambar dan tag yang sesuai untuk registri Anda, diawali dengan nama server login registri (semua huruf kecil):

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

Docker berhasil menarik gambar ke VM.

Contoh ini menunjukkan bahwa Anda dapat mengakses registri kontainer pribadi melalui aturan akses jaringan. Namun, registri tidak dapat diakses dari host login yang tidak memiliki aturan akses jaringan yang dikonfigurasi. Jika Anda mencoba masuk dari host lain menggunakan perintah az acr login atau perintah docker login, output kurang lebih seperti:

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

Pulihkan akses registri default

Untuk memulihkan registri untuk mengizinkan akses secara default, hapus aturan jaringan apa pun yang telah dikonfigurasi. Kemudian atur tindakan default untuk mengizinkan akses.

Menghapus aturan jaringan

Untuk melihat daftar aturan jaringan yang dikonfigurasi untuk registri Anda, jalankan perintah daftar aturan jaringan az acr berikut ini:

az acr network-rule list --name mycontainerregistry 

Untuk setiap aturan yang dikonfigurasi, jalankan perintah hapus aturan jaringan az acr untuk menghapusnya. Contohnya:

# 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

Mengizinkan akses

Ganti nama registri Anda dalam perintah perbarui az acr berikut:

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

Membersihkan sumber daya

Jika Anda membuat semua sumber daya Azure di grup sumber daya yang sama dan tidak lagi memerlukannya, Anda bisa secara opsional menghapus sumber daya dengan menggunakan perintah tunggal hapus grup az:

az group delete --name myResourceGroup

Langkah berikutnya