Identity and Access Management (IAM) menawarkan beberapa jenis kebijakan untuk membantu Anda mengontrol resource yang dapat diakses oleh pokok. Panduan ini menjelaskan cara menggunakan kebijakan akses untuk mengontrol akses saat memublikasikan pesan peristiwa ke bus Eventarc Advanced.
Kebijakan akses IAM dapat mengizinkan dan menolak akses ke resource. Namun, tidak seperti kebijakan izinkan dan tolak IAM, kebijakan akses dapat memberikan atau menolak akses berdasarkan atribut konteks peristiwa tertentu, seperti prioritas pesan peristiwa.
Setiap kebijakan akses adalah serangkaian aturan yang memungkinkan Anda mengidentifikasi akun utama dan menentukan kondisi yang menentukan penerapan suatu aturan, serta memungkinkan Anda mengaktifkan kontrol akses terperinci. Misalnya, bergantung pada evaluasi ekspresi Common Expression Language (CEL) yang diterapkan ke atribut konteks peristiwa, Anda dapat mengizinkan atau menolak izin untuk memublikasikan subset pesan peristiwa ke bus Lanjutan Eventarc.
Panduan ini menjelaskan cara membuat dan menerapkan kebijakan akses dengan terlebih dahulu membuat kebijakan akses, lalu membuat pengikatan kebijakan untuk menghubungkan kebijakan tersebut ke project Google Cloud .
Sebelum memulai
Sebelum membuat dan menerapkan kebijakan akses, Anda seharusnya sudah membuat bus Lanjutan Eventarc yang dapat digunakan untuk memublikasikan pesan peristiwa.
Pastikan Anda mempertimbangkan hal berikut:
Kebijakan akses harus diterapkan atau terikat ke Google Cloud project. Setiap kebijakan akses dapat dilampirkan ke maksimal 5 project; setiap project dapat memiliki maksimal 5 kebijakan akses yang dilampirkan. Anda dapat membuat satu bus per Google Cloud project per region yang didukung. Kebijakan akses yang dilampirkan ke project mengontrol akses publikasi ke bus Eventarc Advanced mana pun dalam project tersebut.
Anda dapat menggunakan kebijakan akses untuk mengontrol akses publikasi ke bus Lanjutan Eventarc, tetapi tidak untuk mengontrol akses ke langganan pesan dari bus tertentu. Izin yang didukung adalah
eventarc.messageBuses.publish.Kontrol akses hanya dapat didasarkan pada atribut konteks peristiwa dan bukan pada konten payload peristiwa.
Pesan acara yang dipublikasikan dari sumber Google dan yang ditolak akan dihentikan. Jika prinsipal memublikasikan secara langsung pesan peristiwa, pesan log
Event published successfullyakan menunjukkan hal ini. Namun, jika pesan peristiwa ditolak oleh kondisi dalam kebijakan akses, error yang mirip dengan berikut akan terjadi:ERROR: (gcloud.beta.eventarc.message-buses.publish) PERMISSION_DENIED: Permission 'eventarc.googleapis.com/messageBuses.publish' denied on resource due to an IAM Access Policy. This command is authenticated as user@example.com which is the active account specified by the [core/account] property. '@type': type.googleapis.com/google.rpc.ErrorInfo domain: iam.googleapis.com metadata: permission: eventarc.googleapis.com/messageBuses.publish reason: IAM_PERMISSION_DENIED
Jika belum, aktifkan Eventarc dan IAM API:
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ iam.googleapis.com
Menyiapkan autentikasi:
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
REST API
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:
gcloud initIf you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud .
Peran yang diperlukan
Peran IAM berisi serangkaian izin yang memungkinkan Anda melakukan tindakan tertentu pada resource Google Cloud .
Untuk mendapatkan izin yang Anda perlukan guna mengontrol akses publikasi, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Membuat kebijakan akses:
Admin Kebijakan Akses (
roles/iam.accessPolicyAdmin) -
Menerapkan kebijakan akses:
Admin IAM Project (
roles/resourcemanager.projectIamAdmin)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin yang diperlukan untuk mengontrol akses publikasi. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk mengontrol akses publikasi:
-
Buat kebijakan akses:
iam.accessPolicies.create -
Terapkan kebijakan akses:
-
iam.accessPolicies.bind -
resourcemanager.projects.createPolicyBinding
-
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Membuat kebijakan akses
Buat kebijakan akses untuk mengontrol akses saat memublikasikan ke bus Advanced Eventarc di project Anda.
Anda dapat membuat kebijakan akses menggunakan Google Cloud CLI atau dengan membuat permintaan langsung ke IAM v3 API.
gcloud
Anda dapat membuat kebijakan akses dengan menjalankan perintah gcloud beta iam access-policies create.
gcloud beta iam access-policies create POLICY_ID \ --project=POLICY_PROJECT_ID \ --location=global \ --details-rules=description="POLICY_DESCRIPTION",effect=EFFECT, \ principals=[PRINCIPALS],excludedPrincipals=[EXCLUDED_PRINCIPALS], \ permissions=[eventarc.googleapis.com/messageBuses.publish], \ activationConditions={eventarc.googleapis.com={celCondition={expression="CEL_EXPRESSION"}}}
Ganti kode berikut:
POLICY_ID: nama unik untuk kebijakan akses—misalnya,my-access-policy.POLICY_PROJECT_ID: Google Cloud project ID dari project tempat kebijakan akan dibuat.POLICY_DESCRIPTION: deskripsi opsional untuk kebijakan (maksimum 256 karakter).EFFECT: efek aturan (ALLOWatauDENY).PRINCIPALS: identitas yang menjadi cakupan penerapan aturan ini. Format ID bergantung pada jenis prinsipal yang ingin Anda rujuk. Untuk mengetahui informasi selengkapnya, lihat Jenis akun utama untuk kebijakan akses.EXCLUDED_PRINCIPALS: identitas yang dikecualikan dari penerapan aturan, meskipun tercantum dalamprincipals. Misalnya, Anda dapat menambahkan grup Google keprincipals, lalu mengecualikan pengguna tertentu yang termasuk dalam grup tersebut.CEL_EXPRESSION: ekspresi CEL yang akan dievaluasi untuk menentukan penerapan aturan—misalnya,message.version != \"v1\". Untuk mengetahui informasi selengkapnya, lihat Menggunakan Common Expression Language.
Perhatikan hal berikut:
- Flag
--locationmenentukan lokasi kebijakan akses dan harus berupaglobal. Flag
--details-rulesdapat menentukan jalur ke file kebijakan akses yang dapat ditulis dalam JSON atau YAML—misalnya,--details-rules=path_to_file.json.Flag juga dapat diulang saat mengonfigurasi beberapa aturan. Setiap aturan dievaluasi secara terpisah.
Kebijakan akses menggunakan format berikut:
{ "displayName": "POLICY_DISPLAY_NAME", "details": { "rules": [ { "description": "POLICY_DESCRIPTION", "effect": "EFFECT", "principals": [ "PRINCIPALS" ], "excludedPrincipals": [ "EXCLUDED_PRINCIPALS" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ], "activationConditions": { "eventarc.googleapis.com": { "celCondition": { "expression": "CEL_EXPRESSION" } } } } ] } }
Respons berisi operasi yang berjalan lama yang merepresentasikan permintaan Anda. Untuk mempelajari cara mendapatkan status operasi yang berjalan lama, lihat Memeriksa status operasi yang berjalan lama dalam dokumen ini.
Contoh
Perintah berikut membuat kebijakan akses yang mengizinkan prinsipal yang ditentukan untuk memublikasikan pesan peristiwa ke bus, tetapi menolak publikasi jika jenis media data adalah JSON.
gcloud beta iam access-policies create my-access-policy \ --project=my-project-id \ --location=global \ --details-rules=description="Allow publishing to bus",effect=ALLOW,principals=[principal://goog/subject/user@example.com],permissions=[eventarc.googleapis.com/messageBuses.publish] \ --details-rules=description="Deny publishing to bus if media type is JSON",effect=DENY,principals=[principal://goog/subject/user@example.com],permissions=[eventarc.googleapis.com/messageBuses.publish],activationConditions={eventarc.googleapis.com={celCondition={expression="message.datacontenttype=='application/json'"}}}
REST API
Anda dapat membuat kebijakan akses menggunakan
projects.locations.accessPolicies.create method.Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
POLICY_DISPLAY_NAME: optional. Nama yang dapat dibaca manusia untuk kebijakan akses—misalnya, "Contoh kebijakan". Nama tampilan dapat memiliki panjang maksimal 63 karakter.POLICY_DESCRIPTION: optional. Deskripsi kebijakan akses yang dapat dibaca manusia—misalnya, "Contoh deskripsi". Deskripsi dapat berisi maksimal 256 karakter.EFFECT: efek aturan, baikALLOWmaupunDENY.PRINCIPALS: identitas yang menerapkan aturan ini. Format ID bergantung pada jenis prinsipal yang ingin Anda rujuk. Untuk mengetahui informasi selengkapnya, lihat Jenis akun utama untuk kebijakan akses.EXCLUDED_PRINCIPALS: identitas yang dikecualikan dari penerapan aturan, meskipun tercantum dalamprincipals. Misalnya, Anda dapat menambahkan grup Google keprincipals, lalu mengecualikan pengguna tertentu yang termasuk dalam grup tersebut.CEL_EXPRESSION: ekspresi CEL yang akan dievaluasi untuk menentukan penerapan aturan. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Common Expression Language.POLICY_PROJECT_ID: the Google Cloud project ID of the project where the policy will be created.POLICY_ID: nama unik untuk kebijakan akses—misalnya,my-access-policy.
Beberapa aturan dapat dicantumkan. Setiap aturan dievaluasi secara terpisah. Jika suatu aturan tidak berlaku, aturan lain mungkin berlaku.
Meminta isi JSON:
{ "displayName": "POLICY_DISPLAY_NAME", "details": { "rules": [ { "description": "POLICY_DESCRIPTION", "effect": "EFFECT", "principals": [ "PRINCIPALS" ], "excludedPrincipals": [ "EXCLUDED_PRINCIPALS" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ], "activationConditions": { "eventarc.googleapis.com": { "celCondition": { "expression": "CEL_EXPRESSION" } } } } ] } }Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Respons berisi operasi yang berjalan lama yang merepresentasikan permintaan Anda. Untuk mempelajari cara mendapatkan status operasi yang berjalan lama, lihat Periksa status operasi yang berjalan lama di halaman ini dalam dokumen ini.
{ "name": "projects/POLICY_PROJECT_ID/locations/global/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.iam.v3.OperationMetadata", "createTime": "2025-01-25T17:17:45.782370139Z", "target": "projects/POLICY_PROJECT_ID/locations/global/accessPolicies/POLICY_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v3" }, "done": false }Contoh
Kebijakan akses berikut memungkinkan akun utama yang ditentukan untuk memublikasikan pesan peristiwa ke bus, tetapi menolak publikasi jika prioritas pesan adalah
HIGH.cat > request.json << 'EOF' { "displayName": "Eventarc Advanced access policy", "details": { "rules": [ { "description": "Allow publishing to bus", "effect": "ALLOW", "principals": [ "principal://goog/subject/user@example.com" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ] }, { "description": "Deny publishing to bus if message priority is HIGH", "effect": "DENY", "principals": [ "principal://goog/subject/user@example.com" ], "permissions": [ "eventarc.googleapis.com/messageBuses.publish" ], "activationConditions": { "eventarc.googleapis.com": { "celCondition": { "expression": "message.priority == \"HIGH\"" } } } } ] } } EOF curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://iam.googleapis.com/v3/projects/POLICY_PROJECT_ID/locations/global/accessPolicies?access_policy_id=POLICY_ID"
Menerapkan kebijakan akses
Buat binding kebijakan untuk menerapkan kebijakan akses Anda ke project Google Cloud . Setiap binding kebijakan mengikat satu kebijakan akses ke satu resource.
Anda dapat menerapkan kebijakan akses menggunakan Google Cloud CLI atau dengan membuat permintaan langsung ke IAM v3 API.
gcloud
Anda dapat membuat binding kebijakan dan menerapkan kebijakan akses dengan menjalankan perintah gcloud beta iam policy-bindings create.
gcloud beta iam policy-bindings create BINDING_ID \ --project=BINDING_PROJECT_ID \ --location=global \ --policy=projects/POLICY_PROJECT_ID/locations/global/accessPolicies/POLICY_ID \ --target-resource=//cloudresourcemanager.googleapis.com/projects/BINDING_PROJECT_ID
Ganti kode berikut:
BINDING_ID: nama unik untuk binding kebijakan—misalnya,my-access-policy-binding.BINDING_PROJECT_ID: Google Cloud project ID project tempat binding akan dibuat. ID ini harus sama dengan ID project tempat bus Eventarc Advanced dibuat, dan menunjukkan target binding.
Flag
--locationmenentukan lokasi binding kebijakan dan harus berupaglobal.Respons berisi operasi yang berjalan lama yang merepresentasikan permintaan Anda. Untuk mempelajari cara mendapatkan status operasi yang berjalan lama, lihat Memeriksa status operasi yang berjalan lama dalam dokumen ini.
Contoh
Perintah berikut membuat binding kebijakan yang menerapkan kebijakan akses yang ditentukan ke project Google Cloud :
gcloud beta iam policy-bindings create my-access-policy-binding \ --project=my-project-id \ --location=global \ --policy=projects/my-project-id/locations/global/accessPolicies/my-access-policy \ --target-resource=//cloudresourcemanager.googleapis.com/projects/my-project-id
REST API
Anda dapat membuat binding kebijakan dan menerapkan kebijakan akses menggunakan
projects.locations.policyBindings.create method.Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
BINDING_DISPLAY_NAME: opsional. Nama yang dapat dibaca manusia untuk pengikatan kebijakan—misalnya, "Contoh pengikatan". Nama tampilan dapat memiliki panjang maksimal 63 karakter.BINDING_PROJECT_ID: the Google Cloud project ID of the project where the binding will be created. Ini harus sama dengan ID project tempat bus Eventarc Advanced dibuat, dan menunjukkan target binding.POLICY_PROJECT_ID: the Google Cloud project ID of the project where the policy is created.POLICY_ID: nama kebijakan akses yang akan diikat—misalnya,my-access-policy.
Meminta isi JSON:
{ "display_name": "BINDING_DISPLAY_NAME", "target": {"resource": "//cloudresourcemanager.googleapis.com/projects/BINDING_PROJECT_ID"}, "policy_kind": "ACCESS", "policy": "projects/POLICY_PROJECT_ID/locations/global/accessPolicies/POLICY_ID" }Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Respons berisi operasi yang berjalan lama yang merepresentasikan permintaan Anda. Untuk mempelajari cara mendapatkan status operasi yang berjalan lama, lihat Periksa status operasi yang berjalan lama di halaman ini dalam dokumen ini.
{ "name": "projects/BINDING_PROJECT_ID/locations/global/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.iam.v3.OperationMetadata", "createTime": "2025-01-25T17:17:45.782370139Z", "target": "projects/BINDING_PROJECT_ID/locations/global/policyBindings/POLICY_ID-binding", "verb": "create", "requestedCancellation": false, "apiVersion": "v3" }, "done": false }Memeriksa status operasi yang berjalan lama
Saat Anda menggunakan IAM REST API, metode apa pun yang mengubah kebijakan atau binding akses akan menampilkan operasi yang berjalan lama (LRO). Operasi yang berjalan lama akan melacak status permintaan dan menunjukkan apakah perubahan pada kebijakan atau pengikatan sudah selesai.
Metode
operations.getmenampilkan status operasi yang berjalan lama.Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
OPERATION_NAME: nama lengkap operasi. Anda menerima nama ini sebagai respons atas permintaan asli Anda.Nama operasi memiliki format berikut:
projects/PROJECT_ID/locations/global/operations/OPERATION_ID
PROJECT_ID: Google Cloud project ID project tempat operasi ditampilkan.
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "name": "projects/PROJECT_ID/locations/global/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.iam.v3.OperationMetadata", "createTime": "2025-01-28T00:05:12.006289686Z", "endTime": "2025-01-28T00:05:12.192141801Z", "target": "projects/PROJECT_ID/locations/global/accessPolicies/POLICY_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v3" }, "done": true, "response": { ACCESS_POLICY } }Jika kolom
doneoperasi tidak ada, terus pantau statusnya dengan mendapatkan operasi tersebut berulang kali. Gunakan backoff eksponensial terpotong untuk menambahkan penundaan di antara setiap permintaan. Saat kolomdoneditetapkan ketrue, operasi selesai, dan Anda dapat berhenti mendapatkan operasi tersebut.Langkah berikutnya
Kecuali dinyatakan lain, konten di halaman ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 4.0, sedangkan contoh kode dilisensikan berdasarkan Lisensi Apache 2.0. Untuk mengetahui informasi selengkapnya, lihat Kebijakan Situs Google Developers. Java adalah merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-12-04 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Sulit dipahami","hardToUnderstand","thumb-down"],["Informasi atau kode contoh salah","incorrectInformationOrSampleCode","thumb-down"],["Informasi/contoh yang saya butuhkan tidak ada","missingTheInformationSamplesINeed","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-12-04 UTC."],[],[]]-
Membuat kebijakan akses:
Admin Kebijakan Akses (