Kontrol akses dengan IAM

Halaman ini menjelaskan izin untuk mengontrol akses ke Container Registry.

Setelah mengonfigurasi izin, Anda kemudian 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 Analisis Artefak 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:

  • Admin IAM Project (roles/resourcemanager.projectIamAdmin)
  • Admin Keamanan (roles/iam.securityAdmin)

Selain memberikan peran ini, Anda dapat menggunakan peran khusus atau peran standar dengan izin yang sama.

Izin dan peran

Semua pengguna, akun layanan, dan identities lain 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 di 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 dapat 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 yang diperlukan saat melihat image Container Registry menggunakan Konsol Google Cloud. Lihat Izin umum yang diperlukan untuk menggunakan Cloud Console.

Akses yang diperlukan Peran Tempat memberikan izin
Menarik image (hanya baca) dari registry yang ada Storage Object Viewer (roles/storage.objectViewer) Memberikan peran pada bucket penyimpanan registry.
Mengirim (menulis) image ke dan menarik (membaca) image dari host registry yang ada dalam sebuah project Penulis Bucket Lama Storage (roles/storage.legacyBucketWriter) Memberikan peran pada bucket penyimpanan registry. Izin ini hanya tersedia di level bucket, dan Anda tidak dapat memberikannya di level project.
Tambahkan host registry ke project Google Cloud dan buat bucket penyimpanan terkait. Admin Penyimpanan (roles/storage.admin) Memberikan peran tersebut di level proyek

Pengiriman 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 akun utama mana yang memerlukan peran ini dengan cermat.

  • 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 dan push pertama 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 yang memiliki peran Storage Admin yang lebih permisif, lalu berikan peran Storage Legacy Bucket Writer atau Storage Object Viewer ke akun lain yang perlu mendorong atau menarik image.

Untuk mengetahui informasi selengkapnya tentang peran dan izin Cloud Storage, baca dokumentasi Cloud Storage.

Memberikan izin IAM

Container Registry menggunakan bucket Cloud Storage sebagai penyimpanan dasar untuk image container. Anda mengontrol akses ke image Anda dengan memberikan izin ke bucket untuk registry.

Pengiriman 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 gcr.io host
  • 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 image awal dikirim ke host registry, Anda dapat memberikan izin di bucket penyimpanan registry untuk mengontrol akses ke image di registry:

  • Penulis Bucket Lama Penyimpanan untuk mendorong dan mengambil
  • Storage Object Viewer untuk mengambil saja

Anda dapat memberikan izin untuk bucket menggunakan Google Cloud Console atau alat command line gsutil.

Pembatasan dan batasan

Anda hanya dapat memberikan izin pada level bucket penyimpanan untuk host Container Registry.

  • Container Registry mengabaikan izin yang ditetapkan pada masing-masing 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 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 sendiri mungkin tidak memberikan izin yang diperlukan.

Memberikan izin

  1. Jika host registry belum ada dalam project, akun dengan izin dalam peran Storage Admin harus mengirim image pertama ke registry. Langkah 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 mengirim image dengan alat lain, verifikasi izin akun Google Cloud yang Anda gunakan untuk melakukan autentikasi dengan Container Registry.

    Untuk mengetahui informasi selengkapnya tentang cara mengirim image awal dengan Docker, lihat Menambahkan registry.

  2. Pada project dengan Container Registry, berikan izin yang sesuai pada bucket Cloud Storage yang digunakan oleh host registry.

    Konsol

    1. Buka halaman Cloud Storage di Konsol Google Cloud.
    2. Klik link artifacts.PROJECT-ID.appspot.com atau STORAGE-REGION.artifacts.PROJECT-ID.appspot.com untuk bucket.

      Ganti PROJECT-ID dengan project ID Google Cloud untuk project yang menghosting Container Registry dan STORAGE-REGION dengan multi-region (asia, eu, atau us) registry yang menghosting image.

    3. Pilih tab Izin.

    4. Klik Tambahkan.

    5. 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 tersebut.

    6. Dari menu drop-down Select a role, pilih kategori Cloud Storage, lalu pilih izin yang sesuai.

      • Storage Object Viewer untuk mengambil gambar saja
      • Storage Legacy Bucket Writer untuk mengirim dan mengambil gambar
    7. Klik Tambahkan.

    gsutil

    1. Jalankan perintah berikut untuk menampilkan daftar bucket di project:

      gsutil ls
      

      Responsnya akan terlihat seperti contoh berikut ini:

      gs://[BUCKET_NAME1]/
      gs://[BUCKET_NAME2]/
      gs://[BUCKET_NAME3]/ ...
      

      Temukan bucket untuk host registry di daftar bucket yang ditampilkan. Bucket yang menyimpan gambar Anda memiliki nama BUCKET-NAME dalam salah satu bentuk berikut:

      • artifacts.PROJECT-ID.appspot.com untuk gambar yang disimpan di gcr.io host
      • 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 host us.gcr.io
        • eu untuk registry di host eu.gcr.io
        • asia untuk registry di host asia.gcr.io
    2. Jalankan perintah berikut di jendela shell atau terminal Anda:

      gsutil iam ch TYPE:EMAIL-ADDRESS:ROLE gs://BUCKET_NAME
      

      Dari mana

      • TYPE dapat berupa salah satu dari hal 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 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 tersebut.

      • ROLE adalah peran Cloud Storage yang ingin Anda berikan.

        • objectViewer untuk mengambil gambar
        • legacyBucketWriter gambar push dan pull
      • BUCKET_NAME adalah nama bucket Cloud Storage dalam bentuk artifacts.PROJECT-ID.appspot.com atau STORAGE-REGION.artifacts.PROJECT-ID.appspot.com

    Misalnya, perintah ini memberi akun layanan my-account@my-project.iam.gserviceaccount.com izin untuk mengirim dan mengambil gambar dalam my-example-bucket bucket:

    gsutil iam ch \
      serviceAccount:my-account@my-project.iam.gserviceaccount.com:legacyBucketWriter \
      gs://my-example-bucket
    

    Perintah gsutil iam ch mengubah izin IAM bucket penyimpanan tempat registry dihosting. Contoh lainnya ada dalam dokumentasi gsutil.

  3. Jika Anda mengonfigurasi akses untuk VM Compute Engine atau node GKE yang akan mengirim image ke Container Registry, baca artikel Mengonfigurasi VM dan cluster untuk mengetahui langkah-langkah konfigurasi tambahan.

Mengonfigurasi akses publik ke gambar

Container Registry dapat diakses secara publik jika bucket penyimpanan dasar lokasi host dapat diakses secara publik. Dalam sebuah project, semua gambar 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 {i>host<i} terpisah yang Anda jadikan publik, atau
  • Buat project baru untuk menyimpan gambar yang dapat diakses secara publik.

Untuk menayangkan image container secara publik, buat bucket penyimpanan dasar dapat diakses secara publik dengan mengikuti langkah-langkah berikut:

  1. Pastikan Anda telah mengirim image ke Container Registry sehingga bucket penyimpanan yang mendasarinya tersedia.

  2. Temukan nama bucket Cloud Storage untuk registry tersebut. Untuk melakukannya, cantumkan bucket:

    gsutil ls
    

    URL bucket Container Registry Anda akan dicantumkan sebagai gs://artifacts.PROJECT-ID.appspot.com atau gs://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 host us.gcr.io
      • eu untuk registry di host eu.gcr.io
      • asia untuk registry di host asia.gcr.io
  3. Buat bucket penyimpanan Container Registry dapat diakses secara publik dengan menjalankan perintah berikut. Perintah ini akan membuat semua gambar di bucket dapat diakses secara publik.

    gsutil iam ch allUsers:objectViewer gs://BUCKET-NAME
    

    dengan:

    • gs://BUCKET-NAME adalah URL bucket Container Registry

Menghapus akses publik ke gambar

Konsol

  1. Pastikan Anda telah mengirim image ke Container Registry sehingga bucket penyimpanan yang mendasarinya tersedia.

  2. Buka halaman Container Registry di konsol Google Cloud.

    Buka halaman Container Registry

  3. Di panel kiri, klik Setelan.

  4. Di halaman Settings pada bagian Public access, alihkan visibilitas ke Private. Setelan ini mengontrol akses ke bucket penyimpanan yang mendasarinya.

gsutil

  1. Temukan nama bucket Cloud Storage untuk registry tersebut. Untuk melakukannya, cantumkan bucket:

    gsutil ls
    

    URL bucket Container Registry Anda akan dicantumkan sebagai gs://artifacts.PROJECT-ID.appspot.com atau gs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com, dengan:

    • PROJECT-ID adalah project ID Google Cloud Console Anda. Project cakupan domain akan memiliki nama domain sebagai bagian dari project ID.
    • STORAGE-REGION adalah lokasi bucket penyimpanan:
      • us untuk registry di host us.gcr.io
      • eu untuk registry di host eu.gcr.io
      • asia untuk registry di host asia.gcr.io
  2. Untuk menghapus akses publik ke bucket penyimpanan Anda, jalankan perintah berikut di jendela shell atau terminal Anda:

    gsutil iam ch -d allUsers:objectViewer gs://BUCKET-NAME
    

dengan:

  • BUCKET-NAME adalah nama bucket yang diinginkan

Cabut izin

Gunakan langkah-langkah berikut untuk mencabut izin IAM.

Konsol

  1. Buka halaman Cloud Storage di Konsol Google Cloud.
  2. Klik link artifacts.PROJECT-ID.appspot.com atau STORAGE-REGION.artifacts.PROJECT-ID.appspot.com untuk bucket. Di sini, PROJECT-ID adalah ID project Google Cloud dari project yang menghosting Container Registry dan STORAGE-REGION adalah multi-region (asia, eu, atau us) dari registry yang menghosting image.

  3. Pilih tab Izin.

  4. Klik ikon sampah di samping akun utama yang ingin dihapus.

gsutil

Jalankan perintah berikut di jendela shell atau terminal Anda:

gsutil iam ch -d PRINCIPAL gs://BUCKET-NAME

dengan:

  • PRINCIPAL dapat berupa salah satu dari hal berikut:
    • user:EMAIL-ADDRESS untuk Akun Google
    • serviceAccount:EMAIL-ADDRESS untuk akun layanan IAM
    • group:EMAIL-ADDRESS untuk grup Google.
    • allUsers untuk mencabut akses publik
  • BUCKET-NAME adalah nama bucket yang diinginkan

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 yang dikelola Google 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 hanya baca ke penyimpanan dalam project yang sama. Jika ingin mengirim image dari VM ke registry, Anda harus mengubah izin untuk akun layanan VM atau melakukan autentikasi 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 berisi project ID atau nomor project Google Cloud dari project tempat layanan dijalankan.

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 Akun layanan default Compute Engine PROJECT-NUMBER-compute@developer.gserviceaccount.com Peran editor, dibatasi sehingga 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, dibatasi sehingga akses hanya baca ke penyimpanan
GKE Akun layanan default Compute Engine
Akun layanan default untuk node.
PROJECT-NUMBER-compute@developer.gserviceaccount.com Peran editor, dibatasi sehingga akses hanya baca ke penyimpanan

Konfigurasi 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 mengirim gambar pribadi, akun layanan VM harus memiliki cakupan akses read-write, cloud-platform, atau full-control ke bucket penyimpanan gambar.

Akun layanan default Compute Engine memiliki peran Editor secara default, yang mencakup izin untuk membuat dan mengupdate 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 adalah hanya baca. Artinya, secara default, VM tidak dapat mengirim image.

Jika 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 mengirim image ke registry, Anda harus melakukan konfigurasi tambahan.

Penyiapan berikut memerlukan perubahan pada izin IAM atau konfigurasi cakupan akses.

Mengirim image dari VM atau cluster
Jika Anda ingin mengirim gambar, akun layanan instance VM harus memiliki cakupan storage-rw, bukan storage-ro.
VM dan Container Registry berada di project terpisah
Anda harus memberikan izin IAM ke akun layanan untuk mengakses bucket penyimpanan yang digunakan oleh Container Registry.
Menjalankan perintah gcloud pada VM
Akun layanan harus memiliki cakupan cloud-platform. Cakupan ini memberikan izin untuk mendorong dan menarik gambar, serta menjalankan perintah gcloud.

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:
    • Tarik gambar: storage-ro
    • Tarik dan dorong gambar: storage-rw
    • Ambil dan kirim image, jalankan perintah gcloud: cloud-platform

Untuk mengubah cakupan instance VM yang ada:

Tetapkan cakupan akses dengan opsi --scopes.

  1. Hentikan instance VM. Baca bagian Menghentikan instance.

  2. 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:
      • Tarik gambar: storage-ro
      • Tarik dan dorong gambar: storage-rw
      • Ambil dan kirim image, jalankan perintah gcloud: cloud-platform
  3. Mulai ulang instance VM. Lihat Memulai instance yang dihentikan.

Jika ingin menggunakan akun layanan kustom untuk VM dan 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 akan 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 lebih lanjut tentang cakupan yang dapat ditetapkan saat membuat cluster baru, baca dokumentasi untuk perintah gcloud container clusters create.

Akun layanan Container Registry

Agen Layanan Container Registry adalah akun layanan yang dikelola Google yang bertindak atas nama Container Registry saat berinteraksi dengan layanan Google Cloud. Akun layanan memiliki sekumpulan izin minimum yang diperlukan jika Anda mengaktifkan Container Registry API setelah 5 Oktober 2020. Akun layanan sebelumnya memiliki peran Editor. Untuk mengetahui informasi selengkapnya tentang akun dan mengubah izinnya, lihat akun layanan Container Registry.

Cobalah 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