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:
|
|
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:
|
|
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.json
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.