Webhooks de Azure Container Registry

Un registro de contenedor de Azure almacena y administra imágenes privadas de contenedor de Docker, de una forma similar a la que Docker Hub almacena imágenes públicas. También puede hospedar repositorios para gráficos de Helm (versión preliminar), un formato de empaquetado para implementar aplicaciones en Kubernetes. Puede usar webhooks para desencadenar eventos cuando determinadas acciones tienen lugar en uno de los repositorios de registro. Los webhooks pueden responder a eventos en el nivel de registro o pueden limitarse a una etiqueta de repositorio específica. Con un registro con replicación geográfica, puede configurar cada webhook para responder a eventos en una réplica regional específica.

El punto de conexión de un webhook debe ser accesible públicamente desde el registro. Puede configurar solicitudes de webhook del registro para autenticarse en un punto de conexión protegido.

Para obtener información detallada sobre las solicitudes de webhook, consulte Referencia de esquema de webhook de Azure Container Registry.

Importante

Utilice HTTPS y envíe credenciales de webhook solo en el encabezado Authorization. Azure Container Registry enmascara el valor del encabezado Authorization en el historial de eventos de webhook. No enmascara las credenciales en el URI del servicio, en otros encabezados personalizados o en cuerpos de solicitud o respuesta.

No incluya contraseñas, tokens de acceso, claves de API u otros secretos en ningún lugar del URI del servicio. Esta restricción incluye credenciales antes del nombre de host (por ejemplo, https://user:password@host), la ruta de acceso y la cadena de consulta. También incluye direcciones URL de devolución de llamada firmadas que contienen tokens de autenticación en sus cadenas de consulta. No incluya secretos en ningún encabezado personalizado distinto de Authorization. Para obtener más información, consulte Proteger las credenciales del webhook.

Requisitos previos

Creación de webhooks: Azure Portal

  1. Inicie sesión en Azure Portal.
  2. Vaya al registro de contenedor en el que desea crear un webhook.
  3. En Servicios, seleccione Webhooks.
  4. Seleccione Agregar en la barra de herramientas del webhook.
  5. Complete el formulario Crear webhook con la siguiente información:
Value Descripción
Nombre de webhook El nombre que desea dar al webhook. Solo puede contener letras y números, y su longitud debe oscilar entre 5 y 50 caracteres.
Location Para un registro con replicación geográfica, especifique la región de Azure de la réplica del registro.
URI de servicio El URI HTTPS donde el webhook debe enviar notificaciones POST. No incluya contraseñas, tokens de acceso, claves de API u otros secretos en ningún lugar del URI. Esta regla se aplica a las credenciales antes del nombre de host (por ejemplo, https://user:password@host), la ruta de acceso y la cadena de consulta.
Encabezados personalizados Los encabezados que van a pasar junto con la solicitud POST. Deben tener el formato "clave: valor". Envíe credenciales solo en el Authorization encabezado . No incluya contraseñas, tokens de acceso, claves de API ni otros secretos en ningún otro encabezado. Solo se enmascara el valor del Authorization encabezado en el historial de eventos de webhook.
Acciones de desencadenador Acciones que desencadenan el webhook. Las acciones incluyen insertar y eliminar imágenes, insertar y eliminar gráficos de Helm, y poner imágenes en cuarentena. Puede elegir una o varias acciones para desencadenar el webhook.
Estado El estado del webhook después de su creación. Esto está habilitada de manera predeterminada.
Ámbito El ámbito en el que trabaja el webhook. Si no se especifica, el ámbito sirve para todos los eventos del registro. Se puede especificar para un repositorio o una etiqueta con el formato "repositorio:etiqueta"o "repositorio:*" para todas las etiquetas de un repositorio.

Formulario de webhook de ejemplo:

Captura de pantalla que muestra la interfaz de usuario de creación del webhook de ACR en Azure Portal.

Creación de webhooks: CLI de Azure

Para crear un webhook mediante la CLI de Azure, use el comando az acr webhook create. El siguiente comando crea un webhook para los eventos de eliminación de imágenes en el registro mycontainerregistry:

az acr webhook create --registry mycontainerregistry --name myacrwebhook01 --actions delete --uri https://webhookuri.com --headers "Authorization=$WEBHOOK_AUTH"

Proteger las credenciales de webhook

Azure Container Registry almacena la configuración del webhook y registra las solicitudes que envía al punto de conexión, junto con las respuestas, en el historial de eventos de webhook. Para reducir el riesgo de exponer credenciales, siga estas instrucciones:

  • Utilice un URI de servicio HTTPS. No envíe credenciales a través de HTTP.
  • Envíe credenciales solo en el Authorization encabezado . En el historial de eventos de webhook, Azure Container Registry enmascara el valor del encabezado Authorization en los encabezados de solicitud y respuesta registrados.
  • No coloque credenciales en ningún otro lugar. Azure Container Registry no enmascara estos valores en el historial de eventos de webhook:
    • El URI del servicio, incluidas las credenciales antes del nombre de host (por ejemplo, https://user:password@host), la ruta de acceso y la cadena de consulta.
    • Encabezados personalizados distintos de Authorization.
    • Cuerpos de solicitud y respuesta.
  • Asegúrese de que el punto de conexión no devuelva credenciales en su cuerpo de respuesta o en encabezados de respuesta distintos de Authorization.
  • No confíe en la codificación para ocultar las credenciales. La codificación de direcciones URL, la codificación Base64 y el entrecomillado del shell no protegen un secreto.
  • Limite quién puede leer la configuración del webhook. Los usuarios con el Microsoft.ContainerRegistry/registries/webhooks/getCallbackConfig/action permiso pueden leer el URI de servicio configurado y todos los encabezados personalizados, incluido el valor de encabezado sin máscara Authorization . Los usuarios con el permiso Microsoft.ContainerRegistry/registries/webhooks/listEvents/action pueden leer el historial de eventos de webhook, pero no pueden ver el valor del encabezado Authorization sin enmascarar. Los roles integrados, como Propietario y Colaborador, incluyen estos permisos.
  • Si una credencial se incluyó anteriormente en el URI del servicio, en otro encabezado personalizado o en un cuerpo de solicitud o respuesta, revoque o rote esa credencial.

Webhook de prueba

Azure portal

Antes de usar el webhook, puede probarlo con el botón Ping. El comando Ping envía una solicitud POST genérica al punto de conexión especificado y registra la respuesta. Mediante la característica de ping puede comprobar que ha configurado correctamente el webhook.

  1. Seleccione el webhook que desea probar.
  2. En la barra de herramientas superior, seleccione Ping.
  3. Compruebe la respuesta del punto de conexión en la columna ESTADO HTTP.

Interfaz de usuario de creación de webhook ACR en Azure Portal

CLI de Azure

Para probar un webhook de ACR con la CLI de Azure, use el comando az acr webhook ping.

az acr webhook ping --registry mycontainerregistry --name myacrwebhook01

Para ver los resultados, use el comando az acr webhook list-events.

az acr webhook list-events --registry mycontainerregistry08 --name myacrwebhook01

Eliminación del webhook

Azure portal

Se puede eliminar cada webhook seleccionando uno y, después, con el botón Eliminar en Azure Portal.

CLI de Azure

az acr webhook delete --registry mycontainerregistry --name myacrwebhook01

Pasos siguientes

Referencia del esquema de webhook

Para más información sobre el formato y las propiedades de las cargas del evento JSON emitidas por Azure Container Registry, consulte la referencia del esquema de webhook:

Referencia de esquema de webhook de Azure Container Registry

Eventos de Event Grid

Además de los eventos de webhook de registro nativos descritos en este artículo, Azure Container Registry puede emitir eventos a Event Grid:

Guía de inicio rápido: Envío de eventos del registro de contenedor a Event Grid