Gunakan identitas terkelola Azure untuk mengautentikasi ke registri kontainer Azure

Gunakan identitas terkelola untuk sumber daya Azure untuk mengautentikasi ke registri kontainer Azure dari sumber daya Azure lain, tanpa perlu menyediakan atau mengelola informasi masuk registri. Misalnya, siapkan identitas terkelola yang ditetapkan pengguna atau yang ditetapkan sistem di Linux VM untuk mengakses citra kontainer dari registri kontainer Anda, semudah Anda menggunakan registri publik. Atau, siapkan kluster Azure Kubernetes Service untuk menggunakan identitas terkelolanya untuk menarik citra kontainer dari Azure Container Registry untuk penerapan pod.

Untuk artikel ini, Anda mempelajari selengkapnya tentang identitas terkelola dan cara:

  • Mengaktifkan identitas yang ditetapkan pengguna atau ditetapkan sistem pada Azure VM
  • Memberikan akses identitas ke registri kontainer Azure
  • Menggunakan identitas terkelola untuk mengakses registri dan menarik citra kontainer

Untuk membuat sumber daya Azure, artikel ini mengharuskan Anda menjalankan Azure CLI versi 2.0.55 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang CLI Azure.

Untuk mengatur registri kontainer dan mendorong citra kontainer ke dalamnya, Anda juga harus menginstal Docker secara lokal. Docker menyediakan paket yang mengkonfigurasi Docker pada sistem macOS, Windows, atau Linux.

Mengapa menggunakan identitas terkelola?

Jika Anda belum paham tentang fitur identitas terkelola untuk sumber daya Azure, lihat gambaran umum ini.

Setelah Anda menyiapkan sumber daya Azure yang dipilih dengan identitas terkelola, berikan identitas akses yang Anda inginkan ke sumber daya lain, sama seperti prinsip keamanan lainnya. Misalnya, tetapkan peran identitas terkelola dengan tarik, dorong dan tarik, atau izin lainnya ke registri privat di Azure. (Untuk daftar lengkap peran registri, lihat Peran dan izin Azure Container Registry.) Anda dapat memberikan akses identitas ke satu atau beberapa sumber daya.

Lalu gunakan identitas ini untuk mengautentikasi ke layanan yang mendukung autentikasi Microsoft Azure AD, tanpa informasi masuk dalam kode Anda. Pilih cara mengautentikasi menggunakan identitas terkelola, tergantung pada skenario Anda. Untuk menggunakan identitas untuk mengakses registri kontainer Azure dari komputer virtual, Anda mengautentikasi dengan Azure Resource Manager.

Membuat registri kontainer

Jika Anda belum memiliki registri kontainer Azure, buat registri dan dorong citra kontainer sampel ke dalamnya. Untuk langkah-langkahnya, lihat Mulai cepat: Membuat registri kontainer privat menggunakan Azure CLI.

Artikel ini mengasumsikan Anda memiliki citra kontainer aci-helloworld:v1 yang disimpan di registri Anda. Contoh menggunakan nama registri myContainerRegistry. Ganti dengan nama registri dan citra Anda sendiri pada langkah-langkah selanjutnya.

Membuat VM yang diaktifkan Docker

Buat komputer virtual Ubuntu yang diaktifkan Docker. Anda juga perlu menginstal Azure CLI pada komputer virtual. Jika Anda sudah memiliki komputer virtual Azure, lewati langkah ini untuk membuat komputer virtual.

Terapkan komputer virtual Ubuntu Azure default dengan buat az vm. Contoh berikut ini membuat VM bernama myDockerVM di grup sumber daya yang sudah ada bernama myResourceGroup:

az vm create \
    --resource-group myResourceGroup \
    --name myDockerVM \
    --image UbuntuLTS \
    --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 menginstal Docker pada VM:

sudo apt 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 mcr.microsoft.com/hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Menginstal Azure CLI

Ikuti langkah-langkah dalam Menginstal Azure CLI dengan apt untuk menginstal Azure CLI di komputer virtual Ubuntu Anda. Untuk artikel ini, pastikan Anda menginstal versi 2.0.55 atau yang lebih baru.

Keluar dari sesi SSH.

Contoh 1: Mengakses dengan identitas yang ditetapkan pengguna

Membuat identitas

Buat identitas di langganan Anda menggunakan perintah buat identitas az. Anda dapat menggunakan grup sumber daya yang sama dengan yang Anda gunakan sebelumnya untuk membuat registri kontainer atau komputer virtual, atau yang berbeda.

az identity create --resource-group myResourceGroup --name myACRId

Untuk mengonfigurasi identitas dalam langkah-langkah berikut, gunakan perintah az identity show untuk menyimpan ID sumber daya identitas dan ID perwakilan layanan dalam variabel.

# Get resource ID of the user-assigned identity
userID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)

# Get service principal ID of the user-assigned identity
spID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)

Karena Anda memerlukan ID identitas pada langkah selanjutnya saat Anda masuk ke CLI dari komputer virtual Anda, tunjukkan nilai:

echo $userID

ID berbentuk:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

Mengonfigurasi VM dengan identitas

Perintah tetapkan identitas az vm berikut mengonfigurasi Docker VM Anda dengan identitas yang ditetapkan pengguna:

az vm identity assign --resource-group myResourceGroup --name myDockerVM --identities $userID

Memberikan akses identitas ke registri kontainer

Sekarang konfigurasikan identitas untuk mengakses registri kontainer Anda. Pertama-tama gunakan perintah tampilkan az acr untuk mendapatkan ID sumber daya registri:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Gunakan perintah buat tugas peran az untuk menetapkan peran AcrPull ke identitas. Peran ini memberikan izin penarikan ke registri. Untuk memberikan izin penarikan dan pendorongan, tetapkan peran ACRPush.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Menggunakan identitas untuk mengakses registri

SSH ke dalam mesin virtual Docker yang dikonfigurasi dengan identitas. Jalankan perintah Azure CLI berikut ini, menggunakan Azure CLI yang diinstal pada VM.

Pertama-tama, autentikasi ke Azure CLI dengan masuk az,menggunakan identitas yang Anda konfigurasi pada VM. Untuk <userID>, ganti ID identitas yang Anda ambil di langkah sebelumnya.

az login --identity --username <userID>

Kemudian, autentikasi ke registri dengan masuk az acr. Ketika Anda menggunakan perintah ini, CLI menggunakan token Direktori Aktif yang dibuat ketika Anda menjalankan az login untuk tanpa kendala mengautentikasi sesi Anda dengan registri kontainer. (Tergantung pada pengaturan VM, Anda mungkin perlu menjalankan perintah ini dan perintah docker dengan sudo.)

az acr login --name myContainerRegistry

Anda akan melihat pesan Login succeeded. Anda kemudian dapat menjalankan perintah docker tanpa memberikan informasi masuk. Misalnya, jalankan tarik docker untuk menarik citra aci-helloworld:v1, menentukan nama server masuk registri Anda. Nama server masuk terdiri dari nama registri kontainer Anda (semua huruf kecil) diikuti oleh .azurecr.io - misalnya, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Contoh 2: Mengakses dengan identitas yang ditetapkan sistem

Mengonfigurasi VM dengan identitas yang dikelola sistem

Perintah tetapkan identitas az vm berikut mengonfigurasi Docker VM Anda dengan identitas yang ditetapkan sistem:

az vm identity assign --resource-group myResourceGroup --name myDockerVM 

Gunakan perintah tampilkan az vm untuk mengatur variabel ke nilai principalId (ID perwakilan layanan) identitas VM, untuk digunakan pada langkah-langkah selanjutnya.

spID=$(az vm show --resource-group myResourceGroup --name myDockerVM --query identity.principalId --out tsv)

Memberikan akses identitas ke registri kontainer

Sekarang konfigurasikan identitas untuk mengakses registri kontainer Anda. Pertama-tama gunakan perintah tampilkan az acr untuk mendapatkan ID sumber daya registri:

resourceID=$(az acr show --resource-group myResourceGroup --name myContainerRegistry --query id --output tsv)

Gunakan perintah buat tugas peran az untuk menetapkan peran AcrPull ke identitas. Peran ini memberikan izin penarikan ke registri. Untuk memberikan izin penarikan dan pendorongan, tetapkan peran ACRPush.

az role assignment create --assignee $spID --scope $resourceID --role acrpull

Menggunakan identitas untuk mengakses registri

SSH ke dalam mesin virtual Docker yang dikonfigurasi dengan identitas. Jalankan perintah Azure CLI berikut ini, menggunakan Azure CLI yang diinstal pada VM.

Pertama-tama, autentikasi Azure CLI dengan masuk az, menggunakan identitas yang ditetapkan sistem pada VM.

az login --identity

Kemudian, autentikasi ke registri dengan masuk az acr. Ketika Anda menggunakan perintah ini, CLI menggunakan token Direktori Aktif yang dibuat ketika Anda menjalankan az login untuk tanpa kendala mengautentikasi sesi Anda dengan registri kontainer. (Tergantung pada pengaturan VM, Anda mungkin perlu menjalankan perintah ini dan perintah docker dengan sudo.)

az acr login --name myContainerRegistry

Anda akan melihat pesan Login succeeded. Anda kemudian dapat menjalankan perintah docker tanpa memberikan informasi masuk. Misalnya, jalankan tarik docker untuk menarik citra aci-helloworld:v1, menentukan nama server masuk registri Anda. Nama server masuk terdiri dari nama registri kontainer Anda (semua huruf kecil) diikuti oleh .azurecr.io - misalnya, mycontainerregistry.azurecr.io.

docker pull mycontainerregistry.azurecr.io/aci-helloworld:v1

Langkah berikutnya

Dalam artikel ini, Anda belajar tentang menggunakan identitas terkelola dengan Azure Container Registry dan cara:

  • Mengaktifkan identitas yang ditetapkan pengguna atau ditetapkan sistem pada Azure VM
  • Memberikan akses identitas ke registri kontainer Azure
  • Menggunakan identitas terkelola untuk mengakses registri dan menarik citra kontainer