Halaman ini menjelaskan izin untuk mengontrol akses ke Container Registry.
Setelah mengonfigurasi izin, Anda dapat mengonfigurasi autentikasi untuk klien Docker yang Anda gunakan untuk mengirim dan mengambil image.
Jika Anda menggunakan Artifact Analysis untuk menangani metadata container, seperti kerentanan yang ditemukan dalam image, lihat dokumentasi Artifact Analysis untuk mengetahui informasi tentang cara memberikan akses untuk melihat atau mengelola metadata.
Sebelum memulai
Pastikan Anda memiliki izin untuk mengelola pengguna. Anda harus memiliki izin dalam salah satu peran berikut:
- Project IAM Admin (roles/resourcemanager.projectIamAdmin)
- Security Admin (roles/iam.securityAdmin)
Sebagai alternatif untuk memberikan peran ini, Anda dapat menggunakan peran khusus atau peran standar dengan izin yang sama.
Izin dan peran
Semua pengguna, akun layanan, dan identitas lainnya yang berinteraksi dengan Container Registry harus memiliki izin Identity and Access Management (IAM) yang sesuai untuk Cloud Storage.
- Layanan Google Cloud yang biasanya mengakses Container Registry dikonfigurasi dengan izin default ke registry dalam project Google Cloud yang sama. Jika izin default tidak memenuhi kebutuhan Anda, Anda harus mengonfigurasi izin yang sesuai.
- Untuk identitas lain, Anda harus mengonfigurasi izin yang diperlukan.
Anda mengontrol akses ke host Container Registry dengan izin Cloud Storage. Tabel berikut mencantumkan peran Cloud Storage yang memiliki izin yang diperlukan oleh Container Registry.
Beberapa izin tambahan diperlukan saat melihat image Container Registry menggunakan konsol Google Cloud. Lihat Izin umum yang diperlukan untuk menggunakan konsol Cloud.
Akses yang diperlukan | Peran | Tempat untuk memberikan izin |
---|---|---|
Menarik image (hanya baca) dari registry yang ada | Storage Object Viewer (roles/storage.objectViewer) | Berikan peran tersebut di bucket penyimpanan registry. |
Mengirim (menulis) image ke dan mengambil (membaca) image dari host registry yang ada dalam project | Storage Legacy Bucket Writer (roles/storage.legacyBucketWriter) | Berikan peran tersebut di bucket penyimpanan registry. Izin ini hanya tersedia di level bucket, Anda tidak dapat memberikannya di level project. |
Tambahkan host registry ke project Google Cloud dan buat bucket penyimpanan terkait. | Storage Admin (roles/storage.admin) | Memberikan peran di tingkat project |
Mendorong gambar memerlukan izin baca dan tulis objek serta
izin storage.buckets.get
. Peran Storage Legacy Bucket Writer
menyertakan izin yang diperlukan dalam satu peran Cloud Storage, tetapi
tidak memberikan kontrol penuh atas bucket dan objek penyimpanan.
Peran Storage Admin memberikan kontrol penuh atas bucket dan objek penyimpanan. Jika Anda memberikan izin ini di level project, akun utama memiliki akses ke semua bucket penyimpanan dalam project, termasuk bucket yang tidak digunakan oleh Container Registry. Pertimbangkan dengan cermat akun utama mana yang memerlukan peran ini.
- Secara default, akun layanan Cloud Build memiliki izin dalam peran Storage Admin. Oleh karena itu, akun layanan ini dapat menambahkan registry ke project induknya dengan push pertama dan mendorong image ke registry yang ada di project induknya.
- Jika Anda menggunakan Docker atau alat lain untuk membuat dan mengirim image ke registry, pertimbangkan untuk menambahkan registry ke project Anda menggunakan akun dengan peran Storage Admin yang lebih permisif, lalu berikan peran Storage Legacy Bucket Writer atau Storage Object Viewer ke akun lain yang perlu mengirim atau menarik image.
Untuk mengetahui informasi selengkapnya tentang peran dan izin Cloud Storage, lihat dokumentasi Cloud Storage.
Memberikan izin IAM
Container Registry menggunakan bucket Cloud Storage sebagai penyimpanan dasar untuk image container. Anda mengontrol akses ke image dengan memberikan izin ke bucket untuk registry.
Push gambar pertama ke nama host akan menambahkan host registry dan bucket penyimpanannya ke project. Misalnya, push pertama ke gcr.io/my-project
menambahkan host registry gcr.io
ke project dengan
project ID
my-project
dan membuat bucket penyimpanan untuk registry. Nama bucket memiliki salah satu format berikut:
artifacts.PROJECT-ID.appspot.com
untuk gambar yang disimpan di hostgcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
untuk image yang disimpan di host registry lain
Agar berhasil melakukan push gambar pertama ini, akun yang melakukan push harus memiliki izin dalam peran Storage Admin.
Setelah pengiriman image awal ke host registry, Anda kemudian memberikan izin di bucket penyimpanan registry untuk mengontrol akses ke image di registry:
- Storage Legacy Bucket Writer untuk mengirim dan menarik
- Storage Object Viewer hanya untuk mengambil
Anda dapat memberikan izin untuk bucket menggunakan Konsol Google Cloud atau Google Cloud CLI.
Pembatasan dan batasan
Anda hanya dapat memberikan izin di tingkat bucket penyimpanan untuk host Container Registry.
- Container Registry mengabaikan izin yang ditetapkan pada setiap objek dalam bucket Cloud Storage.
- Anda tidak dapat memberikan izin pada repositori dalam registry. Jika Anda memerlukan kontrol akses yang lebih terperinci, Artifact Registry menyediakan kontrol akses tingkat repositori dan mungkin lebih sesuai dengan kebutuhan Anda.
- Jika mengaktifkan akses level bucket yang seragam untuk bucket penyimpanan Container Registry, Anda harus secara eksplisit memberikan izin kepada semua pengguna dan akun layanan yang mengakses registry Anda. Dalam hal ini, peran Pemilik dan Editor saja mungkin tidak memberikan izin yang diperlukan.
Memberikan izin
Jika host registry belum ada dalam project, akun dengan izin dalam peran Storage Admin harus mendorong image pertama ke registry. Tindakan ini akan membuat bucket penyimpanan untuk host registry.
Cloud Build memiliki izin yang diperlukan untuk melakukan push image awal dalam project yang sama. Jika Anda mendorong image dengan alat lain, verifikasi izin untuk akun Google Cloud yang Anda gunakan untuk mengautentikasi dengan Container Registry.
Untuk mengetahui informasi selengkapnya tentang cara mengirim image awal dengan Docker, lihat Menambahkan registry.
Dalam project dengan Container Registry, berikan izin yang sesuai pada bucket Cloud Storage yang digunakan oleh host registry.
Konsol
- Buka halaman Cloud Storage di konsol Google Cloud.
Klik link
artifacts.PROJECT-ID.appspot.com
atauSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
untuk bucket.Ganti PROJECT-ID dengan project ID Google Cloud dari project yang menghosting Container Registry dan STORAGE-REGION dengan multi-region (
asia
,eu
, atauus
) dari registry yang menghosting image.Pilih tab Permissions.
Klik Tambahkan.
Di kolom Principals, masukkan alamat email akun yang memerlukan akses, dipisahkan dengan koma. Alamat email ini dapat berupa salah satu dari berikut:
- Akun Google (misalnya,
someone@example.com
) - Grup Google (misalnya,
my-developer-team@googlegroups.com
) Akun layanan IAM.
Lihat daftar layanan Google Cloud yang biasanya mengakses registry untuk menemukan alamat email akun layanan terkait. Jika layanan berjalan di project yang berbeda dengan Container Registry, pastikan Anda menggunakan alamat email akun layanan di project lain.
- Akun Google (misalnya,
Dari menu drop-down Select a role, pilih kategori Cloud Storage, lalu pilih izin yang sesuai.
- Storage Object Viewer hanya untuk mengambil gambar
- Storage Legacy Bucket Writer untuk mengirim dan menarik gambar
Klik Tambahkan.
gcloud
Jalankan perintah berikut untuk mencantumkan bucket dalam project:
gcloud storage ls
Responsnya akan terlihat seperti contoh berikut:
gs://[BUCKET_NAME1]/ gs://[BUCKET_NAME2]/ gs://[BUCKET_NAME3]/ ...
Temukan bucket untuk host registry dalam daftar bucket yang ditampilkan. Bucket yang menyimpan image Anda memiliki nama BUCKET-NAME dalam salah satu bentuk berikut:
artifacts.PROJECT-ID.appspot.com
untuk gambar yang disimpan di hostgcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
untuk image yang disimpan di host registry lain
Dari mana
- PROJECT-ID adalah project ID Google Cloud Anda.
- STORAGE-REGION adalah lokasi bucket penyimpanan:
us
untuk registry di hostus.gcr.io
eu
untuk registry di hosteu.gcr.io
asia
untuk registry di hostasia.gcr.io
Jalankan perintah berikut di shell atau jendela terminal:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=TYPE:EMAIL-ADDRESS \ --role=ROLE
Dari mana
- BUCKET_NAME adalah nama bucket Cloud Storage dalam bentuk
artifacts.PROJECT-ID.appspot.com
atauSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
- TYPE dapat berupa salah satu dari berikut:
serviceAccount
, jika EMAIL-ADDRESS menentukan akun layanan.user
, jika EMAIL-ADDRESS adalah Akun Google.group
, jika EMAIL-ADDRESS adalah grup Google.
EMAIL-ADDRESS dapat berupa salah satu dari hal berikut:
- Akun Google (misalnya,
someone@example.com
) - Grup Google (misalnya,
my-developer-team@googlegroups.com
) Akun layanan IAM.
Lihat daftar layanan Google Cloud yang biasanya mengakses registry untuk menemukan alamat email akun layanan terkait. Jika layanan berjalan di project yang berbeda dengan Container Registry, pastikan Anda menggunakan alamat email akun layanan di project lain.
- Akun Google (misalnya,
ROLE adalah peran Cloud Storage yang ingin Anda berikan.
objectViewer
untuk menarik gambarlegacyBucketWriter
mengirim dan mengambil image
- BUCKET_NAME adalah nama bucket Cloud Storage dalam bentuk
Misalnya, perintah ini memberikan akun layanan
my-account@my-project.iam.gserviceaccount.com
dengan izin untuk mendorong dan menarik image di bucketmy-example-bucket
:gcloud storage buckets add-iam-policy-binding gs://my-example-bucket \ --member=serviceAccount:my-account@my-project.iam.gserviceaccount.com \ --role=roles/storage.objectUser
Perintah
gcloud storage buckets add-iam-policy-binding
mengubah izin IAM bucket penyimpanan tempat registry dihosting. Contoh tambahan ada dalam dokumentasi gcloud CLI.Jika Anda mengonfigurasi akses untuk VM Compute Engine atau node GKE yang akan mendorong image ke Container Registry, lihat Mengonfigurasi VM dan cluster untuk langkah-langkah konfigurasi tambahan.
Mengonfigurasi akses publik ke gambar
Container Registry dapat diakses secara publik jika bucket penyimpanan yang mendasari lokasi host dapat diakses secara publik. Dalam project, semua image di setiap lokasi host bersifat publik atau tidak. Dalam host project, Anda tidak dapat menayangkan gambar tertentu saja secara publik. Jika Anda memiliki gambar tertentu yang ingin dipublikasikan:
- Pastikan untuk menyimpannya di lokasi host terpisah yang Anda publikasikan, atau
- Buat project baru untuk menyimpan gambar yang dapat diakses secara publik.
Untuk menayangkan image penampung secara publik, buat bucket penyimpanan yang mendasarinya dapat diakses secara publik dengan mengikuti langkah-langkah berikut:
Pastikan Anda telah mengirim image ke Container Registry sehingga bucket penyimpanan yang mendasarinya ada.
Temukan nama bucket Cloud Storage untuk registry tersebut. Untuk melakukannya, cantumkan bucket:
gcloud storage ls
URL bucket Container Registry Anda akan tercantum sebagai
gs://artifacts.PROJECT-ID.appspot.com
ataugs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, dengan:- PROJECT-ID adalah project ID Google Cloud Anda. Project cakupan domain akan memiliki nama domain sebagai bagian dari project ID.
- STORAGE-REGION adalah lokasi bucket penyimpanan:
us
untuk registry di hostus.gcr.io
eu
untuk registry di hosteu.gcr.io
asia
untuk registry di hostasia.gcr.io
Buat bucket penyimpanan Container Registry dapat diakses secara publik dengan menjalankan perintah berikut. Perintah ini akan membuat semua gambar di bucket dapat diakses oleh publik.
gcloud storage buckets add-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
dengan:
gs://BUCKET-NAME
adalah URL bucket Container Registry
Menghapus akses publik ke gambar
Konsol
Pastikan Anda telah mengirim image ke Container Registry sehingga bucket penyimpanan yang mendasarinya ada.
Buka halaman Container Registry di konsol Google Cloud.
Di panel kiri, klik Setelan.
Di halaman Setelan pada bagian Akses publik, alihkan visibilitas ke Pribadi. Setelan ini mengontrol akses ke bucket penyimpanan yang mendasarinya.
penyimpanan gcloud
Temukan nama bucket Cloud Storage untuk registry tersebut. Untuk melakukannya, cantumkan bucket:
gcloud storage ls
URL bucket Container Registry Anda akan tercantum sebagai
gs://artifacts.PROJECT-ID.appspot.com
ataugs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, dengan:- PROJECT-ID adalah project ID Konsol Google Cloud Anda. Project cakupan domain akan memiliki nama domain sebagai bagian dari project ID.
- STORAGE-REGION adalah lokasi bucket penyimpanan:
us
untuk registry di hostus.gcr.io
eu
untuk registry di hosteu.gcr.io
asia
untuk registry di hostasia.gcr.io
Untuk menghapus akses publik ke bucket penyimpanan, jalankan perintah berikut di shell atau jendela terminal:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \ --member=allUsers --role=roles/storage.objectViewer
dengan:
BUCKET-NAME
adalah nama bucket yang diinginkan
Mencabut izin
Gunakan langkah-langkah berikut untuk mencabut izin IAM.
Konsol
- Buka halaman Cloud Storage di konsol Google Cloud.
Klik link
artifacts.PROJECT-ID.appspot.com
atauSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
untuk bucket. Di sini, PROJECT-ID adalah project ID Google Cloud dari project yang menghosting Container Registry dan STORAGE-REGION adalah multi-region (asia
,eu
, atauus
) dari registry yang menghosting image.Pilih tab Permissions.
Klik ikon tempat sampah di samping akun utama yang ingin Anda hapus.
gcloud
Jalankan perintah berikut di shell atau jendela terminal:
gcloud storage bucket remove-iam-policy-binding gs://BUCKET-NAME \
--member=PRINCIPAL --all
dengan:
BUCKET-NAME
adalah nama bucket yang diinginkan- PRINCIPAL dapat berupa salah satu dari berikut:
user:EMAIL-ADDRESS
untuk Akun GoogleserviceAccount:EMAIL-ADDRESS
untuk akun layanan IAMgroup:EMAIL-ADDRESS
untuk grup Google.allUsers
untuk mencabut akses publik
Berintegrasi dengan layanan Google Cloud
Untuk sebagian besar akun layanan Google Cloud, mengonfigurasi akses ke registry hanya memerlukan pemberian izin IAM yang sesuai.
Izin default untuk layanan Google Cloud
Layanan Google Cloud seperti Cloud Build atau Google Kubernetes Engine menggunakan akun layanan default atau agen layanan untuk berinteraksi dengan resource dalam project yang sama.
Anda harus mengonfigurasi atau mengubah izin sendiri jika:
- Layanan Google Cloud berada di project yang berbeda dengan Container Registry.
- Izin default tidak memenuhi kebutuhan Anda. Misalnya, akun layanan Compute Engine default memiliki akses baca saja ke penyimpanan dalam project yang sama. Jika ingin mendorong image dari VM ke registry, Anda harus mengubah izin untuk akun layanan VM atau mengautentikasi ke registry dengan akun yang memiliki akses tulis ke penyimpanan.
- Anda menggunakan akun layanan kustom untuk berinteraksi dengan Container Registry
Akun layanan berikut biasanya mengakses Container Registry. Alamat email untuk akun layanan menyertakan project ID atau nomor project Google Cloud dari project tempat layanan berjalan.
Layanan | Akun layanan | Alamat email | Izin |
---|---|---|---|
Lingkungan fleksibel App Engine | Akun layanan default App Engine | PROJECT-ID@appspot.gserviceaccount.com | Peran editor, dapat membaca dan menulis ke penyimpanan |
Compute Engine | Compute Engine default service account | PROJECT-NUMBER-compute@developer.gserviceaccount.com | Peran Editor, terbatas pada akses hanya baca ke penyimpanan |
Cloud Build | Akun layanan Cloud Build | PROJECT-NUMBER@cloudbuild.gserviceaccount.com | Izin default mencakup pembuatan bucket penyimpanan, serta akses baca dan tulis ke penyimpanan. |
Cloud Run | Akun layanan default Compute Engine Akun layanan runtime default untuk revisi. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Peran Editor, terbatas pada akses hanya baca ke penyimpanan |
GKE | Akun layanan default Compute Engine Akun layanan default untuk node. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Peran Editor, terbatas pada akses hanya baca ke penyimpanan |
Mengonfigurasi VM dan cluster untuk mengirim image
Compute Engine dan layanan Google Cloud apa pun yang menggunakan Compute Engine memiliki akun layanan default Compute Engine sebagai identitas default.
Izin IAM dan cakupan akses memengaruhi kemampuan VM untuk membaca dan menulis ke penyimpanan.
- Izin IAM menentukan akses ke resource.
- Cakupan akses menentukan cakupan OAuth default untuk permintaan yang dibuat melalui gcloud CLI dan library klien pada instance VM. Akibatnya, cakupan akses dapat lebih membatasi akses ke metode API saat mengautentikasi dengan Kredensial Default Aplikasi.
- Untuk mengambil image pribadi, akun layanan VM harus memiliki izin
read
ke bucket penyimpanan image. - Untuk mendorong image pribadi, akun layanan VM harus memiliki cakupan akses
read-write
,cloud-platform
, ataufull-control
ke bucket penyimpanan image.
- Untuk mengambil image pribadi, akun layanan VM harus memiliki izin
Akun layanan default Compute Engine memiliki peran Editor secara default, yang mencakup izin untuk membuat dan memperbarui resource untuk sebagian besar layanan Google Cloud. Namun, untuk akun layanan default atau akun layanan kustom yang Anda kaitkan dengan VM, cakupan akses default untuk bucket penyimpanan bersifat hanya baca. Artinya, secara default, VM tidak dapat mendorong image.
Jika Anda hanya ingin men-deploy image ke lingkungan seperti Compute Engine dan GKE, Anda tidak perlu mengubah cakupan akses. Jika ingin menjalankan aplikasi di lingkungan ini yang mendorong image ke registry, Anda harus melakukan konfigurasi tambahan.
Penyiapan berikut memerlukan perubahan pada izin IAM atau konfigurasi cakupan akses.
- Men-push image dari VM atau cluster
- Jika Anda ingin mendorong image, akun layanan instance VM harus memiliki cakupan
storage-rw
, bukanstorage-ro
. - VM dan Container Registry berada dalam project terpisah
- Anda harus memberikan akun layanan dengan izin IAM untuk mengakses bucket penyimpanan yang digunakan oleh Container Registry.
- Menjalankan perintah
gcloud
di VM - Akun layanan harus memiliki cakupan
cloud-platform
. Cakupan ini memberikan izin untuk mengirim dan mengambil image, serta menjalankan perintahgcloud
.
Langkah-langkah untuk mengonfigurasi cakupan ada di bagian berikut.
Mengonfigurasi cakupan untuk VM
Untuk menetapkan cakupan akses saat membuat VM, gunakan opsi --scopes.
gcloud compute instances create INSTANCE --scopes=SCOPE
Dari mana
- INSTANCE adalah nama instance VM.
- SCOPE adalah cakupan yang ingin Anda konfigurasi untuk akun layanan VM:
- Menarik gambar:
storage-ro
- Menarik dan mengirim image:
storage-rw
- Menarik dan mendorong image, jalankan perintah gcloud:
cloud-platform
- Menarik gambar:
Untuk mengubah cakupan untuk instance VM yang ada:
Tetapkan cakupan akses dengan opsi --scopes.
Hentikan instance VM. Lihat Menghentikan instance.
Ubah cakupan akses dengan perintah berikut.
gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
Dari mana
- INSTANCE adalah nama instance VM.
- SCOPE adalah cakupan yang ingin Anda konfigurasi untuk akun layanan VM:
- Menarik gambar:
storage-ro
- Menarik dan mengirim image:
storage-rw
- Menarik dan mendorong image, jalankan perintah gcloud:
cloud-platform
- Menarik gambar:
Mulai ulang instance VM. Lihat Memulai instance yang dihentikan.
Jika ingin menggunakan akun layanan kustom untuk VM, bukan akun layanan default, Anda dapat menentukan akun layanan dan cakupan akses yang akan digunakan saat membuat VM atau mengubah setelan VM.
Mengonfigurasi cakupan untuk cluster Google Kubernetes Engine
Secara default, cluster GKE baru dibuat dengan izin hanya baca untuk bucket Cloud Storage.
Untuk menetapkan cakupan penyimpanan read-write
saat membuat cluster Google Kubernetes Engine, gunakan opsi --scopes
.
Misalnya, perintah berikut membuat cluster dengan cakupan
bigquery
, storage-rw
, dan compute-ro
:
gcloud container clusters create example-cluster \
--scopes=bigquery,storage-rw,compute-ro
Untuk mengetahui informasi selengkapnya tentang cakupan yang dapat Anda tetapkan saat membuat cluster baru, baca dokumentasi untuk perintah gcloud container clusters create.
Akun layanan Container Registry
Agen Layanan Container Registry bertindak atas nama Container Registry saat berinteraksi dengan layanan Google Cloud. Agen layanan memiliki serangkaian izin minimum yang diperlukan jika Anda mengaktifkan Container Registry API setelah 5 Oktober 2020. Agen layanan sebelumnya memiliki peran Editor. Untuk mengetahui informasi selengkapnya tentang agen layanan dan mengubah izinnya, lihat Akun layanan Container Registry.
Coba sendiri
Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa Container Registry dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
Coba Container Registry secara gratis