Autentikasi lintas-registri dalam tugas ACR menggunakan identitas yang dikelola Azure
Dalam tugas ACR,Anda dapat mengaktifkan identitas terkelola untuk sumber daya Azure. Tugas dapat menggunakan identitas untuk mengakses sumber daya Azure lainnya, tanpa perlu menyediakan atau mengelola kredensial.
Di artikel ini, Anda mempelajari cara mengaktifkan identitas terkelola dalam tugas untuk menarik citra dari registri yang berbeda dari yang digunakan untuk menjalankan tugas.
Untuk membuat sumber daya Azure, artikel ini mengharuskan Anda menjalankan Azure CLI versi 2.0.68 atau yang lebih baru. Jalankan az --version
untuk menemukan versinya. Jika Anda perlu menginstal atau memutakhirkan, lihat Menginstal Azure CLI.
Ringkasan skenario
Tugas contoh menarik citra dasar dari registri wadah Azure lain untuk membangun dan mendorong citra aplikasi. Untuk menarik citra dasar, Anda mengonfigurasi tugas dengan identitas terkelola dan menetapkan izin yang sesuai untuk itu.
Contoh ini menunjukkan langkah-langkah menggunakan identitas terkelola yang ditetapkan pengguna atau yang ditetapkan sistem. Pilihan identitas Anda tergantung pada kebutuhan organisasi Anda.
Dalam skenario dunia nyata, sebuah organisasi mungkin mempertahankan satu set citra dasar yang digunakan oleh semua tim pengembangan untuk membangun aplikasi mereka. Citra dasar ini disimpan dalam registri perusahaan, dengan setiap tim pengembangan hanya memiliki hak tarik.
Prasyarat
Untuk artikel ini, Anda memerlukan dua pendaftar kontainer Azure:
- Anda menggunakan registri pertama untuk membuat dan menjalankan tugas ACR. Dalam artikel ini, registri ini bernama myregistry.
- Registri kedua menghosting citra dasar yang digunakan untuk tugas membangun citra. Dalam artikel ini, registri kedua bernama mybaseregistry.
Ganti dengan nama registri Anda sendiri di langkah selanjutnya.
Jika Anda belum memiliki pendaftar kontainer Azure yang diperlukan, lihat Mulai cepat: Membuat pendaftar kontainer pribadi menggunakan Azure CLI. Anda belum perlu memasukkan citra ke registri.
Siapkan registri dasar
Untuk tujuan demonstrasi, sebagai pengoperasian satu kali, jalankan [az acr import][az-acr-import] untuk mengimpor citra Node.js publik dari Docker Hub ke registri dasar Anda. Dalam praktiknya, tim atau proses lain dalam organisasi mungkin memelihara citra di registri dasar.
az acr import --name mybaseregistry \
--source docker.io/library/node:15-alpine \
--image baseimages/node:15-alpine
Tentukan langkah-langkah tugas dalam file YAML
Langkah-langkah untuk contoh tugas multi-langkah ini ditentukan dalam file YAML. Buat file bernama helloworldtask.yaml
di direktori kerja lokal Anda dan tempelkan konten berikut. Perbarui nilai REGISTRY_NAME
pada langkah pembuatan dengan nama server registri dasar Anda.
version: v1.1.0
steps:
# Replace mybaseregistry with the name of your registry containing the base image
- build: -t $Registry/hello-world:$ID https://github.com/Azure-Samples/acr-build-helloworld-node.git#main -f Dockerfile-app --build-arg REGISTRY_NAME=mybaseregistry.azurecr.io
- push: ["$Registry/hello-world:$ID"]
Langkah pembuatan menggunakan file Dockerfile-app
di repo Azure-Samples/acr-build-helloworld-node untuk membuat citra.
--build-arg
mereferensikan registri dasar untuk menarik citra dasar. Ketika berhasil dibangun, citra didorong ke registri yang digunakan untuk menjalankan tugas.
Opsi 1: Buat tugas dengan identitas yang ditetapkan pengguna
Langkah-langkah di bagian ini membuat tugas dan mengaktifkan identitas yang ditetapkan pengguna. Jika Anda ingin mengaktifkan identitas yang ditetapkan sistem, lihat Opsi 2: Membuat tugas dengan identitas yang ditetapkan sistem.
Membuat identitas terkelola yang ditetapkan pengguna
Buat identitas di langganan Anda bernama myACRTasksId menggunakan perintah buat identitas az. Anda dapat menggunakan grup sumber daya yang sama dengan yang Anda gunakan sebelumnya untuk membuat registri kontainer atau yang berbeda.
az identity create \
--resource-group myResourceGroup \
--name myACRTasksId
Untuk mengonfigurasi identitas yang ditetapkan pengguna dalam langkah-langkah berikut, gunakan perintah az identity show untuk menyimpan ID sumber daya, ID utama, dan ID klien identitas dalam variabel.
# Get resource ID of the user-assigned identity
resourceID=$(az identity show \
--resource-group myResourceGroup \
--name myACRTasksId \
--query id --output tsv)
# Get principal ID of the task's user-assigned identity
principalID=$(az identity show \
--resource-group myResourceGroup \
--name myACRTasksId \
--query principalId --output tsv)
# Get client ID of the user-assigned identity
clientID=$(az identity show \
--resource-group myResourceGroup \
--name myACRTasksId \
--query clientId --output tsv)
Buat tugas
Sekarang, buat tugas helloworldtask dengan menjalankan perintah az acr task create berikut. Tugas berjalan tanpa konteks kode sumber, dan perintah merujuk file helloworldtask.yaml
di direktori kerja. Parameter --assign-identity
melewati ID sumber daya identitas yang ditetapkan pengguna.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity $resourceID
Pada output perintah, bagian identity
menunjukkan identitas jenis UserAssigned
yang diatur dalam tugas:
[...]
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-d12e-4760-9ab6-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRTasksId": {
"clientId": "xxxxxxxx-f17e-4768-bb4e-xxxxxxxxxxxx",
"principalId": "xxxxxxxx-1335-433d-bb6c-xxxxxxxxxxxx"
}
[...]
Berikan izin tarik identitas ke registri dasar
Di bagian ini, berikan izin identitas terkelola untuk menarik dari registri dasar, mybaseregistry.
Gunakan perintah az acr show untuk mendapatkan ID sumber daya dari registri dasar dan menyimpannya dalam variabel:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Gunakan perintah az role assignment create untuk menetapkan identitas peran acrpull
ke registri dasar. Peran ini memiliki izin hanya untuk menarik citra dari registri.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role acrpull
Lanjutkan ke Tambahkan kredensial registri target ke tugas.
Opsi 2: Buat tugas dengan identitas yang ditetapkan sistem
Langkah-langkah di bagian ini membuat tugas dan mengaktifkan identitas yang ditetapkan sistem. Jika Anda ingin mengaktifkan identitas yang ditetapkan pengguna, lihat Opsi 1: Membuat tugas dengan identitas yang ditetapkan pengguna.
Buat tugas
Sekarang, buat tugas helloworldtask dengan menjalankan perintah az acr task create berikut. Tugas berjalan tanpa konteks kode sumber, dan perintah merujuk file helloworldtask.yaml
di direktori kerja. Parameter --assign-identity
tanpa nilai mengaktifkan identitas yang ditetapkan sistem pada tugas.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity
Pada output perintah, bagian identity
menunjukkan identitas jenis SystemAssigned
yang diatur dalam tugas.
principalId
adalah ID utama dari identitas tugas:
[...]
"identity": {
"principalId": "xxxxxxxx-2703-42f9-97d0-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-86f1-41af-91ab-xxxxxxxxxxxx",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "eastus",
[...]
Menggunakan perintah az acr task show untuk menyimpan Id utama dalam sebuah variabel, untuk digunakan dalam perintah selanjutnya. Mengganti nama tugas Anda dan registri Anda dengan perintah berikut:
principalID=$(az acr task show \
--name <task_name> --registry <registry_name> \
--query identity.principalId --output tsv)
Berikan izin tarik identitas ke registri dasar
Di bagian ini, berikan izin identitas terkelola untuk menarik dari registri dasar, mybaseregistry.
Gunakan perintah az acr show untuk mendapatkan ID sumber daya dari registri dasar dan menyimpannya dalam variabel:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Gunakan perintah az role assignment create untuk menetapkan identitas peran acrpull
ke registri dasar. Peran ini memiliki izin hanya untuk menarik citra dari registri.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role acrpull
Tambahkan kredensial registri target ke tugas
Sekarang gunakan perintah az acr task credential add untuk mengaktifkan tugas mengautentikasi dengan registri dasar menggunakan kredensial identitas. Jalankan perintah yang sesuai dengan jenis identitas terkelola yang Anda aktifkan di tugas. Jika Anda mengaktifkan identitas yang ditetapkan pengguna, berikan --use-identity
dengan ID klien dari identitas tersebut. Jika Anda mengaktifkan identitas yang ditetapkan sistem, teruskan --use-identity [system]
.
# Add credentials for user-assigned identity to the task
az acr task credential add \
--name helloworldtask \
--registry myregistry \
--login-server mybaseregistry.azurecr.io \
--use-identity $clientID
# Add credentials for system-assigned identity to the task
az acr task credential add \
--name helloworldtask \
--registry myregistry \
--login-server mybaseregistry.azurecr.io \
--use-identity [system]
Menjalankan tugas secara manual
Untuk memverifikasi bahwa tugas yang Anda gunakan untuk mengaktifkan identitas terkelola berhasil, picu tugas secara manual dengan perintah az acr task run.
az acr task run \
--name helloworldtask \
--registry myregistry
Jika tugas berjalan dengan sukses, outputnya mirip dengan:
Queued a run with ID: cf10
Waiting for an agent...
2019/06/14 22:47:32 Using acb_vol_dbfbe232-fd76-4ca3-bd4a-687e84cb4ce2 as the home volume
2019/06/14 22:47:39 Creating Docker network: acb_default_network, driver: 'bridge'
2019/06/14 22:47:40 Successfully set up Docker network: acb_default_network
2019/06/14 22:47:40 Setting up Docker configuration...
2019/06/14 22:47:41 Successfully set up Docker configuration
2019/06/14 22:47:41 Logging in to registry: myregistry.azurecr.io
2019/06/14 22:47:42 Successfully logged into myregistry.azurecr.io
2019/06/14 22:47:42 Logging in to registry: mybaseregistry.azurecr.io
2019/06/14 22:47:43 Successfully logged into mybaseregistry.azurecr.io
2019/06/14 22:47:43 Executing step ID: acb_step_0. Timeout(sec): 600, Working directory: '', Network: 'acb_default_network'
2019/06/14 22:47:43 Scanning for dependencies...
2019/06/14 22:47:45 Successfully scanned dependencies
2019/06/14 22:47:45 Launching container with name: acb_step_0
Sending build context to Docker daemon 25.6kB
Step 1/6 : ARG REGISTRY_NAME
Step 2/6 : FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
15-alpine: Pulling from baseimages/node
[...]
Successfully built 41b49a112663
Successfully tagged myregistry.azurecr.io/hello-world:cf10
2019/06/14 22:47:56 Successfully executed container: acb_step_0
2019/06/14 22:47:56 Executing step ID: acb_step_1. Timeout(sec): 600, Working directory: '', Network: 'acb_default_network'
2019/06/14 22:47:56 Pushing image: myregistry.azurecr.io/hello-world:cf10, attempt 1
The push refers to repository [myregistry.azurecr.io/hello-world]
[...]
2019/06/14 22:48:00 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.517011)
2019/06/14 22:48:00 The following dependencies were found:
2019/06/14 22:48:00
- image:
registry: myregistry.azurecr.io
repository: hello-world
tag: cf10
digest: sha256:611cf6e3ae3cb99b23fadcd89fa144e18aa1b1c9171ad4a0da4b62b31b4e38d1
runtime-dependency:
registry: mybaseregistry.azurecr.io
repository: baseimages/node
tag: 15-alpine
digest: sha256:e8e92cffd464fce3be9a3eefd1b65dc9cbe2484da31c11e813a4effc6105c00f
git:
git-head-revision: 0f988779c97fe0bfc7f2f74b88531617f4421643
Run ID: cf10 was successful after 32s
Jalankan perintah az acr repository show-tags untuk memverifikasi bahwa citra dibuat dan berhasil didorong ke myregistry:
az acr repository show-tags --name myregistry --repository hello-world --output tsv
Contoh output:
cf10
Langkah berikutnya
- Pelajari selengkapnya tentang cara mengaktifkan identitas terkelola dalam tugas ACR.
- Lihat referensi YAML Tugas ACR
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk