Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque vous créez un abonnement à un événement Event Grid pour un point de terminaison webhook, Event Grid doit confirmer que vous en êtes propriétaire avant de livrer des événements. Si cette poignée de main de validation ne se termine pas, la création d’abonnement échoue. Cet article vous aide à identifier pourquoi la poignée de main échoue et comment y remédier.
Symptoms
Lorsque vous créez un abonnement à un événement, vous voyez un message d’erreur similaire au texte suivant :
The attempt to validate the provided endpoint https://your-endpoint-here failed. For more details, visit https://aka.ms/esvalidation
L’erreur indique qu’Event Grid n’a pas pu compléter la validation avec votre point de terminaison webhook, donc Event Grid ne crée pas l’abonnement.
Cause
Event Grid exige que vous prouviez la propriété d’un point de terminaison webhook avant qu’il ne commence à livrer des événements. Cette exigence empêche un utilisateur malveillant de saturer un point de terminaison avec des événements. L’erreur de validation apparaît lorsque la poignée de main entre Event Grid et votre point de terminaison ne réussit pas. Les causes courantes sont les suivantes :
- Votre point de terminaison ne renvoie pas en retour le code de validation pour la négociation initiale synchrone, ou ne renvoie pas
200 OKpour la négociation initiale asynchrone (manuelle). - Un pare-feu, Azure Application Gateway ou pare-feu d’applications web (WAF) devant votre point de terminaison bloque la requête de validation et renvoie
403 (Forbidden). - Votre point de terminaison utilise le schéma CloudEvents v1.0 mais ne répond pas à la demande de validation HTTP OPTIONS .
- Votre point de terminaison utilise un certificat auto-signé, qu’Event Grid ne prend pas en charge pour la validation.
Pour une description complète de la poignée de main de validation, voir Validation de terminaison avec schéma d’événements Event Grid et validation de terminaison en utilisant le schéma CloudEvents.
Solution 1 : Tester la poignée de main de validation pour un abonnement à un schéma Event Grid
Envoyez un exemple d’SubscriptionValidationEvent à votre webhook et confirmez la réponse :
- Envoyez une requête HTTP POST à l’URL de votre webhook avec un corps de requête d’exemple
SubscriptionValidationEventen utilisant curl ou un outil similaire. - Si votre webhook utilise la poignée de main synchrone, vérifiez que votre webhook renvoie la
validationCoderéponse dans la réponse. Vous devez renvoyer unHTTP 200 OKcode de statut. Event Grid ne reconnaîtHTTP 202 Acceptedpas comme une réponse valide, et la requête doit être complétée dans les 30 secondes. - Si votre webhook met en œuvre la poignée de main asynchrone (manuelle), vérifiez que votre point de terminaison renvoie
200 OK. Ensuite, complétez la poignée de main en envoyant une requête GET auxvalidationUrldonnées dans l’événement dans les 10 minutes. L’URL de validation utilise le port 553, donc mettez à jour vos règles de pare-feu si ce port est bloqué.
Voici un exemple SubscriptionValidationEvent de charge utile JSON que vous pouvez envoyer :
[
{
"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"
}
]
Voici la réponse positive attendue :
{
"validationResponse": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}
Voici la commande curl équivalente pour valider un abonnement webhook utilisant le schéma d’événements 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}
Pour en savoir plus, voir Validation des terminaux avec schéma d’événements de la grille d’événements.
Solution 2 : Supprimer les règles du pare-feu ou des WAF qui bloquent la requête de validation
Si votre webhook renvoie 403 (Forbidden), vérifiez s’il se trouve derrière une Azure Application Gateway ou un pare-feu d’applications web. Si oui, désactivez les règles de pare-feu suivantes et refaites le HTTP POST :
- 920300 (En-tête Accept manquant dans la requête)
- 942430 (Détection d’anomalies de caractères SQL restreints (args) : nombre de caractères spéciaux dépassé (12))
- 920230 (Détection d’encodage de plusieurs URL)
- 942130 (attaque par injection SQL : tautologie SQL détectée)
- 931130 (Attaque possible d’inclusion de fichier à distance (RFI) : référence ou lien hors domaine)
Solution 3 : Valider un abonnement à un schéma CloudEvents
Si votre abonnement utilise le schéma CloudEvents v1.0, Event Grid utilise la protection contre les abus CloudEvents au lieu de l’événement de validation de l’abonnement. Votre point de terminaison doit répondre à la méthode HTTP OPTIONS et retourner l’en-tête WebHook-Allowed-Origin . Pour en savoir plus, voir Validation du point de terminaison en utilisant le schéma CloudEvents.
Contenu connexe
Si vous avez besoin de plus d’aide, posez votre question sur la page Microsoft Q&A pour Event Grid ou ouvrez un ticket de support.