Menghubungkan secara pribadi ke registrasi kontainer Azure menggunakan Azure Private Link

Batasi akses ke registri dengan menetapkan alamat IP pribadi jaringan virtual ke titik akhir registri dan menggunakan Azure Private Link. Lalu lintas jaringan antara klien di jaringan virtual dan titik akhir pribadi registri melintasi jaringan virtual dan private link di jaringan backbone Microsoft, menghilangkan paparan dari internet publik. Private Link juga memungkinkan akses registri pribadi dari lokal melalui peering privat Azure ExpressRoute atau gateway VPN.

Anda dapat mengonfigurasi pengaturan DNS untuk titik akhir privat registri, sehingga pengaturan mengatasi alamat IP pribadi registri yang dialokasikan. Dengan konfigurasi DNS, klien dan layanan dalam jaringan dapat terus mengakses registri di nama domain registri yang sepenuhnya memenuhi syarat, seperti myregistry.azurecr.io.

Artikel ini menunjukkan cara mengonfigurasi titik akhir privat untuk registri Anda menggunakan portal Microsoft Azure (disarankan) atau Azure CLI. Fitur ini tersedia di tingkat layanan registri kontainer Premium. Untuk informasi tentang tingkat dan batas layanan registri, lihat tingkat Azure Container Registry.

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.
  • Instans layanan Azure tertentu termasuk Azure DevOps saat ini tidak dapat mengakses registri kontainer.
  • 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.

Catatan

Mulai Oktober 2021, registri kontainer baru memungkinkan maksimal 200 titik akhir privat. Registri yang dibuat sebelumnya memungkinkan maksimum 10 titik akhir privat. Gunakan perintah az acr show-usage untuk melihat batas registri Anda.

Prasyarat

  • Jaringan virtual dan subnet untuk menyiapkan titik akhir privat. Jika perlu, buat jaringan virtual dan subnet baru.
  • Untuk pengujian, disarankan untuk menyiapkan VM di jaringan virtual. Untuk langkah-langkah membuat mesin virtual pengujian untuk mengakses registri Anda, lihat Membuat mesin virtual yang diaktifkan Docker.
  • Untuk menggunakan langkah-langkah Azure CLI dalam artikel ini, Azure CLI versi 2.6.0 atau yang lebih baru disarankan. Jika Anda perlu menginstal atau memutakhirkan, lihat Menginstal Azure CLI. Atau jalankan di Azure Cloud Shell.
  • Jika Anda tidak memiliki registri kontainer, buat satu (Tingkat premium diperlukan) dan impor sampel citra publik seperti mcr.microsoft.com/hello-world dari Microsoft Container Registry. Misalnya, gunakan portal Microsoft Azure atau Azure CLI untuk membuat registri.

Mendaftarkan penyedia sumber daya registri kontainer

Untuk mengonfigurasi akses registri menggunakan tautan privat di langganan atau penyewa Azure yang berbeda, Anda harus mendaftarkan penyedia sumber untuk Azure Container Registry di langganan tersebut. Gunakan portal Microsoft Azure, Azure CLI, atau alat lainnya.

Contoh:

az account set --subscription <Name or ID of subscription of private link>

az provider register --namespace Microsoft.ContainerRegistry

Siapkan titik akhir privat saat Anda membuat registri, atau tambahkan titik akhir privat ke registri yang ada.

Membuat titik akhir privat - registri baru

  1. Saat membuat registri di portal, pada tab Dasar, di SKU, pilih Premium.

  2. Pilih tab Jaringan.

  3. Dalam Konektivitas jaringan, pilih Titik akhir privat > +Tambahkan.

  4. Masukkan atau pilih informasi berikut:

    Pengaturan Nilai
    Langganan Pilih langganan Anda.
    Grup sumber daya Masukkan nama grup yang sudah ada atau buat grup baru.
    Nama Masukkan nama yang unik.
    Subsumber daya registri Pilih registri
    Jaringan
    Jaringan virtual Pilih jaringan virtual untuk titik akhir privat. Contoh: myDockerVMVNET.
    Subnet Pilih subnet untuk titik akhir privat. Contoh: myDockerVMSubnet.
    Integrasi DNS Privat
    Integrasikan dengan zona DNS privat Pilih Ya.
    Zona DNS Privat Pilih privatelink.azurecr.io (Baru)
  5. Konfigurasikan pengaturan registri yang tersisa, lalu pilih Tinjau + buat.

Membuat registri dengan titik akhir privat

Private link sekarang dikonfigurasi dan siap digunakan.

Membuat titik akhir privat - registri yang sudah ada

  1. Di portal, navigasi ke registri kontainer Anda.

  2. Di Pengaturan, pilih Jaringan.

  3. Pada tab Titik akhir privat, pilih + Titik akhir privat. Tambahkan titik akhir privat ke registri

  4. Di tab Dasar, masukkan atau pilih informasi berikut ini:

    Pengaturan Nilai
    Detail Proyek
    Langganan Pilih langganan Anda.
    Grup sumber daya Masukkan nama grup yang sudah ada atau buat grup baru.
    Detail instans
    Nama Masukkan nama.
    Wilayah Pilih wilayah.
  5. Pilih Berikutnya: Sumber Daya.

  6. Masukkan atau pilih informasi berikut:

    Pengaturan Nilai
    Metode koneksi Untuk contoh ini, pilih Sambungkan ke sumber daya Azure di direktori saya.
    Langganan Pilih langganan Anda.
    Jenis Sumber Daya Pilih Microsoft.ContainerRegistry/registries.
    Sumber daya Pilih nama registri Anda
    Subsumber target Pilih registri
  7. Pilih Berikutnya: Konfigurasi.

  8. Masukkan atau pilih informasi:

    Pengaturan Nilai
    Jaringan
    Jaringan virtual Memilih jaringan virtual untuk titik akhir privat
    Subnet Memilih subnet untuk titik akhir privat
    Integrasi DNS Pribadi
    Integrasikan dengan zona DNS privat Pilih Ya.
    Zona DNS Privat Pilih privatelink.azurecr.io (Baru)
  9. Pilih Tinjau + buat. Anda dibawa ke halaman Tinjau + buat di mana Azure memvalidasi konfigurasi Anda.

  10. Setelah muncul pesan Validasi berhasil, pilih Buat.

Mengonfirmasi konfigurasi titik akhir

Setelah titik akhir privat dibuat, pengaturan DNS di zona privat akan muncul dengan pengaturan Titik akhir privat di portal:

  1. Di portal, navigasi ke registri kontainer Anda dan pilih Pengaturan > Jaringan.
  2. Pada tab Titik akhir privat, pilih titik akhir privat yang Anda buat.
  3. Pilih Konfigurasi DNS.
  4. Tinjau pengaturan tautan dan pengaturan DNS kustom.

Pengaturan DNS titik akhir di portal

Menyiapkan titik akhir privat - CLI

Contoh Azure CLI dalam artikel ini menggunakan variabel lingkungan berikut. Anda memerlukan nama registri kontainer, jaringan virtual, dan subnet yang ada untuk menyiapkan titik akhir privat. Ganti nilai yang sesuai untuk lingkungan Anda. Semua contoh diformat untuk 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> # Resource group for your existing virtual network and subnet
NETWORK_NAME=<virtual-network-name>
SUBNET_NAME=<subnet-name>

Menonaktifkan kebijakan jaringan di subnet

Nonaktifkan kebijakan jaringan seperti grup keamanan jaringan di subnet untuk titik akhir privat. Perbarui konfigurasi subnet Anda dengan perbarui subnet jaringan az vnet:

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

Mengonfigurasi Zona DNS privat

Buat zona Azure DNS privat untuk domain registri kontainer Azure privat. Dalam langkah-langkah selanjutnya, Anda membuat catatan DNS untuk domain registri Anda di zona DNS ini. Untuk informasi selengkapnya, lihat opsi konfigurasi DNS, nanti di artikel ini.

Untuk menggunakan zona privat untuk mengganti resolusi DNS default untuk registri kontainer Azure Anda, zona harus diberi nama privatelink.azurecr.io. Jalankan perintah buat zona dns privat jaringan az berikut ini untuk membuat zona privat:

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

Jalankan buat vnet tautan dns privat jaringan az untuk mengaitkan zona privat Anda dengan jaringan virtual. Contoh ini membuat tautan yang disebut 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

Membuat titik akhir registri privat

Di bagian ini, buat titik akhir pribadi registri di jaringan virtual. Pertama, dapatkan ID sumber daya registri Anda:

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

Jalankan perintah buat titik akhir privat jaringan az untuk membuat titik akhir privat registri.

Contoh berikut membuat titik akhir myPrivateEndpoint dan koneksi layanan myConnection. Untuk menentukan sumber daya registri kontainer untuk titik akhir, lewati --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

Mendapatkan konfigurasi IP titik akhir

Untuk mengonfigurasi catatan DNS, dapatkan konfigurasi IP titik akhir privat. Terkait dengan antarmuka jaringan titik akhir pribadi dalam contoh ini adalah dua alamat IP pribadi untuk registri kontainer: satu untuk registri itu sendiri, dan satu untuk titik akhir data registri. Jika registri Anda direplikasi secara geografis, alamat IP tambahan dikaitkan dengan setiap replika.

Pertama, jalankan tampilkan titik akhir privat jaringan az untuk meminta titik akhir privat untuk ID antarmuka jaringan:

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

Perintah az network nic show berikut mendapatkan alamat IP privat dan FQDN untuk registri kontainer dan titik akhir data registri:

REGISTRY_PRIVATE_IP=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateIpAddress" \
  --output tsv)

DATA_ENDPOINT_PRIVATE_IP=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REGISTRY_LOCATION'].privateIpAddress" \
  --output tsv)

# An FQDN is associated with each IP address in the IP configurations

REGISTRY_FQDN=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry'].privateLinkConnectionProperties.fqdns" \
  --output tsv)

DATA_ENDPOINT_FQDN=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REGISTRY_LOCATION'].privateLinkConnectionProperties.fqdns" \
  --output tsv)

Titik akhir tambahan untuk replika geografis

Jika registri Anda direplikasi secara geografis, kueri untuk titik akhir data tambahan untuk setiap replika registri. Misalnya, di wilayah eastus:

REPLICA_LOCATION=eastus
GEO_REPLICA_DATA_ENDPOINT_PRIVATE_IP=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REPLICA_LOCATION'].privateIpAddress" \
  --output tsv) 

GEO_REPLICA_DATA_ENDPOINT_FQDN=$(az network nic show \
  --ids $NETWORK_INTERFACE_ID \
  --query "ipConfigurations[?privateLinkConnectionProperties.requiredMemberName=='registry_data_$REPLICA_LOCATION'].privateLinkConnectionProperties.fqdns" \
  --output tsv)

Membuat catatan DNS di zona privat

Perintah berikut ini membuat catatan DNS di zona privat untuk titik akhir registri dan titik akhir datanya. Misalnya, jika Anda memiliki registri bernama myregistry di wilayah westeurope, nama titik akhir adalah myregistry.azurecr.io dan myregistry.westeurope.data.azurecr.io.

Pertama jalankan az network private-dns record-set a create untuk membuat kumpulan catatan A kosong untuk titik akhir registri dan titik akhir data:

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

Jalankan perintah az network private-dns record-set a add-record untuk membuat catatan A untuk titik akhir registri dan titik akhir data:

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 $REGISTRY_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

Baris tambahan untuk replika geografis

Jika registri Anda direplikasi secara geografis, buat pengaturan DNS tambahan untuk setiap replika. Melanjutkan contoh di wilayah eastus:

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

az network private-dns record-set a add-record \
  --record-set-name ${REGISTRY_NAME}.${REPLICA_LOCATION}.data \
  --zone-name privatelink.azurecr.io \
  --resource-group $RESOURCE_GROUP \
  --ipv4-address $GEO_REPLICA_DATA_ENDPOINT_PRIVATE_IP

Private link sekarang dikonfigurasi dan siap digunakan.

Menonaktifkan akses publik

Untuk banyak skenario, nonaktifkan akses registri dari jaringan publik. Konfigurasi ini mencegah klien di luar jaringan virtual menjangkau titik akhir registri.

Menonaktifkan akses publik - portal

  1. Di portal, navigasi ke registri kontainer Anda dan pilih Pengaturan > Jaringan.
  2. Pada tab Akses publik, di Perbolehkan akses jaringan publik, pilih Dinonaktifkan. Lalu pilih Simpan.

Menonaktifkan akses publik - CLI

Untuk menonaktifkan akses publik menggunakan Azure CLI, jalankan perbarui az acr dan atur --public-network-enabled ke false.

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

Anda harus memvalidasi bahwa sumber daya dalam subnet dari titik akhir privat tersambung ke registri Anda melalui alamat IP privat, dan memiliki integrasi zona DNS privat yang benar.

Untuk memvalidasi koneksi tautan privat, sambungkan ke mesin virtual yang Anda siapkan di jaringan virtual.

Jalankan utilitas seperti nslookup atau dig untuk mencari alamat IP registri Anda melalui private link. Contohnya:

dig $REGISTRY_NAME.azurecr.io

Output contoh menunjukkan alamat IP registri di ruang alamat 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

[...]

Bandingkan hasil ini dengan alamat IP publik di output dig untuk registri yang sama melalui titik akhir publik:

[...]
;; 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

[...]

Juga verifikasi bahwa Anda dapat melakukan operasi registri dari mesin virtual di jaringan. Buat koneksi SSH ke komputer virtual Anda, dan jalankan masuk az acr untuk masuk ke registri Anda. Tergantung pada konfigurasi VM, Anda mungkin perlu awali perintah berikut dengan sudo.

az acr login --name $REGISTRY_NAME

Lakukan operasi registri seperti docker pull untuk menarik citra sampel dari registri. Ganti hello-world:v1 dengan citra dan tag yang sesuai untuk registri Anda, diawali dengan nama server masuk registri (semua huruf kecil):

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

Docker berhasil menarik citra ke VM.

Mengelola sambungan titik akhir privat

Kelola koneksi titik akhir privat registri menggunakan portal Microsoft Azure, atau dengan menggunakan perintah di grup perintah koneksi titik akhir privat az acr. Operasi termasuk menyetujui, menghapus, mencantumkan, menolak, atau menunjukkan detail koneksi titik akhir pribadi registri.

Misalnya, untuk mencantumkan koneksi titik akhir privat registri, jalankan perintah daftar koneksi titik akhir pribadi az acr. Contohnya:

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

Saat Anda menyiapkan koneksi titik akhir privat menggunakan langkah-langkah dalam artikel ini, registri secara otomatis menerima koneksi dari klien dan layanan yang memiliki izin Azure RBAC pada registri. Anda dapat mengatur titik akhir untuk memerlukan persetujuan manual koneksi. Untuk informasi tentang cara menyetujui dan menolak koneksi titik akhir privat, lihat Mengelola Koneksi Titik Akhir Privat.

Penting

Saat ini, jika Anda menghapus titik akhir privat dari registri, Anda mungkin juga perlu menghapus tautan jaringan virtual ke zona privat. Jika tautan tidak dihapus, Anda mungkin melihat kesalahan yang mirip dengan unresolvable host.

Opsi konfigurasi DNS

Titik akhir privat dalam contoh ini terintegrasi dengan zona DNS pribadi yang terkait dengan jaringan virtual dasar. Penyiapan ini menggunakan layanan DNS yang disediakan Azure secara langsung untuk menyelesaikan FQDN publik registri ke alamat IP pribadinya di jaringan virtual.

Private link mendukung skenario konfigurasi DNS tambahan yang menggunakan zona privat, termasuk dengan solusi DNS kustom. Misalnya, Anda mungkin memiliki solusi DNS kustom yang diterapkan di jaringan virtual, atau lokal dalam jaringan yang Anda sambungkan ke jaringan virtual menggunakan gateway VPN atau Azure ExpressRoute.

Untuk mengatasi FQDN publik registri ke alamat IP pribadi dalam skenario ini, Anda perlu mengonfigurasi penerus tingkat server ke layanan Azure DNS (168.63.129.16). Opsi dan langkah konfigurasi yang tepat bergantung pada jaringan dan DNS Anda yang sudah ada. Misalnya, lihat Konfigurasi DNS Titik Akhir Privat Azure.

Penting

Jika untuk ketersediaan tinggi Anda membuat titik akhir privat di beberapa wilayah, kami sarankan Anda menggunakan grup sumber daya terpisah di setiap wilayah dan menempatkan jaringan virtual dan zona DNS privat terkait di dalamnya. Konfigurasi ini juga mencegah resolusi DNS yang tidak dapat diprediksi yang disebabkan oleh berbagi zona DNS privat yang sama.

Mengonfigurasi catatan DNS secara manual

Untuk beberapa skenario, Anda mungkin perlu mengonfigurasi catatan DNS secara manual di zona privat dan bukan menggunakan zona privat yang disediakan Azure. Pastikan untuk membuat catatan untuk setiap titik akhir berikut: titik akhir registri, titik akhir data registri, dan titik akhir data untuk replika regional tambahan apa pun. Jika semua catatan tidak dikonfigurasi, registri mungkin tidak dapat dijangkau.

Penting

Jika nanti Anda menambahkan replika baru, Anda perlu menambahkan catatan DNS baru secara manual untuk titik akhir data di wilayah tersebut. Misalnya, jika Anda membuat replika myregistry di lokasi northeurope, tambahkan catatan untuk myregistry.northeurope.data.azurecr.io.

FQDN dan alamat IP pribadi yang Anda butuhkan untuk membuat catatan DNS dikaitkan dengan antarmuka jaringan titik akhir pribadi. Anda dapat memperoleh informasi ini menggunakan portal Microsoft Azure atau Azure CLI.

Setelah membuat catatan DNS, pastikan bahwa FQDN registri diselesaikan dengan benar ke alamat IP pribadi masing-masing.

Pembersihan sumber daya

Untuk membersihkan sumber daya Anda di portal, navigasikan ke grup sumber daya Anda. Setelah grup sumber daya dimuat, klik Hapus grup sumber daya untuk menghapus grup sumber daya dan sumber daya yang disimpan di sana.

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 $RESOURCE_GROUP

Langkah berikutnya