Membuat token dengan izin yang dicakup repositori
Artikel ini menjelaskan cara membuat token dan peta cakupan untuk mengelola akses ke repositori di registri kontainer Anda. Dengan membuat token, pemilik registri dapat menyediakan pengguna atau layanan dengan akses terbatas waktu ke repositori untuk menarik atau mendorong gambar atau melakukan tindakan lain. Token menyediakan izin yang lebih baik daripada opsi autentikasi registri lainnya, yang mencakup izin ke seluruh registri.
Skenario umum untuk membuat token meliputi:
- Izinkan perangkat IoT dengan token individual untuk menarik gambar dari repositori.
- Berikan izin kepada organisasi eksternal ke jalur repositori.
- Membatasi akses repositori ke grup pengguna yang berbeda di organisasi Anda. Misalnya, berikan akses tulis dan baca ke pengembang yang membangun gambar yang menargetkan repositori tertentu, dan membaca akses ke tim yang menyebar dari repositori tersebut.
Fitur ini tersedia di semua tingkat layanan. Untuk informasi tentang tingkat dan batas layanan registri, lihat Tingkat layanan Azure Container Registry
Batasan
- Saat ini Anda tidak dapat menetapkan izin cakupan repositori ke identitas Microsoft Entra, seperti perwakilan layanan atau identitas terkelola.
Konsep
Untuk mengonfigurasi izin yang dicakup repositori, Anda membuat token dengan peta lingkup terkait.
Token bersama dengan kata sandi yang dihasilkan memungkinkan pengguna mengautentikasi dengan registri. Anda dapat mengatur tanggal kedaluwarsa untuk kata sandi token, atau menonaktifkan token kapan saja.
Setelah mengautentikasi dengan token, pengguna atau layanan dapat melakukan satu atau beberapa tindakan yang tercakup ke satu atau beberapa repositori.
Tindakan Deskripsi Contoh content/delete
Menghapus data dari repositori Menghapus repositori atau manifes content/read
Membaca data dari repositori Menarik artefak content/write
Menulis data ke repositori Menggunakan dengan content/read
untuk mendorong artefakmetadata/read
Membaca metadata dari repositori Mencantumkan tag atau manifes metadata/write
Menulis metadata ke repositori Mengaktifkan atau menonaktifkan operasi baca, tulis, atau hapus
Catatan
Izin yang tercakup dalam repositori tidak mendukung kemampuan untuk mencantumkan katalog semua repositori dalam registri.
Peta cakupan mengelompokkan izin repositori yang Anda terapkan ke token dan dapat diterapkan kembali ke token lain. Setiap token dikaitkan dengan satu peta lingkup. Dengan peta cakupan, Anda dapat:
- Konfigurasikan beberapa token dengan izin yang identik ke sekumpulan repositori.
- Perbarui izin token saat Anda menambahkan atau menghapus tindakan repositori di peta cakupan, atau menerapkan peta cakupan yang berbeda.
Azure Container Registry juga menyediakan beberapa peta lingkup yang ditentukan sistem yang dapat Anda terapkan saat membuat token. Izin peta cakupan yang ditentukan sistem berlaku untuk semua repositori di registri Anda. Tindakan individual sesuai dengan batas Repositori per peta cakupan.
Gambar berikut menunjukkan hubungan antara token dan peta lingkup.
Prasyarat
- Azure CLI - Contoh perintah Azure CLI dalam artikel ini memerlukan Azure CLI versi 2.17.0 atau yang lebih baru. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI. - Docker - Untuk mengautentikasi dengan registri untuk menarik atau mendorong gambar, Anda memerlukan penginstalan Docker lokal. Docker menyediakan instruksi instalasi untuk sistem macOS, Windows, dan Linux.
- Registri kontainer - Jika Anda tidak memilikinya, buat registri kontainer di langganan Azure Anda. Misalnya, gunakan portal Microsoft Azure atau Azure CLI.
Buat token - CLI
Buat token dan tentukan repositori
Buat token menggunakan perintah az acr token create. Saat membuat token, Anda dapat menentukan satu atau beberapa repositori dan tindakan terkait di setiap repositori. Repositori tidak perlu berada di registri dulu. Untuk membuat token dengan menentukan peta lingkup yang sudah ada, lihat bagian berikutnya.
Contoh berikut membuat token di myregistry registri dengan izin berikut pada samples/hello-world
repo: content/write
dan content/read
. Secara default, perintah mengatur status token default ke enabled
, tetapi Anda dapat memperbarui status disabled
kapan saja.
az acr token create --name MyToken --registry myregistry \
--repository samples/hello-world \
content/write content/read \
--output json
Output menunjukkan detail tentang token. Secara default, dua kata sandi dibuat yang tidak kedaluwarsa, tetapi Anda dapat secara opsional mengatur tanggal kedaluwarsa. Disarankan untuk menyimpan kata sandi di tempat yang aman agar dapat digunakan nanti untuk autentikasi. Kata sandi tidak dapat diambil lagi, tetapi kata sandi baru dapat dihasilkan.
{
"creationDate": "2020-01-18T00:15:34.066221+00:00",
"credentials": {
"certificates": [],
"passwords": [
{
"creationTime": "2020-01-18T00:15:52.837651+00:00",
"expiry": null,
"name": "password1",
"value": "uH54BxxxxK7KOxxxxRbr26dAs8JXxxxx"
},
{
"creationTime": "2020-01-18T00:15:52.837651+00:00",
"expiry": null,
"name": "password2",
"value": "kPX6Or/xxxxLXpqowxxxxkA0idwLtmxxxx"
}
],
"username": "MyToken"
},
"id": "/subscriptions/xxxxxxxx-adbd-4cb4-c864-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerRegistry/registries/myregistry/tokens/MyToken",
"name": "MyToken",
"objectId": null,
"provisioningState": "Succeeded",
"resourceGroup": "myresourcegroup",
"scopeMapId": "/subscriptions/xxxxxxxx-adbd-4cb4-c864-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerRegistry/registries/myregistry/scopeMaps/MyToken-scope-map",
"status": "enabled",
"type": "Microsoft.ContainerRegistry/registries/tokens"
}
Catatan
Untuk meregenerasi kata sandi token dan periode kedaluwarsa, lihat Meregenerasi kata sandi token nanti di artikel ini.
Output termasuk detail tentang peta lingkup yang dibuat perintah. Anda dapat menggunakan peta lingkup, di sini bernama MyToken-scope-map
, untuk menerapkan tindakan repositori yang sama ke token lain. Atau, perbarui peta lingkup nanti untuk mengubah izin token terkait.
Membuat token dan menentukan peta lingkup
Cara alternatif untuk membuat token adalah dengan menentukan peta lingkup yang ada. Jika Anda belum memiliki peta lingkup, pertama-tama buat dengan menentukan repositori dan tindakan terkait. Kemudian, tentukan peta lingkup saat membuat token.
Untuk membuat peta lingkup, gunakan perintah az acr scope-map create. Perintah berikut membuat peta lingkup dengan izin yang sama pada repositori samples/hello-world
yang digunakan sebelumnya.
az acr scope-map create --name MyScopeMap --registry myregistry \
--repository samples/hello-world \
content/write content/read \
--description "Sample scope map"
Jalankan az acr token create untuk membuat token, menentukan peta lingkup MyScopeMap. Seperti contoh sebelumnya, perintah mengatur status token default menjadi enabled
.
az acr token create --name MyToken \
--registry myregistry \
--scope-map MyScopeMap
Output menunjukkan detail tentang token. Secara default, dua kata sandi dihasilkan. Disarankan untuk menyimpan kata sandi di tempat yang aman agar dapat digunakan nanti untuk autentikasi. Kata sandi tidak dapat diambil lagi, tetapi kata sandi baru dapat dihasilkan.
Catatan
Untuk meregenerasi kata sandi token dan periode kedaluwarsa, lihat Meregenerasi kata sandi token nanti di artikel ini.
Cara menggunakan peta cakupan untuk menentukan dan menetapkan izin untuk beberapa repositori
Peta cakupan memungkinkan penggunaan karakter kartubebas untuk menentukan dan memberikan izin serupa untuk beberapa repositori yang berbagi awalan umum. Repositori dengan izin tertentu, repositori dengan karakter kartubebas juga dapat digunakan dalam peta cakupan yang sama. Ini memberikan fleksibilitas dalam mengelola izin untuk beberapa set repositori dalam satu peta cakupan.
Izin repositori dapat dibuat saat peta cakupan dibuat dan ditetapkan ke token. Atau, token dapat dibuat dan langsung ditetapkan ke repositori.
Contoh berikut membuat peta cakupan dengan karakter kartubebas lalu menetapkannya ke token.
az acr scope-map create --name MyScopeMapWildcard --registry myregistry \
--repository samples/* \
content/write content/read \
--description "Sample scope map with wildcards"
az acr token create --name MyTokenWildcard \
--registry myregistry \
--scope-map MyScopeMapWildcard
Contoh berikut membuat token dengan kartubebas.
az acr token create --name MyTokenWildcard --registry myregistry \
--repository samples/* \
content/write content/read \
Izin kartubebas bersifat aditif, yang berarti bahwa ketika repositori tertentu diakses, izin yang dihasilkan akan menyertakan izin untuk semua aturan peta cakupan yang cocok dengan awalan kartubebas.
Dalam contoh ini, peta cakupan menentukan izin untuk tiga jenis repositori yang berbeda:
Repositori | Izin |
---|---|
sample/* |
content/read |
sample/teamA/* |
content/write |
sample/teamA/projectB |
content/delete |
Token diberi peta cakupan untuk memberikan [content/read, content/write, content/delete]
izin untuk mengakses repositori sample/teamA/projectB
. Namun, ketika token yang sama digunakan untuk mengakses sample/teamA/projectC
repositori, token tersebut hanya memiliki [content/read, content/write]
izin.
Penting
Repositori yang menggunakan kartubebas dalam peta cakupan harus selalu diakhiri dengan /*
akhiran agar valid dan memiliki satu karakter kartubebas dalam nama repositori.
Berikut adalah beberapa contoh kartubebas yang tidak valid:
sample/*/teamA
dengan kartubebas di tengah nama repositori.sample/teamA*
dengan kartubebas tidak diakhir dengan '/*''.sample/teamA/*/projectB/*
dengan beberapa kartubebas dalam nama repositori.
Kartubebas tingkat akar
Kartubebas juga dapat diterapkan pada tingkat akar. Ini berarti bahwa setiap izin yang ditetapkan ke repositori yang didefinisikan sebagai *
, akan diterapkan di seluruh registri.
Contoh menunjukkan cara membuat token dengan kartubebas tingkat akar yang akan memberikan izin token [content/read, content/write]
ke semua repositori di registri. Ini menyediakan cara sederhana untuk memberikan izin ke semua repositori dalam registri tanpa harus menentukan setiap repositori satu per satu.
az acr token create --name MyTokenWildcard --registry myregistry \
--repository * \
content/write content/read \
Penting
Jika aturan wildcard mencakup repositori yang belum ada, izin aturan wildcard masih akan berlaku untuk nama repositori tersebut.
Misalnya, token yang ditetapkan ke peta cakupan yang memberikan [content/write, metadata/write]
izin untuk sample/*
repositori.
Selain itu, misalkan repositori sample/teamC/teamCimage
belum ada.
Token akan memiliki izin untuk mendorong gambar ke repositori sample/teamC/teamCimage
, yang secara bersamaan akan membuat repositori pada pendorongan yang berhasil.
Buat token - portal
Anda dapat menggunakan portal Microsoft Azure untuk membuat token dan peta lingkup. Seperti halnya perintah CLI az acr token create
, Anda dapat menerapkan peta lingkup yang ada, atau membuat peta lingkup saat Anda membuat token dengan menentukan satu atau beberapa repositori dan tindakan terkait. Repositori tidak perlu berada di registri dulu.
Contoh berikut membuat token, dan membuat peta lingkup dengan izin berikut di repositori samples/hello-world
: content/write
dan content/read
.
Di portal, navigasi ke registri kontainer Anda.
Di bawah Izin repositori, pilih Token > +Tambahkan.
Masukkan nama token.
Di bawah Peta lingkup, pilih Buat baru.
Mengonfigurasi peta lingkup:
Masukkan nama dan deskripsi untuk peta lingkup.
Di bawah Repositori, masukkan
samples/hello-world
, dan di bawah Izin, pilihcontent/read
dancontent/write
. Lalu pilih +Tambahkan.Setelah menambahkan repositori dan izin, pilih Tambahkan untuk menambahkan peta lingkup.
Terima Status token default Diaktifkan lalu pilih Buat.
Setelah token divalidasi dan dibuat, detail token muncul di layar Token.
Menambahkan kata sandi token
Untuk menggunakan token yang dibuat di portal, Anda harus membuat kata sandi. Anda dapat membuat satu atau dua kata sandi, dan menetapkan tanggal kedaluwarsa untuk masing-masing kata sandi. Kata sandi baru yang dibuat untuk token segera tersedia. Pembuatan ulang kata sandi baru untuk token akan memakan waktu 60 detik untuk direplikasi dan tersedia.
Di portal, navigasi ke registri kontainer Anda.
Di bawah Izin repositori, pilih Token, dan pilih token.
Dalam detail token, pilih kata password1 atau password2, dan pilih ikon Hasilkan.
Di layar kata sandi, secara opsional atur tanggal kedaluwarsa untuk kata sandi, dan pilih Hasilkan. Disarankan untuk menetapkan tanggal kedaluwarsa.
Setelah membuat kata sandi, salin dan simpan ke lokasi yang aman. Anda tidak dapat mengambil kata sandi yang dihasilkan setelah menutup layar, tetapi Anda dapat menghasilkan kata sandi baru.
Mengautentikasi dengan token
Ketika pengguna atau layanan menggunakan token untuk mengautentikasi dengan registri target, ia menyediakan nama token sebagai nama pengguna dan salah satu kata sandi yang dihasilkan.
Metode autentikasi bergantung pada tindakan atau tindakan yang dikonfigurasi yang terkait dengan token.
Perbuatan | Cara mengautentikasi |
---|---|
content/delete |
az acr repository delete di Azure CLIContoh: az acr repository delete --name myregistry --repository myrepo --username MyToken --password xxxxxxxxxx |
content/read |
docker login az acr login di Azure CLIContoh: az acr login --name myregistry --username MyToken --password xxxxxxxxxx |
content/write |
docker login az acr login di Azure CLI |
metadata/read |
az acr repository show az acr repository show-tags az acr manifest list-metadata di Azure CLI |
metadata/write |
az acr repository untag az acr repository update di Azure CLI |
Contoh: Gunakan token
Contoh berikut menggunakan token yang dibuat sebelumnya dalam artikel ini untuk melakukan operasi umum pada repositori: mendorong dan menarik gambar, menghapus gambar, dan tag repositori daftar. Token disiapkan awalnya dengan izin dorong content/write
(dan content/read
tindakan) di repositori samples/hello-world
.
Gambar uji tarik dan tandai
Untuk contoh berikut, tarik gambar publik hello-world
dan nginx
dari Microsoft Container Registry, dan tandai untuk registri dan repositori Anda.
docker pull mcr.microsoft.com/hello-world
docker pull mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
docker tag mcr.microsoft.com/hello-world myregistry.azurecr.io/samples/hello-world:v1
docker tag mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine myregistry.azurecr.io/samples/nginx:v1
Mengautentikasi menggunakan token
Jalankan docker login
atau az acr login
autentikasi dengan registri untuk mendorong atau menarik gambar. Berikan nama token sebagai nama pengguna, dan berikan salah satu kata sandinya. Token harus memiliki status Enabled
.
Contoh berikut diformat untuk shell bash, dan menyediakan nilai menggunakan variabel lingkungan.
TOKEN_NAME=MyToken
TOKEN_PWD=<token password>
echo $TOKEN_PWD | docker login --username $TOKEN_NAME --password-stdin myregistry.azurecr.io
Output harus menunjukkan autentikasi yang berhasil:
Login Succeeded
Mendorong gambar ke registri
Setelah berhasil masuk, coba dorong gambar yang ditandai ke registri. Karena token memiliki izin untuk mendorong gambar ke repositori samples/hello-world
, dorongan berikut berhasil:
docker push myregistry.azurecr.io/samples/hello-world:v1
Token tidak memiliki izin ke repo samples/nginx
, sehingga upaya dorong berikut gagal dengan kesalahan yang mirip dengan requested access to the resource is denied
:
docker push myregistry.azurecr.io/samples/nginx:v1
Perbarui izin token
Untuk memperbarui izin token, perbarui izin di peta lingkup terkait. Peta lingkup yang diperbarui diterapkan langsung ke semua token terkait.
Misalnya, perbarui MyToken-scope-map
dengan content/write
dan tindakan content/read
pada repositori samples/ngnx
, dan hapus tindakan content/write
di repositori samples/hello-world
.
Untuk menggunakan Azure CLI, jalankan az acr scope-map update untuk memperbarui peta lingkup:
az acr scope-map update \
--name MyScopeMap \
--registry myregistry \
--add-repository samples/nginx content/write content/read \
--remove-repository samples/hello-world content/write
Di portal Microsoft Azure:
- Navigasikan ke registri kontainer Anda.
- Di bawah Izin repositori, pilih Peta cakupan, dan pilih peta cakupan yang akan diperbarui.
- Di bawah Repositori, masukkan
samples/nginx
, dan di bawah Izin, pilihcontent/read
dancontent/write
. Lalu pilih +Tambahkan. - Di bawah Repositori, pilih
samples/hello-world
dan di bawah Izin, batal pilihcontent/write
. Kemudian pilih Simpan.
Setelah memperbarui peta lingkup, dorongan berikut berhasil:
docker push myregistry.azurecr.io/samples/nginx:v1
Karena peta lingkup hanya memiliki izin content/read
pada repositori samples/hello-world
, upaya dorong ke repo samples/hello-world
sekarang gagal:
docker push myregistry.azurecr.io/samples/hello-world:v1
Menarik gambar dari kedua repo berhasil, karena peta lingkup menyediakan izin content/read
pada kedua repositori:
docker pull myregistry.azurecr.io/samples/nginx:v1
docker pull myregistry.azurecr.io/samples/hello-world:v1
Hapus gambar
Perbarui peta lingkup dengan menambahkan tindakan content/delete
ke repositori nginx
. Tindakan ini memungkinkan penghapusan gambar di repositori, atau penghapusan seluruh repositori.
Untuk singkatnya, kami hanya menampilkan perintah az acr scope-map update untuk memperbarui peta cakupan:
az acr scope-map update \
--name MyScopeMap \
--registry myregistry \
--add-repository samples/nginx content/delete
Untuk memperbarui peta cakupan yang menggunakan portal, lihat bagian sebelumnya.
Gunakan perintah az acr repository delete berikut untuk menghapus repositori samples/nginx
. Untuk menghapus gambar atau repositori, berikan nama dan kata sandi token ke perintah. Contoh berikut menggunakan variabel lingkungan yang dibuat sebelumnya dalam artikel:
az acr repository delete \
--name myregistry --repository samples/nginx \
--username $TOKEN_NAME --password $TOKEN_PWD
Tampilkan tag repo
Perbarui peta lingkup dengan menambahkan tindakan metadata/read
ke repositori hello-world
. Tindakan ini memungkinkan membaca data manifes dan tag di repositori.
Untuk singkatnya, kami hanya menampilkan perintah az acr scope-map update untuk memperbarui peta cakupan:
az acr scope-map update \
--name MyScopeMap \
--registry myregistry \
--add-repository samples/hello-world metadata/read
Untuk memperbarui peta cakupan yang menggunakan portal, lihat bagian sebelumnya.
Untuk membaca metadata dalam samples/hello-world
repositori, jalankan perintah az acr manifest list-metadata atau az acr repository show-tags.
Untuk membaca metadata, berikan nama dan kata sandi token ke salah satu perintah. Contoh berikut menggunakan variabel lingkungan yang dibuat sebelumnya dalam artikel:
az acr repository show-tags \
--name myregistry --repository samples/hello-world \
--username $TOKEN_NAME --password $TOKEN_PWD
Contoh output:
[
"v1"
]
Token registri dan peta lingkup
Daftar peta lingkup
Gunakan perintah az acr scope-map list, atau layar Peta cakupan di portal, untuk mencantumkan semua peta cakupan yang dikonfigurasi dalam registri. Contohnya:
az acr scope-map list \
--registry myregistry --output table
Output terdiri dari tiga peta lingkup yang ditentukan sistem dan peta lingkup lainnya yang dihasilkan oleh Anda. Token dapat dikonfigurasi dengan salah satu peta lingkup ini.
NAME TYPE CREATION DATE DESCRIPTION
------------------- ------------- -------------------- ------------------------------------------------------------
_repositories_admin SystemDefined 2020-01-20T09:44:24Z Can perform all read, write and delete operations on the ...
_repositories_pull SystemDefined 2020-01-20T09:44:24Z Can pull any repository of the registry
_repositories_push SystemDefined 2020-01-20T09:44:24Z Can push to any repository of the registry
MyScopeMap UserDefined 2019-11-15T21:17:34Z Sample scope map
Tampilkan detil token
Untuk melihat detail token, seperti status dan tanggal kedaluwarsa kata sandinya, jalankan perintah az acr token show , atau pilih token di layar Token di portal. Contohnya:
az acr scope-map show \
--name MyScopeMap --registry myregistry
Gunakan perintah az acr token list, atau layar Token di portal, untuk mencantumkan semua token yang dikonfigurasi dalam registri. Contohnya:
az acr token list --registry myregistry --output table
Meregenerasi kata sandi token
Jika Anda tidak menghasilkan kata sandi token, atau Anda ingin membuat kata sandi baru, jalankan perintah az acr token credential generate. Pembuatan ulang kata sandi baru untuk token akan memakan waktu 60 detik untuk direplikasi dan tersedia.
Contoh berikut menghasilkan nilai baru untuk kata sandi1 untuk token MyToken, dengan periode kedaluwarsa 30 hari. Ini menyimpan kata sandi dalam variabel TOKEN_PWD
lingkungan. Contoh ini diformat untuk shell bash.
TOKEN_PWD=$(az acr token credential generate \
--name MyToken --registry myregistry --expiration-in-days 30 \
--password1 --query 'passwords[0].value' --output tsv)
Untuk menggunakan portal Microsoft Azure untuk menghasilkan kata sandi token, lihat langkah-langkah di Buat token - portal sebelumnya di artikel ini.
Perbarui token dengan peta lingkup baru
Jika Anda ingin memperbarui token dengan peta lingkup yang berbeda, jalankan az acr token update dan tentukan peta lingkup baru. Contohnya:
az acr token update --name MyToken --registry myregistry \
--scope-map MyNewScopeMap
Di portal, pada layar Token , pilih token, dan di bawah Peta cakupan, pilih peta cakupan yang berbeda.
Tip
Setelah memperbarui token dengan peta lingkup baru, Anda mungkin ingin membuat kata sandi token baru. Gunakan perintah az acr token credential generate atau regenerasi kata sandi token di portal Microsoft Azure.
Menonaktifkan atau menghapus token
Anda mungkin perlu menonaktifkan sementara penggunaan kredensial token untuk pengguna atau layanan.
Menggunakan Azure CLI, jalankan perintah az acr token update untuk mengatur status
ke disabled
:
az acr token update --name MyToken --registry myregistry \
--status disabled
Di portal, pilih token di layar Token , dan pilih Nonaktifkan di bawah Status.
Untuk menghapus token agar membatalkan akses secara permanen oleh siapa pun yang menggunakan kredensialnya, jalankan perintah az acr token delete.
az acr token delete --name MyToken --registry myregistry
Di portal, pilih token di layar Token , dan pilih Buang.
Langkah berikutnya
- Untuk mengelola peta lingkup dan token, gunakan perintah tambahan di kelompok perintah az acr scope-map dan az acr token.
- Lihat gambaran umum autentikasi untuk opsi lain untuk mengautentikasi dengan registri kontainer Azure, termasuk menggunakan identitas Microsoft Entra, perwakilan layanan, atau akun admin.
- Pelajari tentang pendaftar yang terhubung dan menggunakan token untuk akses.