Esta página foi traduzida pela API Cloud Translation.
Switch to English

Como configurar notificações do Pub/Sub

Você pode receber notificações do Pub/Sub sobre as alterações em um repositório do Docker. As notificações se aplicam a qualquer imagem de contêiner armazenada no repositório, incluindo gráficos do Helm 3 empacotados no formato OCI.

O Pub/Sub publica mensagens sobre os repositórios em recursos nomeados, chamados de tópicos. Os aplicativos que se inscrevem nos tópicos do Pub/Sub recebem essas mensagens e recebem notificações quando o estado de um repositório é alterado.

O Artifact Registry publica mensagens sobre as seguintes mudanças:

  • Uploads de imagens
  • Novas tags adicionadas às imagens
  • Exclusão de imagens

Além disso, é possível configurar papéis e permissões para publicar ou se inscrever para receber notificações.

Para mais informações sobre como configurar notificações no Container Analysis sobre atividades como novos resultados de verificação de vulnerabilidades, consulte a documentação do Container Analysis.

Visão geral

O Artifact Registry publica mensagens sobre alterações nos repositórios em um tópico chamado gcr.

Para receber notificações, é preciso:

  1. Crie um tópico chamado gcr no projeto com o Artifact Registry.
  2. Crie uma assinatura no tópico.
  3. Configure o aplicativo de assinante para receber mensagens sobre alterações no repositório.
  4. Se apropriado, configure permissões para controlar o acesso ao seu tópico e à sua assinatura.

Como criar o tópico Artifact Registry

O Artifact Registry publica mensagens em um tópico chamado gcr. Esse é o mesmo tópico que o Container Registry usa para publicar mensagens.

Em cada projeto em que o Artifact Registry está em execução, você precisa criar o tópico gcr, se ele ainda não existir. Para visualizar uma lista de tópicos existentes, consulte a página de tópicos do Pub/Sub no Console do Google Cloud ou execute o seguinte comando:

gcloud pubsub topics list

Para criar o tópico gcr:

Console

  1. Acesse a página de tópicos do Pub/Sub no Console do Cloud:

    Acesse a página de tópicos do Cloud Pub/Sub

  2. Clique em Criar tópico.

  3. Digite o código do tópico gcr.

  4. Clique em Criar tópico.

gcloud

Execute este comando:

gcloud pubsub topics create gcr --project=PROJECT-ID

Substitua PROJECT pelo ID do projeto do Google Cloud. Se você omitir a sinalização --project, o comando usará o projeto atual.

Para saber mais sobre o comando gcloud pubsub topics, consulte a documentação de topics.

Agora que você criou o tópico gcr, é possível criar uma assinatura para o tópico.

Como criar uma assinatura

Depois de criar um tópico para alterações no repositório, você pode configurar uma assinatura nele que use entrega por push ou entrega por pull. Recomendamos o uso da entrega por pull, porque os sistemas de CI/CD podem gerar inúmeras alterações em artefatos armazenados, e a entrega por pull é mais eficaz para um grande volume de mensagens.

Para criar uma assinatura com entrega por pull:

Console

  1. Acesse a página de tópicos do Pub/Sub no Console do Cloud:

    Acesse a página de tópicos do Cloud Pub/Sub

  2. Clique no tópico do projeto.

  3. Clique em Criar assinatura.

  4. Insira o nome da assinatura:

    projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
    

    Deixe o Tipo de entrega configurado como Pull.

  5. Clique em Criar.

gcloud

Execute este comando:

gcloud pubsub subscriptions create SUBSCRIPTION-NAME --topic=gcr

Substitua SUBSCRIPTION-NAME por um nome para a assinatura

Para saber mais sobre o comando gcloud pubsub subscriptions, consulte a documentação de subscriptions.

Agora você tem uma assinatura do tópico gcr. A próxima etapa é configurar permissões para as identidades que acionam alterações nos repositórios.

Como configurar o aplicativo de assinante

Depois de criar um tópico e uma assinatura para ele, é possível configurar seu aplicativo de assinante, que recebe mensagens sobre alterações nos repositórios. Os aplicativos de assinante realizam tarefas como: notificações de eventos, geração de registros do sistema e comunicação entre aplicativos.

Quando você envia ou exclui uma imagem, as seguintes etapas ocorrem:

  1. A conta de serviço do Artifact Registry publica a alteração no seu tópico gcr. A conta de serviço é service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com, em que PROJECT-NUMBER é o número do projeto do Google Cloud. A conta de serviço do Artifact Registry tem permissões pubsub.topics.publish por padrão para que possa publicar alterações no tópico.
  2. O Pub/Sub encaminha a mensagem do tópico para sua assinatura.
  3. Quando seu aplicativo de assinante solicita mensagens, ele extrai a nova mensagem da assinatura.

    A identidade que extrai mensagens em nome do assinante precisa ter permissões para acessar a assinatura. Use o papel de assinante do Pub/Sub para conceder essas permissões.

Para saber como configurar um assinante para receber mensagens de uma assinatura com entrega por pull, consulte Como receber mensagens usando pull.

Como configurar permissões

É possível usar permissões do Pub/Sub para controlar o acesso aos seus tópicos e suas assinaturas.

Para mais informações sobre permissões do Pub/Sub e concessão de acesso a tópicos e assinaturas, consulte a documentação de controle de acesso do Pub/Sub.

Exemplos de notificação

O Pub/Sub envia notificações como strings formatadas em JSON. Analise os exemplos a seguir para saber o que esperar ao receber notificações do Artifact Registry do Pub/Sub.

Quando uma imagem é enviada para o Container Registry, o payload da notificação pode ter o seguinte aspecto:

{
  "action":"INSERT",
  "digest":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5..."
}

Quando uma nova tag de imagem é enviada para o Artifact Registry, o payload da notificação tem esta aparência:

{
  "action":"INSERT",
  "digest":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world@sha256:6ec128e26cd5...",
  "tag":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}

A mensagem identifica a imagem relevante usando uma tecla digest ou tag.

Quando uma tag de imagem é excluída do Artifact Registry, o payload da notificação pode ter o seguinte aspecto:

{
  "action":"DELETE",
  "tag":"us-east1-docker.pkg.dev/my-project/my-repo/hello-world:1.1"
}

A mensagem pode conter DELETE ou INSERT como valores para a tecla action.

A seguir