Felsök fel vid validering av Azure Event Grid-prenumerationer

När du skapar en Event Grid-eventprenumeration för en webhook-endpoint måste Event Grid bekräfta att du äger endpointen innan den levererar händelser. Om valideringshandshake inte slutförs misslyckas prenumerationsskapandet. Den här artikeln hjälper dig att identifiera varför handslaget misslyckas och hur du kan åtgärda det.

Symptoms

När du skapar en händelseprenumeration ser du ett felmeddelande liknande följande text:

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

Felet indikerar att Event Grid inte kunde slutföra valideringshandshake med din webhook-endpoint, så Event Grid skapar inte prenumerationen.

Cause

Event Grid kräver att du bevisar äganderätt till en webhook-endpoint innan den börjar leverera händelser. Detta krav förhindrar att en illvillig användare överväldigar en endpoint med händelser. Valideringsfelet uppstår när handshake mellan Event Grid och din endpoint inte lyckas. Vanliga orsaker är bland annat:

  • Din slutpunkt skickar inte tillbaka valideringskoden för den synkrona handskakningen, eller returnerar inte 200 OK för den asynkrona (manuella) handskakningen.
  • En brandvägg, Azure Application Gateway eller web application firewall (WAF) framför din endpoint blockerar valideringsförfrågan och returnerar 403 (Forbidden).
  • Din endpoint använder CloudEvents v1.0-schemat men svarar inte på HTTP OPTIONS-valideringsförfrågan.
  • Din endpoint använder ett självsignerat certifikat, vilket Event Grid inte stödjer för validering.

För en fullständig beskrivning av valideringshandshake, se Endpoint validation with Event Grid event schema och Endpoint validation by using CloudEvents schema.

Lösning 1: Testa valideringshandshake för en Event Grid-schemaprenumeration

Skicka ett exempel på SubscriptionValidationEvent till din webhook och bekräfta svaret:

  1. Skicka en HTTP POST-förfrågan till din webhook-URL med en exempelförfrågan SubscriptionValidationEvent genom att använda curl eller ett liknande verktyg.
  2. Om din webhook implementerar den synkrona handskakningen, kontrollera att din webhook returnerar svaret validationCode . Du måste returnera en HTTP 200 OK statuskod. Event Grid känner inte igen HTTP 202 Accepted som ett giltigt svar, och förfrågan måste slutföras inom 30 sekunder.
  3. Om din webhook implementerar den asynkrona (manuella) handskakningen, kontrollera att din slutpunkt returnerar 200 OK. Slutför sedan handslaget genom att skicka en GET-förfrågan till validationUrl i händelsedata inom 10 minuter. Validerings-URL:en använder port 553, så uppdatera dina brandväggsregler om den porten är blockerad.

Här är ett exempel SubscriptionValidationEvent på JSON-payload som du kan skicka:

[
  {
    "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är är det förväntade lyckade svaret:

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

Här är det motsvarande curl-kommandot för att validera en webhook-prenumeration som använder Event Grid-händelseschemat:

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}

För att lära dig mer, se Endpoint validation with Event Grid event schema.

Lösning 2: Ta bort brandväggs- eller WAF-regler som blockerar valideringsförfrågan

Om din webhook returnerar 403 (Forbidden), kontrollera om den ligger bakom Azure Application Gateway eller en webbapplikationsbrandvägg. Om det är så, inaktivera följande brandväggsregler och gör HTTP POST igen:

  • 920300 (Begäran saknar ett accepthuvud)
  • 942430 (Begränsad SQL-teckenavvikelsedetektering (args): antal specialtecken överskridna (12))
  • 920230 (flera URL-kodningar har identifierats)
  • 942130 (SQL-injektionsattack: SQL-tautologi upptäckt)
  • 931130 (Möjlig fjärrfilinkludering (RFI)-attack: referens eller länk utanför domänen)

Lösning 3: Validera ett CloudEvents-schemaabonnemang

Om din prenumeration använder CloudEvents v1.0-schemat använder Event Grid CloudEvents missbruksskydd istället för prenumerationsvalideringseventet. Din endpoint måste hantera metoden HTTP OPTIONS och returnera WebHook-Allowed-Origin-huvudet. För att lära dig mer, se Endpoint validation genom att använda CloudEvents-schemat.

Om du behöver mer hjälp, ställ din fråga i Microsoft Q& En sida för Event Grid eller öppna ett supportärende.