Questo documento descrive le opzioni di controllo dell'accesso disponibili in Pub/Sub.
Panoramica
Pub/Sub utilizza Identity and Access Management (IAM) per controllo dell'accesso.
In Pub/Sub, controllo dell'accesso può essere configurato a livello di progetto e a livello di singola risorsa. Ad esempio:
Concedi l'accesso in base all'argomento o all'abbonamento, anziché per l'intero progetto Cloud.
Se hai accesso di sola visualizzazione a un singolo argomento o abbonamento, non puoi visualizzare l'argomento o l'abbonamento utilizzando la console Google Cloud. In alternativa, puoi utilizzare Google Cloud CLI.
Concedi l'accesso con funzionalità limitate, ad esempio per pubblicare solo messaggi in un argomento o per consumare solo messaggi da una sottoscrizione, ma non per eliminare l'argomento o la sottoscrizione.
Concedi a un gruppo di sviluppatori l'accesso a tutte le risorse Pub/Sub all'interno di un progetto.
Per una descrizione dettagliata di IAM e delle sue funzionalità, consulta la documentazione di IAM. In particolare, consulta Concessione, modifica e revoca dell'accesso alle risorse.
Ogni metodo Pub/Sub richiede le autorizzazioni necessarie. Per un elenco delle autorizzazioni e dei ruoli supportati da Pub/Sub IAM, consulta la sezione Ruoli di seguito.
Autorizzazioni e ruoli
Questa sezione riepiloga le autorizzazioni e i ruoli supportati da Pub/Sub IAM.
Autorizzazioni obbligatorie
Nella tabella seguente sono elencate le autorizzazioni necessarie per chiamare ciascun metodo:
Metodo REST | Autorizzazioni obbligatorie |
---|---|
projects.snapshots.create |
pubsub.snapshots.create nel progetto Cloud contenente e l'autorizzazione pubsub.subscriptions.consume nell'abbonamento di origine. |
projects.snapshots.delete |
pubsub.snapshots.delete nell'istantanea richiesta. |
projects.snapshots.getIamPolicy |
pubsub.snapshots.getIamPolicy nell'istantanea richiesta. |
projects.snapshots.list |
pubsub.snapshots.list nel progetto Cloud richiesto. |
projects.snapshots.patch |
pubsub.snapshots.update nell'istantanea richiesta. |
projects.snapshots.setIamPolicy |
pubsub.snapshots.setIamPolicy nell'istantanea richiesta. |
projects.snapshots.testIamPermissions |
Nessuno. |
projects.subscriptions.acknowledge |
pubsub.subscriptions.consume sull'abbonamento richiesto. |
projects.subscriptions.create |
pubsub.subscriptions.create nel progetto Cloud contenente
e pubsub.topics.attachSubscription nell'argomento richiesto.
Tieni presente che per creare una sottoscrizione nel progetto A a un argomento T nel progetto B, le autorizzazioni appropriate devono essere concesse sia al progetto A sia all'argomento T. In questo caso, le informazioni sull'identità utente possono essere acquisite nei log di controllo del progetto B. |
projects.subscriptions.delete |
pubsub.subscriptions.delete sull'abbonamento richiesto. |
projects.subscriptions.get |
pubsub.subscriptions.get sull'abbonamento richiesto. |
projects.subscriptions.getIamPolicy |
pubsub.subscriptions.getIamPolicy sull'abbonamento richiesto. |
projects.subscriptions.list |
pubsub.subscriptions.list nel progetto Cloud richiesto. |
projects.subscriptions.modifyAckDeadline |
pubsub.subscriptions.consume sull'abbonamento richiesto. |
projects.subscriptions.modifyPushConfig |
pubsub.subscriptions.update sull'abbonamento richiesto. |
projects.subscriptions.patch |
pubsub.subscriptions.update sull'abbonamento richiesto. |
projects.subscriptions.pull |
pubsub.subscriptions.consume sull'abbonamento richiesto. |
projects.subscriptions.seek |
pubsub.subscriptions.consume sull'abbonamento richiesto e pubsub.snapshots.seek sull'eventuale snapshot richiesto. |
projects.subscriptions.setIamPolicy |
pubsub.subscriptions.setIamPolicy sull'abbonamento richiesto. |
projects.subscriptions.testIamPermissions |
Nessuno. |
projects.topics.create |
pubsub.topics.create nel progetto Cloud contenente. |
projects.topics.delete |
pubsub.topics.delete sull'argomento richiesto. |
projects.topics.detachSubscription |
pubsub.topics.detachSubscription sull'argomento richiesto. |
projects.topics.get |
pubsub.topics.get sull'argomento richiesto. |
projects.topics.getIamPolicy |
pubsub.topics.getIamPolicy sull'argomento richiesto. |
projects.topics.list |
pubsub.topics.list nel progetto Cloud richiesto. |
projects.topics.patch |
pubsub.topics.update sull'argomento richiesto. |
projects.topics.publish |
pubsub.topics.publish sull'argomento richiesto. |
projects.topics.setIamPolicy |
pubsub.topics.setIamPolicy sull'argomento richiesto. |
projects.topics.subscriptions.list |
pubsub.topics.get sull'argomento richiesto. |
projects.topics.testIamPermissions |
Nessuno. |
Ruoli
La tabella seguente elenca tutti i ruoli Pub/Sub e le autorizzazioni associate a ciascun ruolo:
Role | Permissions |
---|---|
Pub/Sub Admin( Provides full access to topics and subscriptions. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Editor( Provides access to modify topics and subscriptions, and access to publish and consume messages. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Publisher( Provides access to publish messages to a topic. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Subscriber( Provides access to consume messages from a subscription and to attach subscriptions to a topic. Lowest-level resources where you can grant this role:
|
|
Pub/Sub Viewer( Provides access to view topics and subscriptions. Lowest-level resources where you can grant this role:
|
|
Controllo dell'accesso tramite la console Google Cloud
Puoi utilizzare la console Google Cloud per gestire controllo dell'accesso per i tuoi argomenti e progetti.
Per impostare i controlli di accesso a livello di progetto:
Nella console Google Cloud, vai alla pagina IAM.
Seleziona il progetto.
Fai clic su
Aggiungi.Digita uno o più nomi di entità.
Nell'elenco Seleziona un ruolo, seleziona il ruolo che vuoi concedere.
Fai clic su Salva.
Verifica che l'entità sia elencata con il ruolo che hai concesso.
Per impostare i controlli di accesso per gli argomenti e le sottoscrizioni:
Nella console Google Cloud, vai all'elenco Argomenti di Pub/Sub.
Se necessario, seleziona il progetto abilitato per Pub/Sub.
Esegui uno dei seguenti passaggi:
Per impostare i ruoli per uno o più argomenti, selezionali.
Per impostare i ruoli per una sottoscrizione collegata a un argomento, fai clic sull'ID argomento. Nella pagina Dettagli argomento, fai clic sull'ID abbonamento. Viene visualizzata la pagina Dettagli abbonamento.
Se il riquadro informazioni è nascosto, fai clic su Mostra riquadro informazioni.
Nella scheda Autorizzazioni, fai clic su
Aggiungi entità.Digita uno o più nomi di entità.
Nell'elenco Seleziona un ruolo, seleziona il ruolo che vuoi concedere.
Fai clic su Salva.
Controllo dell'accesso tramite l'API IAM
L'API IAM Pub/Sub ti consente di impostare e recuperare i criteri per singoli argomenti e abbonamenti in un progetto e di testare le autorizzazioni di un utente per una determinata risorsa. Come per i metodi Pub/Sub standard, puoi invocare i metodi dell'API IAM tramite le librerie client, API Explorer o direttamente tramite HTTP.
Tieni presente che non puoi utilizzare l'API IAM Pub/Sub per gestire i criteri a livello di progetto Google Cloud.
Le sezioni seguenti forniscono esempi di come impostare e recuperare un criterio e come verificare le autorizzazioni di un chiamante per una determinata risorsa.
Recupero di un criterio
Il metodo getIamPolicy()
consente di recuperare un criterio esistente.
Questo metodo restituisce un oggetto JSON contenente il criterio associato alla risorsa.
Di seguito è riportato un codice campione per ottenere le norme per un abbonamento:
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
gcloud
Recupera il criterio di sottoscrizione:
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
Output:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:user-1@gmail.com" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:service-account-2@appspot.gserviceaccount.com", "user:user-3@gmail.com" } ] }
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Di seguito è riportato un codice campione per ottenere un criterio per un argomento:C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
gcloud
Ottieni il criterio argomento
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json
Output:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role":" roles/pubsub.viewer", "members": [ "user:user-1@gmail.com" ] } ] }
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Impostazione di un criterio
Il metodo setIamPolicy()
consente di collegare un criterio
a una risorsa. Il metodo setIamPolicy()
accetta un SetIamPolicyRequest
, che contiene il criterio da impostare e la risorsa a cui è associato.
Restituisce il criterio risultante.
Di seguito è riportato un codice campione per impostare un criterio per un abbonamento:
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
gcloud
1. Salva il criterio per l'abbonamento.
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json > subscription_policy.json
2. Apri subscription_policy.json
e aggiorna le associazioni assegnando i ruoli appropriati alle entità appropriate.
Per ulteriori informazioni sull'utilizzo dei file subscription_policy.json
, consulta
Norme nella documentazione di IAM.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.admin", "members": [ "user:user-1@gmail.com" ] }, { "role": "roles/pubsub.editor", "members": [ "serviceAccount:service-account-2@appspot.gserviceaccount.com" } ] }
3. Applica il nuovo criterio di sottoscrizione.
gcloud pubsub subscriptions set-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ subscription_policy.json
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella Guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Di seguito è riportato un codice campione per impostare un criterio per un argomento:
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
gcloud
1. Salva il criterio per l'argomento.
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json > topic_policy.json
2. Apri topic_policy.json
e aggiorna le associazioni assegnando i ruoli appropriati alle entità appropriate.
Per ulteriori informazioni sull'utilizzo dei file subscription_policy.json
, consulta
Norme nella documentazione di IAM.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.editor", "members": [ "user:user-1@gmail.com", "user:user-2@gmail.com" ] } ] }
3. Applica il nuovo criterio per gli argomenti.
gcloud pubsub topics set-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ topic_policy.json
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Test delle autorizzazioni
Puoi utilizzare il metodo testIamPermissions()
per verificare quali delle autorizzazioni specificate possono essere aggiunte o rimosse per la risorsa in questione. Prende come parametri un nome della risorsa e un insieme di autorizzazioni e restituisce il sottoinsieme di autorizzazioni.
Di seguito è riportato un codice campione per testare le autorizzazioni per una sottoscrizione:
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
Output:
[ { "name": "pubsub.subscriptions.consume", "stage": "GA" }, { "name": "pubsub.subscriptions.delete", "stage": "GA" }, { "name": "pubsub.subscriptions.get", "stage": "GA" }, { "name": "pubsub.subscriptions.getIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.setIamPolicy", "stage": "GA" }, { "name": "pubsub.subscriptions.update", "stage": "GA" } ]
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Di seguito è riportato un codice campione per testare le autorizzazioni per un argomento:
C#
Prima di provare questo esempio, segui le istruzioni di configurazione C# riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub C#.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/topics/${TOPIC} \ --format json
Output
[ { "name": "pubsub.topics.attachSubscription", "stage": "GA" }, { "name": "pubsub.topics.delete", "stage": "GA" }, { "name": "pubsub.topics.detachSubscription", "stage": "GA" }, { "name": "pubsub.topics.get", "stage": "GA" }, { "name": "pubsub.topics.getIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.publish", "stage": "GA" }, { "name": "pubsub.topics.setIamPolicy", "stage": "GA" }, { "name": "pubsub.topics.update", "stage": "GA" } ]
Vai
Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Go.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Pub/Sub.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub Node.js.
PHP
Prima di provare questo esempio, segui le istruzioni di configurazione di PHP riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API PHP Pub/Sub.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione di Python riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Pub/Sub per Python.
Ruby
Prima di provare questo esempio, segui le istruzioni di configurazione di Ruby riportate nella guida rapida all'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Ruby Pub/Sub.
Caso d'uso di esempio: comunicazione tra progetti
L'IAM di Pub/Sub è utile per perfezionare l'accesso nella comunicazione tra progetti.
Supponiamo che un account di servizio nel progetto Cloud A voglia pubblicare messaggi in un argomento nel progetto Cloud B. Innanzitutto, abilita l'API Pub/Sub nel progetto A.
In secondo luogo, concedi all'account di servizio l'autorizzazione Modifica nel progetto Cloud B. Tuttavia, questo approccio è spesso troppo approssimativo. Puoi utilizzare l'API IAM per ottenere un livello di accesso più granulare.
Ad esempio, questo snippet utilizza il metodo setIamPolicy()
in project-b e un file
topic_policy.json
preparato per concedere all'account di servizio
foobar@
project-a.iam.gserviceaccount.com
di project-a il ruolo Editore per l'argomento
projects/
project-b/topics/
topic-b:
gcloud pubsub topics set-iam-policy \ projects/project-b/topics/topic-b \ topic_policy.json
Updated IAM policy for topic topic-b. bindings: - members: - serviceAccount:foobar@project-a.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwWGrQYX6R4=
Comportamento di disponibilità parziale
I controlli di autorizzazione dipendono dal sottosistema IAM. Per offrire una latenza di risposta costantemente bassa per le operazioni sui dati (pubblicazione e consumo di messaggi), il sistema potrebbe ricorrere ai criteri IAM memorizzati nella cache. Per informazioni su quando verranno applicate le modifiche, consulta la documentazione di IAM.