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 somente visualização a um único tópico ou assinatura, não será possível ver o tópico ou a assinatura usando o Console do Google Cloud. Em vez disso, use a CLI do Google Cloud.
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.
Cada método do Pub/Sub exige que o autor da chamada tenha 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 que o solicitante precisa ter 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 |
Nenhum |
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
Na tabela abaixo, veja os papéis predefinidos do IAM do Pub/Sub com uma lista correspondente de todas as permissões incluídas em cada um. Cada permissão se aplica a um tipo específico de recurso.
Esses papéis pré-configurados abordam muitos casos de uso típicos. No entanto, pode ser necessário ter um papel que inclua um conjunto personalizado de permissões. Por exemplo, é possível criar um papel que permita ao usuário criar uma assinatura em um projeto, sem permitir que ele exclua ou atualize tópicos ou assinaturas existentes no projeto. Nesses casos, é possível criar um papel personalizado do IAM que atenda às suas necessidades.
Papel | Inclui as permissões: | Por tipo de recurso: |
---|---|---|
roles/pubsub.publisher |
pubsub.topics.publish |
Tópico |
roles/pubsub.subscriber |
pubsub.snapshots.seek |
Snapshot |
pubsub.subscriptions.consume |
Assinatura | |
pubsub.topics.attachSubscription |
Tópico | |
roles/pubsub.viewer ou roles/viewer |
pubsub.snapshots.get |
Snapshot |
pubsub.snapshots.list |
Projeto | |
pubsub.subscriptions.get |
Assinatura | |
pubsub.subscriptions.list |
Projeto | |
pubsub.topics.get |
Tópico | |
pubsub.topics.list |
Projeto | |
resourcemanager.projects.get |
Projeto | |
servicemanagement.projectSettings.get |
Projeto | |
serviceusage.quotas.get |
Projeto | |
serviceusage.services.get |
Projeto | |
serviceusage.services.list |
Projeto | |
roles/pubsub.editor ou roles/editor |
Inclui permissões das funções acima: roles/pubsub.publisher , roles/pubsub.subscriber e roles/pubsub.viewer ou roles/viewer . |
|
pubsub.snapshots.create |
Projeto | |
pubsub.snapshots.delete |
Snapshot | |
pubsub.snapshots.update |
Snapshot | |
pubsub.subscriptions.create
|
Projeto | |
pubsub.subscriptions.delete |
Assinatura | |
pubsub.subscriptions.update |
Assinatura | |
pubsub.topics.create |
Projeto | |
pubsub.topics.delete |
Tópico | |
pubsub.topics.detachSubscription |
Tópico | |
pubsub.topics.update |
Tópico | |
pubsub.topics.updateTag |
Tópico | |
roles/pubsub.admin ou roles/owner |
Inclui permissões das funções acima: roles/pubsub.publisher , roles/pubsub.subscriber , roles/pubsub.viewer ou roles/viewer e roles/pubsub.editor ou roles/editor . |
|
pubsub.snapshots.getIamPolicy |
Snapshot | |
pubsub.snapshots.setIamPolicy |
Snapshot | |
pubsub.subscriptions.getIamPolicy |
Inscrição | |
pubsub.subscriptions.setIamPolicy |
Assinatura | |
pubsub.topics.getIamPolicy |
Tópico | |
pubsub.topics.setIamPolicy |
Tópico |
Os papéis "roles/owner", "roles/editor" e "roles/viewer" também incluem permissões para outros serviços do Google Cloud.
Como controlar o acesso usando o Console do Google Cloud
Use o Console do GCP 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 Cloud, acesse a página "IAM".
Selecione o projeto.
Clique em
Adicionar.Digite um ou mais nomes de principais.
Na lista Selecionar uma função, escolha a função que você quer conceder.
Clique em Save.
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 Cloud, acesse a lista Tópicos do Pub/Sub.
Se necessário, selecione o projeto ativado para Pub/Sub.
Realize uma das seguintes etapas:
Para definir papéis para um ou mais tópicos, selecione os tópicos.
Para definir papéis de 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 de informações estiver oculto, clique em Mostrar painel de informações.
Na guia Permissões, clique em
Adicionar participante.Digite um ou mais nomes de principais.
Na lista Selecionar uma função, escolha a função que você quer conceder.
Clique em Save.
Como controlar o acesso usando 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 regulares do Pub/Sub, é possível invocar os métodos da API IAM por meio das bibliotecas de clientes, do API Explorer ou diretamente por 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.
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.
Teste de permissões
Use o método testIamPermissions()
para verificar quais permissões fornecidas o autor pode adicionar ou remover do recurso específico. Ele recebe o nome do recurso e um conjunto de permissões como parâmetros e retorna o subconjunto de permissões do autor.
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. Por exemplo, imagine que uma conta de serviço no projeto A do Cloud queira publicar mensagens em um tópico no projeto B do Cloud. Faça isso concedendo a permissão Edit à 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.