Identity and Access Management (IAM) offre diversi tipi di policy per aiutarti a controllare a quali risorse i principal possono accedere. Questa guida descrive come utilizzare le policy di accesso per controllare l'accesso durante la pubblicazione di messaggi di eventi in un bus Eventarc Advanced.
I criteri di accesso IAM possono consentire e negare l'accesso alle risorse. Tuttavia, a differenza delle policy di autorizzazione e negazione IAM, le policy di accesso possono concedere o negare l'accesso in base ad attributi di contesto di eventi specifici, ad esempio la priorità del messaggio di evento.
Ogni policy di accesso è un insieme di regole che ti consente di identificare le entità e definire le condizioni che determinano l'applicabilità di una regola e che ti consente di attivarcontrollo dell'accessolo dell'accesso granulare. Ad esempio, a seconda della valutazione di un'espressione Common Expression Language (CEL) applicata a un attributo del contesto di un evento, puoi consentire o negare l'autorizzazione a pubblicare un sottoinsieme di messaggi di eventi in un bus avanzato Eventarc.
Questa guida spiega come creare e applicare una policy di accesso creando prima una policy di accesso e poi un'associazione di policy per collegare la policy a un progetto Google Cloud .
Prima di iniziare
Prima di creare e applicare una policy di accesso, devi aver già creato un bus Eventarc Advanced a cui possono essere pubblicati i messaggi di eventi.
Assicurati di prendere in considerazione quanto segue:
Le policy di accesso devono essere applicate o associate a un progetto Google Cloud . Ogni policy di accesso può essere collegata a un massimo di 5 progetti; ogni progetto può avere fino a 5 policy di accesso collegate. Puoi creare un bus per progetto per regione supportata.Google Cloud Una policy di accesso collegata a un progetto controlla l'accesso alla pubblicazione a qualsiasi bus Eventarc Advanced in quel progetto.
Puoi utilizzare i criteri di accesso per controllare l'accesso alla pubblicazione a un bus avanzato Eventarc, ma non per controllare l'accesso alla sottoscrizione dei messaggi da un bus specifico. L'autorizzazione supportata è
eventarc.messageBuses.publish.Il controllo dell'accesso può basarsi solo sugli attributi del contesto dell'evento e non sul contenuto del payload dell'evento.
I messaggi di eventi pubblicati da origini Google e rifiutati vengono eliminati. Se il principale pubblica direttamente un messaggio di evento, viene indicato da un messaggio di log
Event published successfully. Tuttavia, se il messaggio di evento viene negato dalla condizione nella norma di accesso, si verifica un errore simile al seguente: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
Se non l'hai ancora fatto, abilita le API Eventarc e IAM:
gcloud services enable eventarc.googleapis.com \ eventarcpublishing.googleapis.com \ iam.googleapis.com
Configura l'autenticazione:
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.
API REST
Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali che fornisci a 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.
Per saperne di più, consulta Autenticati per usare REST nella documentazione sull'autenticazione di Google Cloud .
Ruoli obbligatori
Un ruolo IAM contiene un insieme di autorizzazioni che ti consentono di eseguire azioni specifiche sulle risorse Google Cloud .
Per ottenere le autorizzazioni necessarie per controllare l'accesso alla pubblicazione, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Crea criteri di accesso:
Access Policy Admin (
roles/iam.accessPolicyAdmin) -
Applica criteri di accesso:
Project IAM Admin (
roles/resourcemanager.projectIamAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per controllare l'accesso alla pubblicazione. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per controllare l'accesso alla pubblicazione sono necessarie le seguenti autorizzazioni:
-
Crea policy di accesso:
iam.accessPolicies.create -
Applica criteri di accesso:
-
iam.accessPolicies.bind -
resourcemanager.projects.createPolicyBinding
-
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Crea una policy di accesso
Crea una policy di accesso per controllare l'accesso durante la pubblicazione in un bus Eventarc Advanced nel tuo progetto.
Puoi creare una policy di accesso utilizzando Google Cloud CLI o effettuando una richiesta diretta all'API IAM v3.
gcloud
Puoi creare una policy di accesso eseguendo il comando 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"}}}
Sostituisci quanto segue:
POLICY_ID: un nome univoco per la policy di accesso, ad esempiomy-access-policy.POLICY_PROJECT_ID: l'ID progetto Google Cloud del progetto in cui verrà creata la policy.POLICY_DESCRIPTION: una descrizione facoltativa del criterio (256 caratteri al massimo).EFFECT: l'effetto della regola (ALLOWoDENY).PRINCIPALS: le identità a cui si applica questa regola. Il formato dell'identificatore dipende dal tipo di entità a cui vuoi fare riferimento. Per saperne di più, consulta Tipi di principal per le policy di accesso.EXCLUDED_PRINCIPALS: le identità escluse dall'applicazione della regola, anche se elencate inprincipals. Ad esempio, puoi aggiungere un gruppo Google aprincipalsed escludere utenti specifici che appartengono a quel gruppo.CEL_EXPRESSION: l'espressione CEL che verrà valutata per determinare l'applicabilità della regola, ad esempiomessage.version != \"v1\". Per ulteriori informazioni, consulta la pagina Utilizzare Common Expression Language.
Tieni presente quanto segue:
- Il flag
--locationspecifica la posizione della policy di accesso e deve essereglobal. Il flag
--details-rulespuò specificare il percorso del file di policy di accesso, che può essere scritto in formato JSON o YAML, ad esempio--details-rules=path_to_file.json.Il flag può essere ripetuto anche durante la configurazione di più regole. Ogni regola viene valutata in modo indipendente.
Una policy di accesso utilizza il seguente formato:
{ "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" } } } } ] } }
La risposta contiene un'operazione a lunga esecuzione che rappresenta la tua richiesta. Per scoprire come ottenere lo stato di un'operazione a lunga esecuzione, consulta Controllare lo stato di un'operazione a lunga esecuzione in questo documento.
Esempio
Il seguente comando crea un criterio di accesso che consente al principal specificato di pubblicare messaggi di eventi in un bus, ma nega la pubblicazione quando il tipo di supporto dati è 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'"}}}
API REST
Puoi creare una policy di accesso utilizzando
projects.locations.accessPolicies.create method.Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
POLICY_DISPLAY_NAME: facoltativo. Un nome leggibile per la policy di accesso, ad esempio "Policy di esempio". Il nome visualizzato può contenere un massimo di 63 caratteri.POLICY_DESCRIPTION: facoltativo. Una descrizione leggibile della norma di accesso, ad esempio "Descrizione di esempio". La descrizione può contenere un massimo di 256 caratteri.EFFECT: l'effetto della regola,ALLOWoDENY.PRINCIPALS: le identità a cui si applica questa regola. Il formato dell'identificatore dipende dal tipo di entità a cui vuoi fare riferimento. Per saperne di più, consulta Tipi di principal per le policy di accesso.EXCLUDED_PRINCIPALS: le identità escluse dall'applicazione della regola, anche se elencate inprincipals. Ad esempio, puoi aggiungere un gruppo Google aprincipalsed escludere utenti specifici che appartengono a quel gruppo.CEL_EXPRESSION: l'espressione CEL che verrà valutata per determinare l'applicabilità della regola. Per saperne di più, consulta la pagina Utilizzare Common Expression Language.POLICY_PROJECT_ID: l' Google Cloud ID progetto del progetto in cui verrà creata la policy.POLICY_ID: un nome univoco per la policy di accesso, ad esempiomy-access-policy.
È possibile elencare più regole. Ogni regola viene valutata in modo indipendente. Se una regola non si applica, potrebbero applicarsi altre regole.
Corpo JSON della richiesta:
{ "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" } } } } ] } }Per inviare la richiesta, espandi una di queste opzioni:
La risposta contiene un'operazione a lunga esecuzione che rappresenta la tua richiesta. Per scoprire come ottenere lo stato di un'operazione a lunga esecuzione, consulta Controllare lo stato di un'operazione a lunga esecuzione in questa pagina.
{ "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 }Esempio
Il seguente criterio di accesso consente all'entità specificata di pubblicare messaggi di eventi in un bus, ma nega la pubblicazione quando la priorità del messaggio è
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"
Applicare una policy di accesso
Crea un'associazione di policy per applicare la policy di accesso a un progetto Google Cloud . Ogni binding dei criteri associa un criterio di accesso a una risorsa.
Puoi applicare una policy di accesso utilizzando Google Cloud CLI o effettuando una richiesta diretta all'API IAM v3.
gcloud
Puoi creare un'associazione di policy e applicare la tua policy di accesso eseguendo il comando 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
Sostituisci quanto segue:
BINDING_ID: un nome univoco per l'associazione della policy, ad esempiomy-access-policy-binding.BINDING_PROJECT_ID: l'ID Google Cloud progetto del progetto in cui verrà creato il binding. Deve essere uguale all'ID del progetto in cui viene creato il bus Eventarc Advanced e indica la destinazione del binding.
Il flag
--locationspecifica la posizione del binding della policy e deve essereglobal.La risposta contiene un'operazione a lunga esecuzione che rappresenta la tua richiesta. Per scoprire come ottenere lo stato di un'operazione a lunga esecuzione, consulta Controllare lo stato di un'operazione a lunga esecuzione in questo documento.
Esempio
Il comando seguente crea un'associazione di policy che applica la policy di accesso specificata a un progetto 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
API REST
Puoi creare un binding di policy e applicare la policy di accesso utilizzando
projects.locations.policyBindings.create method.Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
BINDING_DISPLAY_NAME: facoltativo. Un nome leggibile per il binding della policy, ad esempio "Binding di esempio". Il nome visualizzato può contenere un massimo di 63 caratteri.BINDING_PROJECT_ID: l'ID progetto del progetto in cui verrà creata l'associazione. Google Cloud Deve essere uguale all'ID del progetto in cui viene creato il bus Eventarc Advanced e indica la destinazione del binding.POLICY_PROJECT_ID: l'ID progetto del progetto in cui viene creata la policy. Google CloudPOLICY_ID: il nome della policy di accesso da associare, ad esempiomy-access-policy.
Corpo JSON della richiesta:
{ "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" }Per inviare la richiesta, espandi una di queste opzioni:
La risposta contiene un'operazione a lunga esecuzione che rappresenta la tua richiesta. Per scoprire come ottenere lo stato di un'operazione a lunga esecuzione, consulta Controllare lo stato di un'operazione a lunga esecuzione in questa pagina.
{ "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 }Controllare lo stato di un'operazione a lunga esecuzione
Quando utilizzi l'API REST IAM, qualsiasi metodo che modifica una policy di accesso o un binding restituisce un'operazione a lunga esecuzione (LRO). L'operazione a lunga esecuzione tiene traccia dello stato della richiesta e indica se la modifica alla norma o all'associazione è stata completata.
Il metodo
operations.getrestituisce lo stato di un'operazione a lunga esecuzione.Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
OPERATION_NAME: il nome completo dell'operazione. Riceverai questo nome nella risposta alla tua richiesta originale.Il nome dell'operazione ha il seguente formato:
projects/PROJECT_ID/locations/global/operations/OPERATION_ID
PROJECT_ID: l'ID progetto Google Cloud del progetto in cui viene restituita l'operazione.
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{ "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 } }Se il campo
donedell'operazione non è presente, continua a monitorarne lo stato recuperando ripetutamente l'operazione. Utilizza il backoff esponenziale troncato per introdurre un ritardo tra una richiesta e l'altra. Quando il campodoneè impostato sutrue, l'operazione è completata e puoi interrompere la ricezione dell'operazione.Passaggi successivi
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2025-12-04 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-12-04 UTC."],[],[]]-
Crea criteri di accesso:
Access Policy Admin (