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:
|
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:
|
source.repos.list |
Dapat mencantumkan repositori di Cloud Source Repositories | |
storage.buckets.create |
Dapat membuat bucket Cloud Storage | Diperlukan untuk:
|
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 iziniam.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 iziniam.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
- Pelajari akun layanan yang ditetapkan pengguna.
- Pelajari cara mengonfigurasi akses untuk akun layanan Cloud Build.
- Pelajari cara mengonfigurasi akses ke resource Cloud Build.
- Pelajari izin yang diperlukan untuk melihat log build.