Anda dapat menggunakan kebijakan penolakan Identity and Access Management (IAM) bersama dengan tag untuk memblokir operasi tertentu pada link repositori Git dalam koneksi Developer Connect.
Anda melampirkan tag ke koneksi, lalu membuat kebijakan penolakan yang kondisinya cocok dengan tag tersebut. Setiap link repositori Git dalam koneksi mewarisi tag, sehingga kebijakan penolakan berlaku untuk semua repositori yang ditautkan melalui koneksi tersebut.
Kapan harus menggunakan tag dan kebijakan penolakan
Kebijakan izin IAM memberikan izin. Kebijakan penolakan memungkinkan Anda menetapkan guardrail yang lebih diprioritaskan daripada kebijakan izin, terlepas dari peran yang dimiliki akun utama. Menggabungkan kebijakan penolakan dengan tag memungkinkan Anda menerapkan batasan tersebut ke koneksi yang dipilih, bukan ke setiap koneksi dalam project.
Misalnya, Anda dapat menggunakan pendekatan ini untuk melakukan hal berikut:
- Izinkan agen AI atau akun layanan otomatisasi membaca commit dan permintaan pull melalui Developer Connect, tetapi cegah agen atau akun layanan tersebut membuka, mengubah, atau mengomentari permintaan pull di repositori produksi.
- Memblokir semua operasi repositori untuk grup akun utama pada koneksi yang tertaut ke repositori sensitif, sekaligus mempertahankan aksesnya ke koneksi lain dalam project yang sama.
- Terapkan serangkaian batasan yang konsisten di banyak project dengan membuat tag dan kebijakan penolakan di level organisasi.
Cara tag diterapkan ke link repositori Git
Di Developer Connect, Anda dapat melampirkan tag ke koneksi, tetapi tidak langsung ke link repositori Git.
Link repositori Git adalah resource turunan dari koneksinya. Saat IAM mengevaluasi kebijakan penolakan untuk operasi pada link repositori Git, kondisi tersebut dievaluasi terhadap tag efektif link. Tag yang efektif mencakup tag yang dilampirkan ke koneksi induk, dan tag yang diwarisi dari project, folder, dan organisasi koneksi.
Karena link repositori Git mewarisi tag dari koneksinya, kontrol dalam dokumen ini berlaku per koneksi. Jika Anda memerlukan kontrol yang berbeda untuk repositori yang berbeda, tautkan repositori tersebut melalui koneksi yang berbeda, lalu beri tag pada setiap koneksi secara terpisah.
Sebelum memulai
- Pastikan Anda memiliki koneksi Developer Connect dengan setidaknya satu repositori Git yang ditautkan.
- Pastikan Anda mengetahui ID organisasi dan nomor project dari project yang berisi koneksi.
- Untuk menggunakan contoh command line dalam dokumen ini, instal dan konfigurasi Google Cloud CLI.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk membuat tag, melampirkan tag ke koneksi, dan membuat kebijakan penolakan, minta administrator untuk memberi Anda peran IAM berikut pada organisasi:
-
Untuk membuat dan mengelola kunci tag dan nilai tag:
Tag Administrator (
roles/resourcemanager.tagAdmin) -
Untuk melampirkan nilai tag ke koneksi:
Tag User (
roles/resourcemanager.tagUser) pada nilai tag, dan Developer Connect Admin (roles/developerconnect.admin) pada koneksi -
Untuk membuat, memperbarui, dan menghapus kebijakan penolakan:
Deny Admin (
roles/iam.denyAdmin)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Izin yang dapat Anda tolak
Anda dapat menolak izin berikut pada link repositori Git. Dalam kebijakan penolakan, gunakan format developerconnect.googleapis.com/gitRepositoryLinks.PERMISSION.
Membaca data repositori
| Izin | Memungkinkan akun utama |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.fetchCommit |
Dapatkan commit. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchCommitList |
Membuat daftar commit. |
developerconnect.googleapis.com/gitRepositoryLinks.diffCommit |
Mendapatkan perbedaan antara commit. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchFileBlame |
Mendapatkan informasi blame untuk file. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchPullRequest |
Mendapatkan permintaan pull. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchPullRequestList |
Mencantumkan permintaan pull. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchGitRefs |
Mencantumkan cabang dan tag. |
Mengubah data repositori
| Izin | Memungkinkan akun utama |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest |
Buka permintaan pull. |
developerconnect.googleapis.com/gitRepositoryLinks.modifyPullRequest |
Mengubah permintaan pull, misalnya, judul, deskripsi, atau statusnya. |
developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestComment |
Menambahkan komentar ke permintaan pull. |
developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestReviewComment |
Menambahkan komentar ulasan ke permintaan pull. |
Token akses dan proxy Git
| Izin | Memungkinkan akun utama |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.fetchReadToken |
Dapatkan token akses hanya baca untuk repositori. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchReadWriteToken |
Dapatkan token akses baca-tulis untuk repositori. |
developerconnect.googleapis.com/gitRepositoryLinks.gitProxyRead |
Membaca dari repositori melalui proxy Developer Connect. |
developerconnect.googleapis.com/gitRepositoryLinks.gitProxyWrite |
Menulis ke repositori melalui proxy Developer Connect. |
Untuk mengetahui daftar lengkap izin yang didukung kebijakan penolakan, lihat Izin yang didukung dalam kebijakan penolakan.
Membuat tag dan melampirkannya ke koneksi
Dalam contoh ini, Anda membuat kunci tag bernama scm-agent-access dengan nilai tag bernama read-only, lalu melampirkan nilai tag ke koneksi.
Buat kunci tag. Perintah berikut membuat kunci tag di organisasi Anda, sehingga Anda dapat menggunakannya pada koneksi di project mana pun:
gcloud resource-manager tags keys create scm-agent-access \ --parent=organizations/ORGANIZATION_ID \ --description="Controls agent access to Developer Connect repositories"
Ganti ORGANIZATION_ID dengan ID organisasi Anda.
Anda juga dapat membuat kunci tag dalam project dengan menetapkan
--parentkeprojects/PROJECT_ID. Kunci tag level project hanya dapat dilampirkan ke resource dalam project tersebut.Buat nilai tag:
gcloud resource-manager tags values create read-only \ --parent=ORGANIZATION_ID/scm-agent-access
Lampirkan nilai tag ke koneksi:
gcloud resource-manager tags bindings create \ --tag-value=ORGANIZATION_ID/scm-agent-access/read-only \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
Ganti kode berikut:
- PROJECT_NUMBER: nomor project dari project yang berisi koneksi.
- LOCATION: region koneksi, misalnya,
us-central1. - CONNECTION_ID: ID koneksi.
Pastikan tag dilampirkan ke koneksi:
gcloud resource-manager tags bindings list \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
Untuk mengetahui informasi selengkapnya tentang cara membuat dan melampirkan tag, lihat Membuat dan mengelola tag.
Membuat kebijakan penolakan
Kebijakan penolakan berikut mencegah akun layanan membuka, mengubah,
atau mengomentari permintaan pull, dan mendapatkan token baca-tulis atau menulis
melalui proxy Developer Connect, di link repositori Git mana pun yang
koneksinya memiliki tag scm-agent-access yang ditetapkan ke read-only. Akun layanan masih dapat membaca commit dan permintaan pull, jika kebijakan izin memberinya izin tersebut.
Buat file bernama
policy.jsondengan konten berikut:{ "displayName": "Read-only Developer Connect access for agents", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://iam.googleapis.com/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL" ], "deniedPermissions": [ "developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest", "developerconnect.googleapis.com/gitRepositoryLinks.modifyPullRequest", "developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestComment", "developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestReviewComment", "developerconnect.googleapis.com/gitRepositoryLinks.fetchReadWriteToken", "developerconnect.googleapis.com/gitRepositoryLinks.gitProxyWrite" ], "denialCondition": { "title": "Connection is tagged scm-agent-access=read-only", "expression": "resource.matchTag('ORGANIZATION_ID/scm-agent-access', 'read-only')" } } } ] }
Ganti SERVICE_ACCOUNT_EMAIL dengan alamat email akun layanan yang ingin Anda batasi. Untuk membatasi jenis akun utama lainnya, seperti pengguna atau grup, lihat ID akun utama.
Buat kebijakan penolakan dan lampirkan ke organisasi Anda:
gcloud iam policies create scm-agent-read-only \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID \ --kind=denypolicies \ --policy-file=policy.json
Anda juga dapat melampirkan kebijakan penolakan ke folder atau project. Kebijakan penolakan berlaku untuk semua resource di bawah titik lampirannya.
Untuk mengetahui informasi selengkapnya tentang cara membuat kebijakan penolakan, lihat Menolak akses ke resource.
Memverifikasi kebijakan penolakan
Perubahan pada tag dan kebijakan penolakan memiliki konsistensi tertunda. Diperlukan waktu beberapa menit hingga binding tag atau kebijakan penolakan baru diterapkan. Untuk mengetahui informasi selengkapnya, lihat Dampak perubahan tag dan Penerapan perubahan akses.
Setelah perubahan diterapkan, permintaan dari akun utama yang ditolak untuk izin yang ditolak pada link repositori Git di koneksi yang diberi tag akan gagal dengan error HTTP 403 PERMISSION_DENIED. Pesan error menyebutkan izin dan link repositori Git, serta menyatakan bahwa akses ditolak oleh kebijakan penolakan IAM. Contoh:
Permission 'developerconnect.gitRepositoryLinks.openPullRequest' denied on resource '//developerconnect.googleapis.com/projects/my-project/locations/us-central1/connections/my-connection/gitRepositoryLinks/my-repo' due to an IAM deny policy.
Permintaan izin yang tidak ditolak oleh kebijakan, dan permintaan link repositori Git dalam koneksi yang tidak memiliki tag, tidak akan terpengaruh oleh kebijakan penolakan.
Untuk memeriksa apakah kebijakan penolakan berlaku untuk akun utama dan link repositori Git, gunakan Pemecah Masalah Kebijakan:
gcloud policy-intelligence troubleshoot-policy iam \ //developerconnect.googleapis.com/projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID/gitRepositoryLinks/GIT_REPOSITORY_LINK_ID \ --principal-email=SERVICE_ACCOUNT_EMAIL \ --permission=developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest
Menghapus pembatasan
Untuk menghapus batasan dari satu koneksi, hapus binding tag dari koneksi:
gcloud resource-manager tags bindings delete \ --tag-value=ORGANIZATION_ID/scm-agent-access/read-only \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
Untuk menghapus batasan dari semua koneksi, hapus kebijakan penolakan:
gcloud iam policies delete scm-agent-read-only \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID \ --kind=denypolicies
Batasan
- Tag dilampirkan per koneksi. Anda dapat melampirkan tag ke koneksi, tetapi tidak ke link repositori Git. Semua link repositori Git dalam koneksi berbagi tag koneksi.
- Kondisi penolakan hanya mendukung tag. Kondisi dalam aturan penolakan hanya dapat
menggunakan fungsi tag, seperti
resource.matchTag()danresource.hasTagKey(). Anda tidak dapat menulis kondisi penolakan berdasarkan nama repositori atau atribut resource lainnya. Untuk mengetahui detailnya, lihat Ketentuan penolakan. - Kunci tag harus memiliki namespace. Di
resource.matchTag(), identifikasi kunci tag berdasarkan nama dengan namespace, sepertiORGANIZATION_ID/scm-agent-accessatauPROJECT_ID/scm-agent-access, bukan berdasarkan nama pendeknya. - Perubahan memerlukan waktu untuk diterapkan. Binding tag baru, nilai tag yang diubah, dan kebijakan penolakan tidak langsung berlaku, dan menghapus tag tidak langsung memulihkan akses. Tunggu beberapa menit untuk setiap perubahan, dan uji konfigurasi Anda sebelum mengandalkannya.
- Tag yang berlaku tercantum di koneksi. Untuk melihat tag yang berlaku untuk link repositori Git, cantumkan tag yang efektif dari koneksi induknya.
Langkah berikutnya
- Pelajari lebih lanjut kebijakan penolakan.
- Pelajari lebih lanjut tag dan akses bersyarat.
- Pelajari peran dan izin Developer Connect.