Kontrol akses dengan IAM

Halaman ini menjelaskan kontrol akses dengan Identity and Access Management (IAM) di Artifact Registry.

Izin default untuk Artifact Registry meminimalkan upaya penyiapan saat mengimplementasikan pipeline CI/CD. Anda juga dapat mengintegrasikan Artifact Registry dengan alat CI/CD pihak ketiga serta mengonfigurasi izin dan autentikasi yang diperlukan untuk mengakses repositori.

Jika Anda menggunakan Artifact Analysis untuk menangani metadata container, seperti kerentanan yang ditemukan dalam image, lihat dokumentasi Analisis Artefak untuk mendapatkan informasi tentang cara memberikan akses untuk melihat atau mengelola metadata.

Sebelum memulai

  1. Aktifkan Artifact Registry, termasuk mengaktifkan API dan menginstal Google Cloud CLI.
  2. Jika Anda ingin menerapkan izin khusus repositori, buat repositori Artifact Registry untuk paket Anda.

Ringkasan

Izin dan peran IAM menentukan kemampuan Anda untuk membuat, melihat, mengedit, atau menghapus data di repositori Artifact Registry.

Peran adalah kumpulan izin. Anda tidak dapat memberikan izin utama secara langsung, tetapi berikan peran kepada akun utama. Saat peran diberikan ke akun utama, semua izin pada peran tersebut juga diberikan. Anda dapat memberikan beberapa peran ke akun utama yang sama.

Izin default Google Cloud

Secara default, izin berikut berlaku untuk layanan CI/CD Google Cloud dalam project yang sama dengan Artifact Registry:

Jika semua layanan berada dalam project Google Cloud yang sama dan izin default memenuhi kebutuhan, Anda tidak perlu mengonfigurasi izin.

Anda harus mengonfigurasi izin Artifact Registry untuk layanan ini jika:

  • Anda ingin menggunakan layanan ini untuk mengakses Artifact Registry di project lain. Pada project dengan Artifact Registry, berikan kumpulan identitas workload atau akun layanan untuk setiap layanan peran yang diperlukan. Jika terhubung ke Cloud Run, berikan peran yang diperlukan kepada Agen Layanan Cloud Run.
  • Anda menggunakan versi GKE yang tidak memiliki dukungan bawaan untuk mengambil image dari Artifact Registry. Lihat bagian GKE untuk mengetahui petunjuk konfigurasi.
  • Anda ingin akun layanan default memiliki akses baca dan tulis ke repositori. Lihat informasi berikut untuk mengetahui detailnya:
  • Anda menggunakan akun layanan yang disediakan pengguna untuk lingkungan runtime, bukan akun layanan default. Pada project dengan Artifact Registry, beri peran yang diperlukan kepada akun layanan Anda.

Integrasi pihak ketiga

Untuk klien pihak ketiga, Anda harus mengonfigurasi izin dan autentikasi.

Secara tradisional, aplikasi yang berjalan di luar Google Cloud menggunakan kunci akun layanan untuk mengakses resource Google Cloud. Namun, kunci akun layanan adalah kredensial yang andal, dan dapat menimbulkan risiko keamanan jika tidak dikelola dengan benar.

Dengan Workload Identity Federation, Anda dapat menggunakan Identity and Access Management untuk memberikan peran IAM kepada eksternal, termasuk kemampuan untuk meniru identitas akun layanan. Pendekatan ini menghilangkan beban pemeliharaan dan keamanan yang terkait dengan kunci akun layanan.

Gunakan Workload Identity Federation:

  1. Membuat kumpulan Workload Identity Federation.
  2. Buat penyedia Workload Identity Federation.
  3. Berikan peran Artifact Registry yang sesuai ke kumpulan identitas workload untuk mengizinkan akses repositori.
  4. Konfigurasikan klien pihak ketiga Anda untuk melakukan autentikasi dengan Artifact Registry.

Menggunakan akun layanan:

  1. Buat akun layanan untuk bertindak atas nama aplikasi Anda, atau pilih akun layanan yang ada yang digunakan untuk otomatisasi CI/CD Anda.
  2. Berikan peran Artifact Registry yang sesuai ke akun layanan untuk memberikan akses repositori.
  3. Konfigurasikan klien pihak ketiga Anda untuk melakukan autentikasi dengan Artifact Registry.

GitLab di Google Cloud

Integrasi GitLab di Google Cloud menggunakan Workload Identity Federation untuk otorisasi dan autentikasi beban kerja GitLab di Google Cloud tanpa memerlukan akun layanan atau kunci akun layanan. Untuk mengetahui informasi selengkapnya tentang cara penggunaan Workload Identity Federation dalam kemitraan ini, lihat Ringkasan autentikasi.

Untuk menyiapkan Workload Identity Federation dan peran IAM yang diperlukan untuk GitLab di Google Cloud, lihat tutorial GitLab Kebijakan IAM dan Workload Identity Google Cloud.

Untuk menghubungkan repositori Artifact Registry, ikuti tutorial GitLab Google Artifact Registry.

Peran dan izin

Setiap metode Artifact Registry API mengharuskan akun utama (pengguna, grup, atau akun layanan) yang membuat permintaan memiliki izin yang diperlukan untuk menggunakan resource. Izin diberikan ke akun utama dengan menetapkan kebijakan yang memberikan peran yang telah ditetapkan kepada akun utama pada resource tersebut.

Anda dapat memberikan peran pada project Google Cloud atau repositori Artifact Registry.

Peran Artifact Registry yang telah ditentukan sebelumnya

IAM menyediakan peran yang telah ditetapkan yang memberikan akses ke resource Google Cloud tertentu dan mencegah akses tidak sah ke resource lain.

Gunakan peran yang telah ditetapkan berikut untuk repositori standar, virtual, dan jarak jauh di domain pkg.dev:

Peran Deskripsi
Pembaca Artifact Registry
(roles/artifactregistry.reader)
Melihat dan mendapatkan artefak, melihat metadata repositori.
Penulis Artifact Registry
(roles/artifactregistry.writer)
Membaca dan menulis artefak.
Administrator Repositori Artifact Registry
(roles/artifactregistry.repoAdmin)
Membaca, menulis, dan menghapus artefak.
Administrator Artifact Registry
(roles/artifactregistry.admin)
Membuat dan mengelola repositori dan artefak.

Peran tambahan yang telah ditetapkan berikut ini mencakup izin untuk membuat repositori gcr.io guna menghosting image untuk domain gcr.io. Peran tersebut tidak mencakup izin untuk membuat format repositori lain di Artifact Registry pada domain pkg.dev. Peran ini mendukung kompatibilitas mundur dengan Container Registry, karena Container Registry menggunakan push pertama dari image container untuk membuat setiap registry multi-regional.

Peran Deskripsi
Penulis Create-on-push Artifact Registry (roles/artifactregistry.createOnPushWriter) Membaca dan menulis artefak. Membuat repositori gcr.io.
Administrator Repositori Create-on-push Artifact Registry (roles/artifactregistry.createOnPushRepoAdmin) Membaca, menulis, dan menghapus artefak. Membuat repositori gcr.io.

Untuk mengetahui daftar lengkap izin individual dalam setiap peran, lihat peran Artifact Registry. Anda juga dapat menggunakan perintah gcloud iam roles describe untuk melihat daftar izin di setiap peran.

Peran IAM dasar

Peran IAM dasar memberi pengguna akses global level project ke semua resource Google Cloud. Gunakan peran yang telah ditetapkan untuk akses repositori jika memungkinkan sehingga pengguna dan akun layanan hanya memiliki izin yang diperlukan.

Tabel berikut mencantumkan peran dasar yang ada sebelum IAM, dan peran IAM Artifact Registry yang ada:

Peran Nama Peran Sertakan peran
roles/viewer Pengakses lihat saja roles/artifactregistry.reader
roles/editor Editor
  • roles/artifactregistry.writer
  • roles/artifactregistry.repoAdmin
roles/owner Pemilik roles/artifactregistry.admin

Memberikan izin

Berikan izin di level project jika izin yang sama berlaku untuk semua repositori dalam project. Jika beberapa akun memerlukan tingkat akses yang berbeda, berikan peran di tingkat repositori.

Jika Anda memberikan izin pada repositori virtual, izin tersebut berlaku untuk semua repositori upstream yang tersedia melalui repositori virtual, terlepas dari izin repositori individual.

Jika memberikan peran menggunakan perintah gcloud, Anda dapat menentukan satu binding peran untuk akun utama atau menggunakan file kebijakan untuk menentukan beberapa binding.

Template kebijakan referensi berikut digunakan untuk contoh di halaman ini. File kebijakan referensi diberi nama policy.yaml. Template berisi contoh nama pengguna dan akun layanan. Ganti contoh pengguna dan akun layanan ini dengan cara yang sesuai untuk project Anda.

Untuk mengetahui detail tentang format kebijakan, baca dokumentasi kebijakan IAM.

bindings:

- members:
  - user: user@gmail.com
  role: roles/owner

- members:
  - serviceAccount: repo-readonly@iam.gserviceaccount.com
  - user: user2@gmail.com
  role: roles/artifactregistry.reader

- members:
  - serviceAccount: repo-write@iam.gserviceaccount.com
  role: roles/artifactregistry.writer

- members:
  - serviceAccount: repo-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.repoAdmin

- members:
  - serviceAccount: ar-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.admin

Memberikan izin di seluruh project

Berikan peran di level project jika izin yang sama berlaku untuk semua repositori dalam project.

Untuk menambahkan pengguna atau akun layanan ke project dan memberinya peran Artifact Registry:

Konsol

  1. Buka halaman IAM di konsol Google Cloud.

    Buka halaman IAM

  2. Klik Select a project, pilih project tempat Artifact Registry berjalan, lalu klik Open.

  3. Klik Tambahkan.

  4. Masukkan alamat email. Anda dapat menambahkan individu, akun layanan, atau Google Grup sebagai akun utama.

  5. Pilih peran untuk akun utama. Sesuai dengan prinsip keamanan hak istimewa terendah, pertimbangkan untuk memberikan jumlah hak istimewa terendah yang diperlukan untuk mencegah akses yang tidak diinginkan ke resource lain.

  6. Klik Save.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Untuk memberikan peran ke satu akun utama, jalankan perintah berikut:

    gcloud projects add-iam-policy-binding PROJECT \
       --member=PRINCPAL \
       --role=ROLE

    dengan

    • PROJECT adalah ID project tempat Artifact Registry dijalankan.
    • PRINCIPAL adalah akun utama yang akan ditambahkan binding. Gunakan format user|group|serviceAccount:email atau domain:domain.

      Contoh: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, atau domain:example.domain.com.

    • ROLE adalah peran yang ingin Anda berikan.

    Untuk informasi selengkapnya, lihat dokumentasi add-iam-policy-binding.

    Untuk memberikan peran menggunakan file kebijakan, jalankan perintah berikut:

    gcloud projects set-iam-policy PROJECT /PATH/TO/policy.yaml

    Dari mana

    • PROJECT adalah ID project atau ID yang sepenuhnya memenuhi syarat untuk project tempat Artifact Registry berjalan.
    • /PATH/TO/policy.yaml adalah jalur dan nama file file kebijakan.

    Untuk mendapatkan kebijakan yang saat ini dikonfigurasi, jalankan perintah berikut:

    gcloud projects get-iam-policy PROJECT

    Dengan PROJECT adalah ID project atau ID yang sepenuhnya memenuhi syarat untuk project.

    Untuk informasi selengkapnya, lihat dokumentasi set-iam-policy.

Memberikan izin khusus repositori

Berikan izin tingkat repositori jika Anda ingin pengguna atau akun layanan memiliki tingkat akses yang berbeda untuk setiap repositori dalam project Anda.

Konsol

Untuk memberikan akses ke repositori tertentu:

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

  2. Pilih repositori yang sesuai.

  3. Jika panel info tidak ditampilkan, klik Tampilkan Panel Info di panel menu.

  4. Pada tab Permissions, klik Add Principal.

  5. Masukkan alamat email. Anda dapat menambahkan individu, akun layanan, atau Google Grup sebagai akun utama.

  6. Pilih peran untuk akun utama. Sebaiknya berikan jumlah hak istimewa terendah yang diperlukan kepada akun utama.

  7. Klik Save.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Anda dapat menetapkan serangkaian IAM masing-masing binding kebijakan atau menggunakan file kebijakan.

    Untuk memberikan peran ke satu akun utama, jalankan perintah berikut:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE

    dengan

    • REPOSITORY adalah ID repositori.
    • PRINCIPAL adalah akun utama yang akan ditambahkan binding. Gunakan format user|group|serviceAccount:email atau domain:domain.

      Contoh: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, atau domain:example.domain.com.

    • ROLE adalah peran yang ingin Anda berikan.

    • LOCATION adalah lokasi regional atau multi-regional dari repositori.

    Misalnya, guna menambahkan binding kebijakan IAM untuk peran roles/artifactregistry.writer bagi pengguna write@gmail.com dengan repositori my-repo di lokasi --us-central1, jalankan:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
    --location=us-central1 --member=user:write@gmail.com --role=roles/artifactregistry.writer

    Untuk memberikan peran menggunakan file kebijakan, jalankan perintah berikut:

    gcloud artifacts repositories set-iam-policy REPOSITORY /PATH/TO/policy.yaml --location=LOCATION

    Dari mana

    • REPOSITORY adalah ID repositori.
    • /PATH/TO/policy.yaml adalah jalur dan nama file file kebijakan.
    • LOCATION adalah lokasi regional atau multi-regional dari repositori.

    Misalnya, guna menetapkan kebijakan IAM untuk repositori my-repo di lokasi --us-central1 dengan kebijakan yang ditentukan di policy.yaml, jalankan:

    gcloud artifacts repositories set-iam-policy my-repo policy.yaml --location=us-central1

Terraform

Gunakan resource google_artifact_registry_repository_iam untuk mengonfigurasi kebijakan IAM. Contoh berikut menentukan akun layanan dengan nama resource repo-account dan memberinya akses baca ke repositori dengan nama resource my-repo.

Jika Anda baru menggunakan Terraform untuk Google Cloud, lihat halaman Memulai - Google Cloud di situs HashiCorp.

provider "google" {
    project = "PROJECT-ID"
}

resource "google_artifact_registry_repository" "my-repo"     {
  provider = google-beta

  location = "LOCATION"
  repository_id = "REPOSITORY"
  description = "DESCRIPTION"
  format = "FORMAT"
}

resource "google_service_account" "repo-account" {
  provider = google-beta

  account_id   = "ACCOUNT-ID"
  display_name = "Repository Service Account"
}

resource "google_artifact_registry_repository_iam_member" "repo-iam" {
  provider = google-beta

  location = google_artifact_registry_repository.my-repo.location
  repository = google_artifact_registry_repository.my-repo.name
  role   = "roles/artifactregistry.reader"
  member = "serviceAccount:${google_service_account.repo-account.email}"
}

ACCOUNT-ID adalah ID akun layanan. Ini adalah bagian dari kolom email akun layanan sebelum simbol @.

Untuk contoh tambahan, lihat dokumentasi untuk resource google_artifact_registry_repository_iam.

Mengonfigurasi akses publik ke repositori

Jika Anda memiliki artefak yang ingin tersedia untuk siapa saja di internet tanpa autentikasi, simpan artefak tersebut di repositori yang Anda tampilkan kepada publik.

Guna mengonfigurasi repositori untuk akses hanya baca publik, berikan peran Pembaca Artifact Registry ke allUsers utama. Sebaiknya batasi kuota permintaan pengguna agar satu pengguna tidak dapat menghabiskan kuota keseluruhan project Anda.

Konsol

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

  2. Pilih repositori yang sesuai.

  3. Jika panel info tidak ditampilkan, klik Tampilkan Panel Info di panel menu.

  4. Pada tab Permissions, klik Add Principal.

  5. Di kolom New principals, masukkan allUsers.

  6. Pilih peran Artifact Registry Reader.

  7. Tetapkan batas per pengguna pada permintaan Artifact Registry API untuk mencegah penyalahgunaan oleh pengguna yang tidak diautentikasi. Lihat Membatasi penggunaan untuk mengetahui petunjuknya.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Jalankan perintah berikut:

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE

    dengan

    • REPOSITORY adalah ID repositori.

    • ROLE adalah peran yang ingin Anda berikan.

    • LOCATION adalah lokasi regional atau multi-regional dari repositori.

    Misalnya, konfigurasikan repositori my-repo di lokasi --us-central1 sebagai publik, jalankan:

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
  3. Tetapkan batas per pengguna pada permintaan Artifact Registry API untuk mencegah penyalahgunaan oleh pengguna yang tidak diautentikasi. Lihat Membatasi penggunaan untuk mengetahui petunjuknya.

Mencabut izin

Untuk mencabut akses ke repositori, hapus akun utama dari daftar akun utama yang diotorisasi.

Untuk menghapus akses publik dari repositori, hapus akun utama allUsers.

Konsol

Untuk mencabut izin:

  1. Buka halaman Repositories di Konsol Google Cloud.

    Buka halaman Repositori

  2. Pilih repositori yang sesuai.

  3. Jika panel info tidak ditampilkan, klik Tampilkan Panel Info di panel menu.

  4. Pada tab Permissions, luaskan akun utama yang sesuai. Jika Anda mengubah repositori publik menjadi pribadi, luaskan akun utama allUsers.

  5. Klik Hapus akun utama untuk mencabut akses.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Untuk mencabut peran di level project, jalankan perintah berikut:

    gcloud projects remove-iam-policy-binding PROJECT \
       --member=PRINCIPAL \
       --role=ROLE
    • PROJECT adalah project ID.
    • PRINCIPAL adalah akun utama yang bindingnya akan dihapus. Gunakan format user|group|serviceAccount:email atau domain:domain.

      Contoh: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, atau domain:example.domain.com.

    • ROLE adalah peran yang ingin Anda cabut.

    Untuk mencabut peran repositori, jalankan perintah berikut:

    gcloud artifacts repositories remove-iam-policy-binding REPOSITORY
       --location=LOCATION \
       --member=PRINCIPAL \
       --role=ROLE

    dengan

    • REPOSITORY adalah ID repositori.
    • PRINCIPAL adalah akun utama yang bindingnya akan dihapus. Gunakan format user|group|serviceAccount:email atau domain:domain.

      Contoh: user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, atau domain:example.domain.com.

      Untuk mencabut akses publik ke repositori, tentukan allUsers utama.

    • ROLE adalah peran yang ingin Anda cabut.

    Misalnya, guna menghapus binding kebijakan untuk peran roles/artifactregistry.writer bagi pengguna write@gmail.com dengan repositori my-repo di lokasi --us-central1, jalankan:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=user:write@gmail.com \
       --role=roles/artifactregistry.writer

    Untuk mencabut akses publik ke my-repo di lokasi --us-central1, jalankan:

    gcloud artifacts repositories remove-iam-policy-binding my-repo \
       --location=us-central1 \
       --member=allUsers \
       --role=roles/artifactregistry.reader

Memberikan akses bersyarat dengan tag

Fitur ini berada dalam Pratinjau.

Administrator project dapat membuat tag untuk resource di seluruh Google Cloud dan mengelolanya di Resource Manager. Saat Anda melampirkan tag ke repositori Artifact Registry, administrator dapat menggunakan tag dengan kondisi IAM untuk memberikan akses bersyarat ke repositori.

Anda tidak dapat melampirkan tag ke artefak individual.

Untuk mengetahui informasi selengkapnya, lihat dokumentasi berikut:

Mengintegrasikan 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 Artifact 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 Artifact Registry, Anda dapat mengubah izin untuk akun layanan VM atau menggunakan akun lain dengan izin yang diperlukan.
  • Anda menggunakan akun layanan yang disediakan pengguna untuk berinteraksi dengan Artifact Registry, bukan akun layanan default.

Akun layanan berikut biasanya mengakses Artifact Registry. Alamat email untuk akun layanan berisi project ID atau nomor project Google Cloud untuk project tempat layanan dijalankan.

Layanan Akun layanan Alamat email Izin
Lingkungan fleksibel App Engine Akun layanan App Engine PROJECT-ID@appspot.gserviceaccount.com Peran editor, dapat membaca dan menulis ke repositori
Compute Engine Akun layanan default Compute Engine PROJECT-NUMBER-compute@developer.gserviceaccount.com Peran editor, terbatas untuk akses hanya baca ke repositori
Cloud Build Akun layanan Cloud Build PROJECT-NUMBER@cloudbuild.gserviceaccount.com
Izin default mencakup akses baca dan tulis ke repositori serta kemampuan untuk membuat repositori gcr.io.
Cloud Run Agen layanan Cloud Run
Agen layanan untuk run.googleapis.com.
service-PROJECT-NUMBER@serverless-robot-prod.iam.gserviceaccount.com Izin pembaca, terbatas pada akses hanya baca ke repositori
GKE Akun layanan default Compute Engine
Akun layanan default untuk node.
PROJECT-NUMBER-compute@developer.gserviceaccount.com Peran editor, terbatas untuk akses hanya baca ke repositori

Memberikan akses ke instance Compute Engine

Instance VM yang mengakses repositori harus memiliki izin Artifact Registry dan cakupan akses penyimpanan yang dikonfigurasi.

Meskipun tingkat akses akun layanan ditentukan oleh peran IAM yang diberikan ke akun layanan, cakupan akses pada instance VM menentukan cakupan OAuth default untuk permintaan yang dibuat melalui gcloud CLI dan library klien pada instance. Akibatnya, cakupan akses berpotensi membatasi akses lebih lanjut ke metode API saat melakukan autentikasi dengan Kredensial Default Aplikasi.

Compute Engine menggunakan default berikut:

  • Akun layanan default Compute Engine adalah identitas untuk instance VM. Alamat email akun layanan memiliki akhiran @developer.gserviceaccount.com.
  • Akun layanan default memiliki peran IAM dasar Editor jika Anda belum menonaktifkan perilaku ini.
  • Instance yang Anda buat dengan akun layanan default memiliki cakupan akses default Compute Engine, termasuk akses hanya baca ke penyimpanan. Meskipun peran Editor umumnya memberikan akses tulis, cakupan akses penyimpanan read-only membatasi akun layanan instance untuk mendownload artefak hanya dari repositori apa pun dalam project yang sama.

Anda harus mengonfigurasi cakupan akses akun layanan jika:

  • Akun layanan VM perlu mengakses repositori di project yang berbeda.
  • Akun layanan VM perlu melakukan tindakan selain membaca artefak dari repositori. Hal ini biasanya berlaku untuk alat pihak ketiga pada VM yang perlu mengirim image atau menjalankan perintah gcloud Artifact Registry.

Untuk mengonfigurasi izin dan menetapkan cakupan akses:

  1. Pada project dengan instance VM Anda, dapatkan nama akun layanan default Compute Engine. Alamat email akun layanan memiliki akhiran @developer.gserviceaccount.com.

  2. Pada project yang memiliki repositori, berikan izin agar akun layanan dapat mengakses repositori.

  3. Tetapkan cakupan akses dengan opsi --scopes.

    1. Hentikan instance VM. Baca bagian Menghentikan instance.

    2. Tetapkan cakupan akses dengan perintah berikut:

      gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
      

      Ganti SCOPE dengan nilai yang sesuai.

      • Untuk Docker, opsi berikut ini didukung:

        • storage-ro - Memberikan izin baca hanya untuk mengambil gambar.
        • storage-rw - Memberikan izin baca dan tulis untuk mengirim atau menarik gambar.
        • cloud-platform - Melihat dan mengelola data, termasuk metadata, di seluruh layanan Google Cloud.
      • Untuk format lain, Anda harus menggunakan cakupan cloud-platform.

    3. Mulai ulang instance VM. Lihat Memulai instance yang dihentikan.

Memberikan akses ke cluster Google Kubernetes Engine

Cluster GKE dan node pool dapat menarik container tanpa konfigurasi tambahan jika semua persyaratan berikut terpenuhi:

Jika lingkungan GKE Anda tidak memenuhi persyaratan ini, petunjuk untuk memberikan akses bergantung pada apakah Anda menggunakan akun layanan default Compute Engine atau akun layanan yang diberikan pengguna sebagai identitas untuk node Anda.

Akun layanan default

Persyaratan konfigurasi berikut berlaku untuk akun layanan default Compute Engine:

  1. Jika GKE berada di project yang berbeda dengan Artifact Registry, beri izin yang diperlukan ke akun layanan.

  2. Untuk mengirim gambar, berinteraksi dengan repositori untuk format selain penampung, atau menjalankan perintah gcloud dari cluster, Anda harus menetapkan cakupan akses untuk akun layanan saat membuat kumpulan cluster atau node.

  3. Jika Anda tidak menggunakan versi GKE yang didukung, konfigurasikan imagePullSecrets.

Akun layanan yang disediakan pengguna

Jika ingin menggunakan akun layanan yang diberikan pengguna sebagai identitas untuk cluster, Anda harus:

  1. Berikan izin yang diperlukan ke akun layanan dari project Google Cloud tempat Artifact Registry dijalankan.

  2. Secara default, membuat cluster atau kumpulan node dengan akun layanan yang disediakan pengguna akan memberikan cakupan akses cloud-platform.

    Jika Anda menggunakan flag --scopes dengan perintah gcloud container clusters create atau gcloud container node-pools create, Anda harus menyertakan cakupan akses yang sesuai untuk digunakan dengan Artifact Registry.

Menetapkan cakupan akses

Cakupan akses adalah metode lama dalam menentukan otorisasi untuk VM Compute Engine. Untuk mengambil gambar dari repositori Artifact Registry, node GKE harus memiliki cakupan akses hanya baca penyimpanan atau cakupan akses penyimpanan lain yang mencakup akses baca penyimpanan.

Anda hanya dapat menetapkan cakupan akses saat membuat cluster atau kumpulan node. Anda tidak dapat mengubah cakupan akses pada node yang ada.

  • Jika Anda menggunakan akun layanan default Compute Engine, GKE akan membuat node dengan cakupan akses default Compute Engine, yang mencakup akses hanya baca ke penyimpanan.
  • Jika Anda menggunakan akun layanan yang disediakan pengguna, GKE akan membuat node dengan cakupan cloud-platform, cakupan yang diperlukan untuk sebagian besar layanan Google Cloud.

Untuk menentukan cakupan akses saat membuat cluster, jalankan perintah berikut:

gcloud container clusters create NAME --scopes=SCOPES

Untuk menentukan cakupan akses saat membuat kumpulan node, jalankan perintah berikut:

gcloud container node-pools create NAME --scopes=SCOPES

Ganti nilai berikut:

  • NAME adalah nama cluster atau kumpulan node.
  • SCOPES adalah daftar cakupan akses yang dipisahkan koma yang akan diberikan.

    • Untuk mengakses repositori Docker, gunakan salah satu cakupan berikut:

    • storage-ro - Memberikan izin hanya baca untuk mengambil gambar.

    • storage-rw - Memberikan izin baca dan tulis untuk mengirim atau menarik gambar.

    • cloud-platform - Melihat dan mengelola data, termasuk metadata, di seluruh layanan Google Cloud.

    • Untuk mengakses repositori lain, Anda harus menggunakan cakupan cloud-platform.

    Untuk mengetahui daftar lengkap cakupan, baca dokumentasi untuk gcloud container clusters create atau gcloud container node-pools create.

Untuk mengetahui informasi lebih lanjut tentang cakupan yang dapat ditetapkan saat membuat cluster baru, baca dokumentasi untuk perintah gcloud container clusters create.

Mengonfigurasi imagePullSecret

Untuk mengonfigurasi imagePullSecret:

  1. Pada project dengan GKE, temukan akun layanan default Compute Engine. Alamat email akun memiliki akhiran @developer.gserviceaccount.com.

  2. Download kunci akun layanan untuk akun layanan.

  3. Di project dengan repositori, pastikan Anda telah diberi izin ke repositori.

  4. Pada project dengan cluster Anda, buat rahasia imagePullSecret bernama artifact-registry dengan kunci akun layanan.

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

    Dari mana

    • LOCATION adalah lokasi regional atau multi-regional dari repositori.
    • SERVICE-ACCOUNT-EMAIL adalah alamat email akun layanan Compute Engine.
    • KEY-FILE adalah nama file kunci akun layanan Anda. Misalnya, key.json.
  5. Buka akun layanan default Anda:

    kubectl edit serviceaccount default --namespace default

    Setiap namespace di cluster Kubernetes Anda memiliki akun layanan default yang disebut default. Akun layanan default ini digunakan untuk menarik image container Anda.

  6. Tambahkan secret imagePullSecret yang baru dibuat ke akun layanan default Anda:

    imagePullSecrets:
    - name: artifact-registry
    

    Akun layanan Anda sekarang akan terlihat seperti ini:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

Sekarang, setiap pod baru yang dibuat di namespace default saat ini akan memiliki rahasia imagePullSecret yang ditentukan.

Akun layanan Artifact Registry

Agen Layanan Artifact Registry adalah akun layanan yang dikelola Google yang bertindak atas nama Artifact Registry saat berinteraksi dengan layanan Google Cloud. Untuk mengetahui informasi selengkapnya tentang akun dan izinnya, lihat akun layanan Artifact Registry.

Langkah selanjutnya

Setelah menyiapkan izin, pelajari lebih lanjut cara menangani artefak.