Akun layanan Cloud Build

Cloud Build dapat menggunakan akun layanan khusus untuk menjalankan build atas nama Anda. Email untuk akun layanan Cloud Build adalah [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com. Akun layanan ini mungkin memiliki izin yang terlalu luas untuk kasus penggunaan Anda. Anda dapat meningkatkan postur keamanan dengan mengikuti prinsip hak istimewa paling rendah. Sebagai bagian dari prinsip ini, sebaiknya buat akun layanan Anda sendiri untuk menjalankan build atas nama Anda. Hal ini dapat mengurangi potensi dampak kesalahan konfigurasi atau pengguna yang berbahaya.

Halaman ini menjelaskan semua izin yang dimiliki akun layanan Cloud Build secara default. Untuk mempelajari cara memberikan atau mencabut izin ke akun layanan Cloud Build, lihat Mengonfigurasi akses untuk akun layanan Cloud Build.

Izin default akun layanan Cloud Build

Saat Anda mengaktifkan Cloud Build API untuk project Google Cloud, akun layanan Cloud Build otomatis dibuat di project dan diberi peran Cloud Build Service Account untuk resource dalam project tersebut. Peran ini berisi sejumlah izin, seperti kemampuan untuk mengupdate build atau menulis log. Akun layanan menggunakan izin ini hanya untuk melakukan tindakan saat menjalankan build Anda. Misalnya, akun layanan menggunakan izin source.repos.get untuk mengambil kode dari Cloud Source Repositories jika kode sumber untuk build Anda berada dalam Cloud Source Repositories. Jika Anda tidak berencana melakukan tindakan sebagai bagian dari proses build, sebaiknya cabut izin yang terkait dari akun layanan Cloud Build untuk mematuhi prinsip keamanan dengan hak istimewa terendah.

Tabel berikut berisi daftar izin yang terdapat dalam peran akun layanan Cloud Build dan tujuan penggunaan izin ini oleh akun layanan Cloud Build.

Izin Deskripsi Tujuan izin
cloudbuild.builds.create Dapat membuat build dan pemicu Diperlukan untuk:
  • Gunakan pemicu build.
  • Membuat, mencantumkan, mendapatkan, atau membatalkan build.
cloudbuild.builds.update Dapat mengupdate build dan pemicu
cloudbuild.builds.list Dapat mencantumkan build dan pemicu
cloudbuild.builds.get Bisa mendapatkan build dan pemicu
cloudbuild.workerpools.use Dapat menggunakan kolam renang pribadi Diperlukan untuk menjalankan build di kumpulan pribadi.
logging.logEntries.create Dapat menulis log Diperlukan untuk membuat dan mencantumkan log build di Cloud Logging.
logging.logEntries.list Dapat mencantumkan log
logging.views.access Dapat melihat log
pubsub.topics.create Dapat membuat topik Pub/Sub Diperlukan untuk mengirim update build ke Pub/Sub.
pubsub.topics.publish Dapat memublikasikan ke Pub/Sub
remotebuildexecution.blobs.get Mendapatkan akses untuk menyetujui atau menolak build. Diperlukan untuk menyetujui atau menolak build yang tertunda
resourcemanager.projects.get Dapat memperoleh informasi project
resourcemanager.projects.list Dapat membuat daftar project
source.repos.get Dapat membaca kode sumber dari repositori di Cloud Source Repositories Diperlukan untuk:
  • Gunakan pemicu Bitbucket dan Cloud Source Repositories.
  • Ambil kode sumber dari Cloud Source Repositories.
source.repos.list Dapat mencantumkan repositori di Cloud Source Repositories
storage.buckets.create Dapat membuat bucket Cloud Storage Diperlukan untuk:
  • Simpan dan dapatkan image di Container Registry ( Tidak digunakan lagi).
  • Simpan dan dapatkan artefak di Cloud Storage.
  • Kirim build secara manual melalui gcloud builds submit.
  • Simpan log build di bucket log yang dibuat pengguna.
storage.buckets.get Bisa mendapatkan bucket Cloud Storage
storage.buckets.list Dapat membuat daftar bucket Cloud Storage
storage.objects.list Dapat mencantumkan objek Cloud Storage
storage.objects.update Dapat memperbarui objek Cloud Storage
storage.objects.create Dapat menulis objek Cloud Storage
storage.objects.delete Dapat menghapus objek Cloud Storage
storage.objects.get Dapat membaca objek Cloud Storage
artifactregistry.repositories.uploadArtifacts Dapat mengupload artefak ke repositori di Artifact Registry Diperlukan untuk mengelola artefak di Artifact Registry.
artifactregistry.repositories.downloadArtifacts Dapat mendownload artefak dari repositori di Artifact Registry
artifactregistry.aptartifacts.create Dapat mengupload artefak Apt ke Artifact Registry
artifactregistry.dockerimages.get Bisa mendapatkan image Docker dari Artifact Registry
artifactregistry.dockerimages.list Dapat membuat daftar image Docker yang disimpan di Artifact Registry
artifactregistry.kfpartifacts.create Dapat mengupload artefak KFP ke Artifact Registry
artifactregistry.locations.get Dapat memperoleh informasi tentang lokasi resource di Artifact Registry
artifactregistry.locations.list Dapat mencantumkan lokasi yang didukung untuk Artifact Registry
artifactregistry.mavenartifacts.get Bisa mendapatkan paket Maven dari Artifact Registry
artifactregistry.mavenartifacts.list Dapat menampilkan daftar paket Maven dari Artifact Registry
artifactregistry.npmpackages.get Bisa mendapatkan paket npm dari Artifact Registry
artifactregistry.npmpackages.list Dapat mencantumkan paket npm dari Artifact Registry
artifactregistry.projectsettings.get Bisa mendapatkan setelan project dari Artifact Registry
artifactregistry.pythonpackages.get Bisa mendapatkan paket Python dari Artifact Registry
artifactregistry.pythonpackages.list Dapat menampilkan daftar paket Python dari Artifact Registry
artifactregistry.yumartifacts.create Dapat mengupload artefak Yum ke Artifact Registry
artifactregistry.repositories.createOnPush Dapat membuat repositori gcr.io di Artifact Registry saat pertama kali dikirim ke nama host gcr.io dalam project.
artifactregistry.repositories.get Bisa mendapatkan repositori dari Artifact Registry
artifactregistry.repositories.list Dapat mencantumkan repositori di Artifact Registry
artifactregistry.repositories.listEffectiveTags Dapat menampilkan daftar tag untuk artefak di Artifact Registry Diperlukan untuk mengelola tag untuk artefak di Artifact Registry.
artifactregistry.repositories.listTagBindings Dapat mencantumkan informasi binding tag untuk artefak di Artifact Registry
artifactregistry.tags.create Dapat membuat tag di Artifact Registry
artifactregistry.tags.get Bisa mendapatkan tag dari Artifact Registry
artifactregistry.tags.list Dapat menampilkan daftar tag di Artifact Registry
artifactregistry.tags.update Dapat memperbarui tag di Artifact Registry
artifactregistry.versions.list Dapat mencantumkan versi di Artifact Registry
artifactregistry.versions.get Bisa mendapatkan versi di Artifact Registry
containeranalysis.occurrences.create Dapat membuat kemunculan Analisis Artefak Akun layanan Cloud Build tidak menggunakan izin ini, tetapi disertakan untuk kompatibilitas mundur.
containeranalysis.occurrences.delete Dapat menghapus kemunculan Analisis Artefak
containeranalysis.occurrences.get Bisa mendapatkan kemunculan Analisis Artefak
containeranalysis.occurrences.list Dapat mencantumkan kemunculan Analisis Artefak
containeranalysis.occurrences.update Dapat memperbarui kemunculan Analisis Artefak

Pemicu build

Secara default, pemicu build menggunakan akun layanan Cloud Build untuk menjalankan build. Atau, Anda dapat mengonfigurasi pemicu build untuk menjalankan build dengan akun layanan pilihan Anda. Anda dapat mengonfigurasi setiap pemicu dengan akun layanan yang berbeda.

Perhatikan pertimbangan berikut saat memilih akun layanan yang akan ditentukan untuk pemicu build:

  • Akun layanan Cloud Build default: Setiap pengguna dengan peran Cloud Build Editor dapat membuat dan menjalankan pemicu secara langsung. Misalnya, pengguna dapat menjalankan pemicu secara manual. Setiap pengguna juga dapat menjalankan pemicu secara tidak langsung. Misalnya, pengguna dapat secara tidak langsung memanggil pemicu saat mereka mengirim kode sumber baru ke repositori yang terhubung. Semua pengguna dengan peran Cloud Build Editor dapat memperbarui pemicu selama akun layanan sebelumnya dan akun layanan baru yang ditentukan pada pemicu merupakan akun Cloud Build default.

  • Akun layanan yang ditentukan pengguna: Semua pengguna dengan peran Cloud Build Editor yang memiliki izin iam.serviceAccounts.actAs dapat membuat dan langsung menjalankan pemicu. Misalnya, pengguna dapat menjalankan pemicu secara manual. Setiap pengguna juga dapat menjalankan pemicu secara tidak langsung. Misalnya, pengguna dapat secara tidak langsung memanggil pemicu saat mereka mendorong sumber baru ke repositori yang terhubung. Semua pengguna dengan peran Cloud Build Editor dapat memperbarui pemicu selama mereka memiliki izin iam.serviceAccounts.actAs di akun layanan yang dikonfigurasi sebelumnya dan akun layanan baru yang ditentukan pada pemicu. Untuk memberikan izin ini kepada pengguna, Anda dapat memberi mereka peran yang telah ditentukan dengan izin, seperti peran Service Account User (roles/iam.serviceAccountUser). Atau, Anda dapat membuat peran IAM kustom dengan izin iam.serviceAccounts.actAs, lalu memberikan peran tersebut kepada pengguna. Untuk mempelajari izin akun layanan lebih lanjut, lihat Peran untuk autentikasi akun layanan.

Selain itu, akun layanan Cloud Build default dan akun layanan yang ditentukan pengguna dapat memberikan izin waktu build yang lebih tinggi kepada pengguna yang menggunakan pemicu untuk memanggil build. Perhatikan implikasi keamanan berikut saat menggunakan pemicu build yang terkait dengan akun layanan Cloud Build default:

  • Pengguna yang tidak memiliki akses ke project Google Cloud Anda, tetapi memiliki akses tulis ke repositori yang terkait dengan pemicu build dalam project tersebut akan memiliki izin untuk mengubah kode yang sedang di-build.
  • Jika Anda menggunakan pemicu permintaan pull GitHub, setiap pengguna yang memiliki akses baca ke repositori dapat mengirimkan permintaan pull, yang dapat memicu build yang menyertakan perubahan pada kode dalam permintaan pull. Anda dapat menonaktifkan perilaku ini dengan memilih opsi Kontrol komentar saat membuat pemicu permintaan pull GitHub. Memilih opsi ini akan memastikan bahwa build hanya dimulai jika pemilik repositori atau kolaborator mengomentari /gcbrun. Untuk mengetahui informasi tentang cara menggunakan Kontrol komentar dengan pemicu GitHub, baca bagian Membuat pemicu GitHub.

Batasan

Jika perlu melakukan autentikasi antar-layanan menggunakan token ID, Anda harus menjalankan build dengan akun layanan yang ditentukan pengguna. Akun layanan Cloud Build default tidak dapat digunakan untuk membuat token ID.

Misalnya, jika Anda menggunakan aplikasi platform serverless, seperti Cloud Functions, Cloud Run, atau App Engine, dan ingin memanggil aplikasi dari Cloud Build, Anda memerlukan akun layanan yang ditentukan pengguna, yang dikonfigurasi dengan izin yang diperlukan untuk autentikasi antarlayanan.

Untuk mengetahui petunjuknya, lihat Mengizinkan akses layanan-ke-layanan.

Langkah selanjutnya