Este documento descreve as opções de controle de acesso disponíveis para você no Pub/Sub.
Visão geral
O Pub/Sub usa o gerenciamento de identidade e acesso (IAM) para fazer o controle de acesso.
No Pub/Sub, o controle de acesso pode ser configurado nos níveis do projeto e do recurso individual. Exemplo:
Conceder acesso por tópico ou por assinatura, em vez de para todo o projeto do Google Cloud.
Se você tiver acesso para ler a um único tópico ou assinatura, não vai ser possível fazer isso com o console do Google Cloud. Em vez disso, use a Google Cloud CLI.
Conceder acesso com capacidades limitadas, como somente publicar mensagens em um tópico ou somente consumir mensagens de uma assinatura, mas não excluir o tópico ou a assinatura.
Conceder acesso a todos os recursos de Pub/Sub de um projeto a um grupo de desenvolvedores.
Para uma descrição detalhada do IAM e dos recursos dele, consulte a documentação do IAM. Consulte, especificamente, Como conceder, alterar e revogar o acesso a recursos.
Todos os métodos do Pub/Sub exigem as permissões necessárias. Para ver uma lista das permissões e papéis compatíveis com o IAM do Pub/Sub, consulte a seção Papéis abaixo.
Permissões e papéis
Esta seção resume as permissões e os papéis compatíveis com o IAM do Pub/Sub.
Permissões necessárias
A tabela a seguir lista as permissões necessárias para chamar cada método:
Método REST | Permissões necessárias |
---|---|
projects.snapshots.create |
pubsub.snapshots.create no projeto do Cloud que o contém e a permissão pubsub.subscriptions.consume na assinatura de origem. |
projects.snapshots.delete |
pubsub.snapshots.delete no snapshot solicitado. |
projects.snapshots.getIamPolicy |
pubsub.snapshots.getIamPolicy no snapshot solicitado. |
projects.snapshots.list |
pubsub.snapshots.list no projeto do Cloud solicitado. |
projects.snapshots.patch |
pubsub.snapshots.update no snapshot solicitado. |
projects.snapshots.setIamPolicy |
pubsub.snapshots.setIamPolicy no snapshot solicitado. |
projects.snapshots.testIamPermissions |
Nenhuma. |
projects.subscriptions.acknowledge |
pubsub.subscriptions.consume na assinatura solicitada. |
projects.subscriptions.create |
pubsub.subscriptions.create no projeto do Cloud que o contém e pubsub.topics.attachSubscription no tópico solicitado.
Para criar uma assinatura no Projeto A para um Tópico T no Projeto B, as permissões apropriadas precisam ser concedidas no Projeto A e no Tópico A. Nesse caso, as informações de identidade do usuário podem ser capturadas nos registros de auditoria do Projeto B. |
projects.subscriptions.delete |
pubsub.subscriptions.delete na assinatura solicitada. |
projects.subscriptions.get |
pubsub.subscriptions.get na assinatura solicitada. |
projects.subscriptions.getIamPolicy |
pubsub.subscriptions.getIamPolicy na assinatura solicitada. |
projects.subscriptions.list |
pubsub.subscriptions.list no projeto do Cloud solicitado. |
projects.subscriptions.modifyAckDeadline |
pubsub.subscriptions.consume na assinatura solicitada. |
projects.subscriptions.modifyPushConfig |
pubsub.subscriptions.update na assinatura solicitada. |
projects.subscriptions.patch |
pubsub.subscriptions.update na assinatura solicitada. |
projects.subscriptions.pull |
pubsub.subscriptions.consume na assinatura solicitada. |
projects.subscriptions.seek |
pubsub.subscriptions.consume na assinatura solicitada e pubsub.snapshots.seek no instantâneo solicitado, se houver. |
projects.subscriptions.setIamPolicy |
pubsub.subscriptions.setIamPolicy na assinatura solicitada. |
projects.subscriptions.testIamPermissions |
Nenhum |
projects.topics.create |
pubsub.topics.create no projeto do Cloud que o contém. |
projects.topics.delete |
pubsub.topics.delete no tópico solicitado. |
projects.topics.detachSubscription |
pubsub.topics.detachSubscription no tópico solicitado. |
projects.topics.get |
pubsub.topics.get no tópico solicitado. |
projects.topics.getIamPolicy |
pubsub.topics.getIamPolicy no tópico solicitado. |
projects.topics.list |
pubsub.topics.list no projeto do Cloud solicitado. |
projects.topics.patch |
pubsub.topics.update no tópico solicitado. |
projects.topics.publish |
pubsub.topics.publish no tópico solicitado. |
projects.topics.setIamPolicy |
pubsub.topics.setIamPolicy no tópico solicitado. |
projects.topics.subscriptions.list |
pubsub.topics.get no tópico solicitado. |
projects.topics.testIamPermissions |
Nenhum |
Papéis
A tabela a seguir lista todos os papéis do Pub/Sub e as permissões associadas a cada um deles:
Role | Permissions |
---|---|
Pub/Sub Admin( Provides full access to topics and subscriptions. Lowest-level resources where you can grant this role:
|
pubsub.*
resourcemanager.projects.get serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
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:
|
pubsub.schemas.attach pubsub.schemas.commit pubsub.schemas.create pubsub.schemas.delete pubsub.schemas.get pubsub.schemas.list pubsub.schemas.listRevisions pubsub.schemas.rollback pubsub.schemas.validate pubsub.snapshots.create pubsub.snapshots.delete pubsub.snapshots.get pubsub.snapshots.list pubsub.snapshots.seek pubsub.snapshots.update pubsub.subscriptions.consume pubsub.subscriptions.create pubsub.subscriptions.delete pubsub.subscriptions.get pubsub.subscriptions.list pubsub.subscriptions.update pubsub. pubsub.topics.create pubsub.topics.delete pubsub. pubsub.topics.get pubsub.topics.list pubsub.topics.publish pubsub.topics.update pubsub.topics.updateTag resourcemanager.projects.get serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Pub/Sub Publisher( Provides access to publish messages to a topic. Lowest-level resources where you can grant this role:
|
pubsub.topics.publish |
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:
|
pubsub.snapshots.seek pubsub.subscriptions.consume pubsub. |
Pub/Sub Viewer( Provides access to view topics and subscriptions. Lowest-level resources where you can grant this role:
|
pubsub.schemas.get pubsub.schemas.list pubsub.schemas.listRevisions pubsub.schemas.validate pubsub.snapshots.get pubsub.snapshots.list pubsub.subscriptions.get pubsub.subscriptions.list pubsub.topics.get pubsub.topics.list resourcemanager.projects.get serviceusage.quotas.get serviceusage.services.get serviceusage.services.list |
Como controlar o acesso usando o console do Google Cloud
Use o console do Google Cloud para gerenciar o controle de acesso aos seus tópicos e projetos.
Para definir os controles de acesso no nível do projeto, siga estas etapas:
No console do Google Cloud, abra a página IAM.
Selecione o projeto.
Clique em
Adicionar.Digite um ou mais nomes principais.
Na lista Selecionar um papel, escolha o papel que você quer conceder.
Clique em Salvar.
Verifique se o principal está listado com o papel concedido.
Para definir os controles de acesso para tópicos e assinaturas, siga estas etapas:
No console do Google Cloud, acesse a lista Tópicos do Pub/Sub.
Se necessário, selecione o projeto com o Pub/Sub ativado.
Realize uma das seguintes etapas:
Selecione os tópicos para definir papéis para um ou mais tópicos.
Para definir papéis para uma assinatura anexada a um tópico, clique no ID do tópico. Na página Detalhes do tópico, clique no ID da assinatura. A página Detalhes da assinatura é exibida.
Se o painel estiver oculto, clique em Mostrar painel de informações.
Na guia Permissões, clique em
Adicionar principal.Digite um ou mais nomes principais.
Na lista Selecionar um papel, escolha o papel que você quer conceder.
Clique em Salvar.
Como controlar o acesso com a API IAM
A API IAM do Pub/Sub permite definir e receber políticas sobre tópicos e assinaturas individuais em um projeto e testar as permissões de um usuário para um determinado recurso. Assim como nos métodos normais do Pub/Sub, você pode invocar os métodos da API IAM por meio das bibliotecas de cliente, do API Explorer ou diretamente do HTTP.
Não é possível usar a API IAM do Pub/Sub para gerenciar políticas no nível do projeto do Google Cloud.
Nas seções a seguir, veja exemplos de como definir e consultar uma política. Além disso, veja como descobrir quais são as permissões de um autor de chamada para um recurso.
Como receber uma política
O método getIamPolicy()
permite que você receba uma política atual.
Esse método retorna um objeto JSON que contém a política associada ao recurso.
Veja um exemplo de código para consultar a política de uma assinatura:
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
gcloud
Receba a política da assinatura:
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
Saída:
{ "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" } ] }
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Antes de tentar esse exemplo, siga as instruções de configuração do PHP em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub PHP.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Veja um exemplo de código para consultar a política de um tópico:C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
gcloud
Acesse a política do tópico:
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json
Saída:
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role":" roles/pubsub.viewer", "members": [ "user:user-1@gmail.com" ] } ] }
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Antes de tentar esse exemplo, siga as instruções de configuração do PHP em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub PHP.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Como definir uma política
O método setIamPolicy()
permite que você anexe uma política a um recurso. O método setIamPolicy()
usa um SetIamPolicyRequest
, que contém a política a ser definida e o recurso ao qual a política está anexada.
Ele retorna a política resultante.
Veja um exemplo de código para definir a política de uma assinatura:
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
gcloud
1. Salve a política da assinatura.
gcloud pubsub subscriptions get-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json > subscription_policy.json
2. Abra subscription_policy.json
e atualize as vinculações, atribuindo os papéis apropriados aos principais adequados.
Para mais informações sobre como trabalhar com arquivos subscription_policy.json
, consulte
Política na documentação do 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. Aplique a nova política de assinatura.
gcloud pubsub subscriptions set-iam-policy \ projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ subscription_policy.json
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Veja um exemplo de código para definir a política de um tópico:
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
gcloud
1. Salve a política do tópico.
gcloud pubsub topics get-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ --format json > topic_policy.json
2. Abra topic_policy.json
e atualize as vinculações, atribuindo os papéis apropriados aos principais adequados.
Para mais informações sobre como trabalhar com arquivos subscription_policy.json
, consulte
Política na documentação do IAM.
{ "etag": "BwUjMhCsNvY=", "bindings": [ { "role": "roles/pubsub.editor", "members": [ "user:user-1@gmail.com", "user:user-2@gmail.com" ] } ] }
3. Aplique a nova política de tópicos.
gcloud pubsub topics set-iam-policy \ projects/${PROJECT}/topics/${TOPIC} \ topic_policy.json
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Como testar permissões
Você pode usar o método testIamPermissions()
para verificar quais das permissões fornecidas podem ser adicionadas ou removidas para o recurso em questão. Ele toma como parâmetros um nome de recurso e um conjunto de permissões e retorna o subconjunto de permissões.
Veja um exemplo de código para testar as permissões de uma assinatura:
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/subscriptions/${SUBSCRIPTION} \ --format json
Saída:
[ { "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" } ]
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Antes de tentar esse exemplo, siga as instruções de configuração do PHP em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub PHP.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Veja um exemplo de código para testar permissões para um tópico:
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
gcloud
gcloud iam list-testable-permissions \ https://pubsub.googleapis.com/v1/projects/${PROJECT}/topics/${TOPIC} \ --format json
Saída
[ { "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" } ]
Go
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Antes de tentar esse exemplo, siga as instruções de configuração do PHP em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub PHP.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Exemplo de caso de uso: comunicação entre projetos
O IAM do Pub/Sub é útil para o ajuste de acesso na comunicação entre projetos.
Suponha que uma conta de serviço no Projeto A do Cloud queira publicar mensagens em um tópico no Projeto B do Cloud. Primeiro, ative a API Pub/Sub no Projeto A.
Em seguida, conceda a permissão para edição da conta de serviço no projeto B do Cloud. No entanto, essa abordagem geralmente é muito grosseira. Você pode usar a API IAM para conseguir um nível de acesso mais refinado.
Por exemplo, este snippet usa o método setIamPolicy()
em project-b e um arquivo topic_policy.json
preparado
para conceder à conta de serviço
foobar@
project-a.iam.gserviceaccount.com
de project-a o papel do editor no tópico
projects/
project-b/topics/
topic-b:
gcloud pubsub topics set-iam-policy \ projects/project-b/topics/topic-b \ topic_policy.jsonSaída:
Updated IAM policy for topic topic-b. bindings: - members: - serviceAccount:foobar@project-a.iam.gserviceaccount.com role: roles/pubsub.publisher etag: BwWGrQYX6R4=
Comportamento de disponibilidade parcial
As verificações de autorização dependem do subsistema do IAM. Para oferecer uma latência de resposta consistentemente baixa para operações de dados (publicação e consumo de mensagens), o sistema pode recorrer a políticas do IAM em cache. Para mais informações sobre quando as alterações entrarão em vigor, consulte a documentação do IAM.