Configurar notificações do Pub/Sub

Pode receber notificações do Pub/Sub para as alterações a um repositório do Docker. As notificações aplicam-se a qualquer imagem de contentor armazenada no repositório, incluindo gráficos do Helm 3 em formato OCI.

O Pub/Sub publica mensagens sobre os seus repositórios em recursos denominados tópicos. As aplicações que subscrevem tópicos do Pub/Sub recebem estas mensagens e notificações quando o estado de um repositório muda.

O Artifact Registry publica mensagens para as seguintes alterações:

  • Carregamentos de imagens
  • Novas etiquetas adicionadas a imagens
  • Eliminação de imagens

Além disso, pode configurar funções e autorizações para publicar ou subscrever notificações.

Vista geral

O Artifact Registry publica mensagens sobre alterações aos repositórios num tópico denominado gcr.

Para receber notificações, tem de:

  1. Cria um tópico com o nome gcr no projeto com o Artifact Registry.
  2. Crie uma subscrição para o tópico.
  3. Configure a sua aplicação subscritora para receber mensagens sobre alterações ao repositório.
  4. Se for adequado, configure as autorizações para controlar o acesso ao seu tópico e subscrição.

Criar o tópico do Artifact Registry

Para criar o tópico gcr com chaves de encriptação da Google, geridas e pertencentes à Google,

Consola

  1. Aceda à página de tópicos do Pub/Sub na Trusted Cloud consola.

    Aceda à página de tópicos do Pub/Sub

  2. Clique em Criar tópico.

  3. Introduza o ID do tópico gcr.

  4. Clique em Criar tópico.

gcloud

Execute o seguinte comando:

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

Substitua PROJECT-ID pelo seu Trusted Cloud by S3NS ID do projeto. Se omitir a flag --project, o comando usa o projeto atual.

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

Para criar o tópico gcr com encriptação CMEK, consulte as instruções para encriptar tópicos do Pub/Sub.

Depois de criar o tópico gcr ou verificar que existe, pode criar uma subscrição do tópico.

Criar uma subscrição

Depois de criar um tópico para alterações ao repositório, pode configurar uma subscrição para o mesmo que use a entrega push ou a entrega pull. Recomendamos a utilização da entrega por obtenção, uma vez que os sistemas de CI/CD podem gerar inúmeras alterações aos artefactos armazenados, e a entrega por obtenção é mais eficaz para um grande volume de mensagens.

Para criar uma subscrição com entrega por obtenção:

Consola

  1. Aceda à página de tópicos do Pub/Sub na Trusted Cloud consola.

    Aceda à página de tópicos do Pub/Sub

  2. Clique no tópico do seu projeto.

  3. Clique em Criar subscrição.

  4. Introduza um nome da subscrição:

    projects/PROJECT/subscriptions/[SUBSCRIPTION-NAME]
    

    Deixe o Tipo de fornecimento definido como Extrair.

  5. Clique em Criar.

gcloud

Execute o seguinte comando:

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

Substitua SUBSCRIPTION-NAME por um nome para a subscrição

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

Agora, tem uma subscrição do tópico gcr. O passo seguinte é configurar autorizações para as identidades que acionam alterações nos repositórios.

Configurar a sua aplicação de subscrição

Depois de criar um tópico e uma subscrição desse tópico, pode configurar a sua aplicação subscritora, a aplicação que recebe mensagens sobre alterações aos repositórios. As aplicações subscritoras cumprem tarefas como notificações de eventos, registo do sistema e comunicação entre aplicações.

Quando um utilizador do repositório envia ou elimina uma imagem, ocorrem os seguintes passos:

  1. A conta de serviço do Artifact Registry publica a alteração no seu tópico do gcr Google Cloud Pub/Sub. A conta de serviço é service-PROJECT-NUMBER@gcp-sa-artifactregistry.s3ns-system.iam.gserviceaccount.com, em que PROJECT-NUMBER é o seu Trusted Cloud número do projeto. A conta de serviço do Artifact Registry tem a autorização pubsub.topics.publish por predefinição para poder publicar alterações no seu tópico.

    Se um administrador tiver revogado as autorizações pubsub.topics.publish para a conta de serviço do Artifact Registry, o Artifact Registry tenta publicar a mensagem como o utilizador do repositório. Nesta situação, a conta do utilizador do repositório tem de ter a autorização pubsub.topics.publish para publicar a mensagem com êxito.

  2. O Pub/Sub encaminha a mensagem do tópico para a sua subscrição.

  3. Quando a sua aplicação de subscrição faz um pedido de mensagens, extrai a nova mensagem da subscrição.

    A identidade que extrai mensagens em nome do subscritor tem de ter autorizações para aceder à subscrição. Pode usar a função Subscritor do Pub/Sub para conceder esta autorização.

Para saber como configurar um subscritor para receber mensagens de uma subscrição com entrega por obtenção, consulte o artigo Receber mensagens através da obtenção.

Configurar autorizações

Pode usar as autorizações do Pub/Sub para controlar o acesso aos seus tópicos e subscrições.

Para mais informações acerca das autorizações do Pub/Sub e da concessão de acesso a tópicos e subscrições, consulte a documentação de controlo de acesso do Pub/Sub.

Exemplos de notificações

O Pub/Sub envia notificações como strings formatadas em JSON. Reveja os exemplos seguintes para saber o que esperar quando receber notificações do Artifact Registry a partir do Pub/Sub.

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

{
  "action":"INSERT",
  "digest":"u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/hello-world@sha256:6ec128e26cd5..."
}

Quando uma nova etiqueta de imagem é enviada para o Artifact Registry, o payload de notificação tem o seguinte aspeto:

{
  "action":"INSERT",
  "digest":"u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/hello-world@sha256:6ec128e26cd5...",
  "tag":"u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/hello-world:1.1"
}

A mensagem identifica a imagem relevante através de uma chave digest ou tag.

Quando uma etiqueta de imagem é eliminada do Artifact Registry, o payload da notificação pode ter o seguinte aspeto:

{
  "action":"DELETE",
  "tag":"u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/hello-world:1.1"
}

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

O que se segue?