Risoluzione dei problemi di validazione dell'abbonamento Griglia di eventi di Azure

Quando crei un abbonamento a eventi Event Grid per un endpoint webhook, Event Grid deve confermare di possedere l'endpoint prima che consegni gli eventi. Se quella stretta di mano di validazione non si completa, la creazione dell'abbonamento fallisce. Questo articolo ti aiuta a capire perché la stretta di mano fallisce e come risolverla.

Symptoms

Quando crei un abbonamento a un evento, vedi un messaggio di errore simile al seguente testo:

The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation

L'errore indica che Event Grid non è riuscito a completare la stretta di mano di validazione con il tuo endpoint webhook, quindi Event Grid non crea l'abbonamento.

Cause

Event Grid richiede di dimostrare la proprietà di un endpoint webhook prima che inizi a consegnare eventi. Questo requisito impedisce a un utente malintenzionato di inondare un endpoint di eventi. L'errore di validazione appare quando la stretta di mano tra Event Grid e il tuo endpoint non ha successo. Le cause più comuni includono:

  • Il tuo endpoint non rimanda il codice di convalida per l’handshake sincrono oppure non restituisce 200 OK per l’handshake asincrono (manuale).
  • Un firewall, gateway applicazione di Azure o un firewall per applicazioni web (WAF) davanti al tuo endpoint bloccano la richiesta di validazione e restituiscono 403 (Forbidden).
  • Il tuo endpoint utilizza lo schema CloudEvents v1.0 ma non risponde alla richiesta di validazione HTTP OPTIONS .
  • Il tuo endpoint utilizza un certificato autofirmato, che Event Grid non supporta per la validazione.

Per una descrizione completa della handshake di validazione, vedi Validazione degli endpoint con schema degli eventi Event Grid e validazione degli endpoint utilizzando lo schema CloudEvents.

Soluzione 1: Test dell'handshake di convalida per una sottoscrizione con schema Event Grid

Invia un esempio di SubscriptionValidationEvent al tuo webhook e conferma la risposta:

  1. Invia una richiesta HTTP POST al tuo URL webhook con un corpo di richiesta di esempio SubscriptionValidationEvent usando curl o uno strumento simile.
  2. Se il tuo webhook implementa l'handshake sincrono, verifica che restituisca validationCode nella risposta. Devi restituire un HTTP 200 OK codice di stato. Event Grid non riconosce HTTP 202 Accepted come risposta valida e la richiesta deve essere completata entro 30 secondi.
  3. Se il tuo webhook implementa la stretta di mano asincrona (manuale), verifica che il tuo endpoint restituisca 200 OK. Poi completa la stretta di mano inviando una richiesta GET a validationUrl nei dati dell'evento entro 10 minuti. L'URL di validazione usa la porta 553, quindi aggiorna le regole del firewall se quella porta è bloccata.

Ecco un esempio SubscriptionValidationEvent di payload JSON che puoi inviare:

[
  {
    "id": "aaaa0000-bb11-2222-33cc-444444dddddd",
    "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "subject": "",
    "data": {
      "validationCode": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
    },
    "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
    "eventTime": "2018-01-25T22:12:19.4556811Z",
    "metadataVersion": "1",
    "dataVersion": "1"
  }
]

Ecco la risposta attesa e positiva:

{
  "validationResponse": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}

Ecco il comando curl equivalente per convalidare un abbonamento webhook che utilizza lo schema degli eventi Event Grid:

curl -X POST -d '[{"id": "aaaa0000-bb11-2222-33cc-444444dddddd","topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","subject": "","data": {"validationCode": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"},"eventType": "Microsoft.EventGrid.SubscriptionValidationEvent","eventTime": "2018-01-25T22:12:19.4556811Z", "metadataVersion": "1","dataVersion": "1"}]' -H 'Content-Type: application/json' https://{your-webhook-url.com}

Per saper di più, consulta Validazione degli endpoint con schema degli eventi della Griglia Eventi.

Soluzione 2: Rimuovere le regole firewall o WAF che bloccano la richiesta di validazione

Se il tuo webhook restituisce 403 (Forbidden), verifica se è protetto da gateway applicazione di Azure o da un web application firewall. Se lo è, disabilita le seguenti regole del firewall e rifai il HTTP POST:

  • 920300 (Richiesta senza intestazione Accept)
  • 942430 (Rilevamento di anomalie di caratteri SQL limitati (args): numero di caratteri speciali superato (12))
  • 920230 (Rilevata codifica multipla URL)
  • 942130 (attacco di iniezione SQL: tautologia SQL rilevata)
  • 931130 (Possibile attacco di inclusione remota di file (RFI): riferimento o link fuori dominio)

Soluzione 3: Valida un abbonamento allo schema CloudEvents

Se il tuo abbonamento utilizza lo schema CloudEvents v1.0, Event Grid utilizza la protezione contro gli abusi di CloudEvents invece dell'evento di validazione dell'abbonamento. Il tuo endpoint deve rispondere al metodo HTTP OPTIONS e restituire l'intestazione WebHook-Allowed-Origin. Per saperne di più, consulta Validazione degli endpoint utilizzando lo schema CloudEvents.

Se hai bisogno di ulteriore assistenza, poni la tua domanda nella pagina Microsoft Q&A per Event Grid oppure apri un ticket di supporto.