Neste documento, descrevemos como criar uma assinatura push. É possível usar o consoleTrusted Cloud , a Google Cloud CLI, a biblioteca de cliente ou a API Pub/Sub para criar uma assinatura push.
Antes de começar
- Saiba mais sobre assinaturas.
- Entenda como funcionam as assinaturas push.
Papéis e permissões necessárias
Para criar uma assinatura, é necessário configurar o controle de acesso no nível do projeto. Você também precisa de permissões no nível do recurso se as assinaturas e os tópicos estiverem em projetos diferentes, conforme discutido mais adiante nesta seção.
Para receber as permissões necessárias para criar assinaturas push,
peça ao administrador para conceder a você o
papel do IAM de Editor do Pub/Sub (roles/pubsub.editor
)
no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para criar assinaturas push. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar assinaturas push:
-
Crie uma assinatura:
pubsub.subscriptions.create
-
Excluir uma assinatura:
pubsub.subscriptions.delete
-
Fazer uma assinatura:
pubsub.subscriptions.get
-
Listar uma assinatura:
pubsub.subscriptions.list
-
Atualizar uma assinatura:
pubsub.subscriptions.update
-
Anexe uma assinatura a um tópico:
pubsub.topics.attachSubscription
-
Acessar a política do IAM de uma assinatura:
pubsub.subscriptions.getIamPolicy
-
Configure a política do IAM para uma assinatura:
pubsub.subscriptions.setIamPolicy
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Se você precisar criar assinaturas
push em um projeto associadas a um tópico em outro
projeto, peça ao administrador do tópico para conceder a você o papel do IAM de Editor do Pub/Sub
(roles/pubsub.editor)
no tópico.
Propriedades de assinatura por push
Ao configurar uma assinatura de push, é possível especificar as seguintes propriedades.
Propriedades comuns
Saiba mais sobre as propriedades comuns de assinatura que podem ser definidas em todas as assinaturas.
Endpoints
URL do endpoint (obrigatório). Um endereço HTTPS acessível publicamente. O servidor do endpoint de push precisa ter um certificado SSL válido assinado por uma autoridade de certificação. O serviço do Pub/Sub entrega mensagens para enviar endpoints da mesma Trusted Cloud região em que o serviço do Pub/Sub armazena as mensagens. O serviço Pub/Sub entrega mensagens da mesma região Trusted Cloud com base no melhor esforço.
Se os assinantes usam um firewall, eles não podem receber solicitações push. Para receber solicitações push, desative o firewall e verifique o JSON Web Token (JWT) usado na solicitação. Se um assinante tiver um firewall, talvez você receba um erro
403 permission denied
.O Pub/Sub não exige mais prova de propriedade para domínios de URL de assinatura por push. Se seu domínio receber solicitações POST inesperadas do Pub/Sub, relate suspeita de abuso.
Autenticação
Ative a autenticação. Quando ativadas, as mensagens entregues pelo Pub/Sub ao endpoint de push incluem um cabeçalho de autorização para permitir que o endpoint autentique a solicitação. Os mecanismos de autenticação e autorização automáticos estão disponíveis para os endpoints do ambiente padrão do App Engine e do Cloud Run functions hospedados no mesmo projeto da assinatura.
A configuração de autenticação de uma assinatura push autenticada consiste em uma conta serviço gerenciado pelo usuário e nos parâmetros de público-alvo especificados em uma chamada create, patch ou ModifyPushConfig. Você também precisa conceder um papel específico a uma conta de serviço, conforme discutido na próxima seção.
Público-alvo. Uma única string, indiferente a maiúsculas, que o webhook usa para validar o público-alvo desse token.
Conta de serviço. O Pub/Sub cria automaticamente uma conta de serviço para você no formato
service-{PROJECT_NUMBER}@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com
.
Pré-requisitos para ativar a autenticação
A conta serviço gerenciado pelo usuário é a conta associada
à assinatura de push. Essa conta é usada como a declaração email
do
JSON Web Token (JWT) gerado. Confira a seguir uma lista de requisitos para a conta de serviço:
Essa conta serviço gerenciado pelo usuário precisa estar no mesmo projeto da assinatura por push.
O principal que está criando ou modificando a assinatura de push precisa ter a permissão
iam.serviceAccounts.actAs
na conta de serviço gerenciada pelo usuário para anexar a conta de serviço à assinatura de push. Para mais informações, consulte Anexar contas de serviço a recursos.Permissões necessárias: essa conta de serviço precisa receber a permissão
iam.serviceAccounts.getOpenIdToken
(incluída no papelroles/iam.serviceAccountTokenCreator
) para permitir que o Pub/Sub crie tokens JWT para a conta de serviço especificada autenticar solicitações push.
Desencapsulamento de payload
A opção Ativar desencapsulamento de payload remove todos os metadados das mensagens do Pub/Sub, exceto os dados da mensagem. Com o desencapsulamento de payload, os dados da mensagem são entregues diretamente como o corpo HTTP.
Você também pode ativar a opção Gravar metadados. A opção Gravar metadados adiciona ao cabeçalho da solicitação os metadados removidos das mensagens.
Entregar em endereços de VPC particulares
O Pub/Sub opera fora das redes VPC e não pode enviar mensagens diretamente para endereços VPC particulares. No entanto, é possível usar o Eventarc para encaminhar mensagens a serviços na sua VPC. O Pub/Sub pode enviar mensagens para um gatilho do Eventarc, que pode encaminhá-las para um serviço na VPC, como um serviço do Cloud Run ou uma execução do Workflows. Para mais informações, consulte a documentação do Eventarc.
VPC Service Controls
Para um projeto protegido pelo VPC Service Controls, observe as seguintes limitações para assinaturas de push:
Só é possível criar novas assinaturas de push em que o endpoint de push está definido como um serviço do Cloud Run com um URL
run.app
padrão ou uma execução do Workflows. Domínios personalizados não funcionam.Ao rotear eventos pelo Eventarc para destinos do Workflows em que o endpoint de push está definido como uma execução do Workflows, só é possível criar novas assinaturas de push pelo Eventarc.
Não é possível atualizar as assinaturas push atuais. Essas assinaturas por push continuam funcionando, mas não são protegidas pelo VPC Service Controls.
Criar uma assinatura por push
Os exemplos a seguir mostram como criar uma assinatura com entrega por push usando as configurações padrão fornecidas.
Por padrão, as assinaturas usam a entrega por pull, a menos que você defina explicitamente uma configuração de push, conforme mostrado nos exemplos a seguir.
Console
Para criar uma assinatura de push, siga estas etapas:
- No console Trusted Cloud , acesse a página Assinaturas.
- Clique em Criar assinatura.
- No campo ID da assinatura, insira um nome.
Para informações sobre como nomear uma assinatura, consulte Diretrizes para nomear um tópico ou uma assinatura.
- Escolha ou crie um tópico no menu suspenso. A assinatura recebe mensagens do tópico.
- Selecione o Tipo de entrega como Push.
- Especifique um URL de endpoint.
- Mantenha todos os outros valores padrão.
- Clique em Criar.
Você também pode criar uma assinatura na seção Tópicos. Esse atalho é útil para associar tópicos a assinaturas.
- No console Trusted Cloud , acesse a página Tópicos.
- Clique em more_vert ao lado do tópico em que você quer criar uma assinatura.
- No menu de contexto, selecione Criar assinatura.
- Insira o ID da assinatura.
Para informações sobre como nomear uma assinatura, consulte Diretrizes para nomear um tópico ou uma assinatura.
- Selecione o Tipo de entrega como Push.
- Especifique um URL de endpoint.
- Mantenha todos os outros valores padrão.
- Clique em Criar.
gcloud
-
In the Trusted Cloud console, activate Cloud Shell.
At the bottom of the Trusted 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.
-
Para criar uma assinatura por push, execute o comando
gcloud pubsub subscriptions create
.gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=TOPIC_ID \ --push-endpoint=PUSH_ENDPOINT
Substitua:
SUBSCRIPTION_ID
: o nome ou ID da sua nova assinatura por push.TOPIC_ID
: o nome ou ID do tópico.- PUSH_ENDPOINT: o URL a ser usado como endpoint para esta assinatura.
Por exemplo,
https://myproject.appspot.com/myhandler
.
- PROJECT_ID é o ID do projeto;
- SUBSCRIPTION_ID é o ID da sua assinatura.
- TOPIC_ID é o ID do tópico.
- PUSH_ENDPOINT é um URL a ser usado como endpoint. Por exemplo,
https://myproject.appspot.com/myhandler
.
REST
Para criar uma inscrição de push, use o método
projects.subscriptions.create
:
Solicitação:
A solicitação precisa ser autenticada com um token de acesso no cabeçalho Authorization
. Para conseguir um token de acesso para o Application Default Credentials atual, use: gcloud auth application-default print-access-token.
PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID Authorization: Bearer ACCESS_TOKEN
Corpo da solicitação:
{ "topic": "projects/PROJECT_ID/topics/TOPIC_ID", // Only needed if you are using push delivery "pushConfig": { "pushEndpoint": "PUSH_ENDPOINT" } }
Em que:
Resposta:
{ "name": "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID", "topic": "projects/PROJECT_ID/topics/TOPIC_ID", "pushConfig": { "pushEndpoint": "https://PROJECT_ID.appspot.com/myhandler", "attributes": { "x-goog-version": "v1" } }, "ackDeadlineSeconds": 10, "messageRetentionDuration": "604800s", "expirationPolicy": { "ttl": "2678400s" } }
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++.
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#.
Go
O exemplo a seguir usa a versão principal da biblioteca de cliente do Go Pub/Sub (v2). Se você ainda estiver usando a biblioteca v1, consulte o guia de migração para a v2. Para conferir uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
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.ts
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
O exemplo a seguir usa a biblioteca de cliente do Ruby Pub/Sub v3. Se você ainda estiver usando a biblioteca v2, consulte o guia de migração para a v3. Para conferir uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
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.
Monitorar assinaturas de push
O Cloud Monitoring oferece várias métricas para monitorar assinaturas.
Para conferir uma lista de todas as métricas disponíveis relacionadas ao Pub/Sub e as descrições delas, consulte a documentação do Monitoring para o Pub/Sub.
Você também pode monitorar as assinaturas no Pub/Sub.
A seguir
- Crie ou modifique uma assinatura com comandos
gcloud
. - Crie ou modifique uma assinatura com APIs REST.