Azure Event Grid abonelik doğrulama hatalarını giderme

Webhook uç noktası için Event Grid olay aboneliği oluşturduğunuzda, Event Grid olayı teslim etmeden önce uç noktaya sahip olduğunuzu doğrulamalıdır. Eğer o doğrulama el sıkışması tamamlanmazsa, abonelik oluşturma başarısız olur. Bu makale, el sıkışmanın neden başarısız olduğunu ve nasıl çözüleceğini anlamanıza yardımcı olur.

Symptoms

Bir etkinlik aboneliği oluşturduğunuzda, aşağıdaki metne benzer bir hata mesajı görürsünüz:

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

Hata, Event Grid'in doğrulama el sıkışmasını webhook uç noktanızla tamamlayamadığını, bu yüzden aboneliği oluşturmadığını gösteriyor.

Cause

Event Grid, olayları teslim etmeye başlamadan önce bir webhook uç noktasının sahipliğini kanıtlamanızı gerektirir. Bu gereklilik, kötü niyetli bir kullanıcının bir uç noktayı olaylarla doldurmasını engeller. Doğrulama hatası, Event Grid ile uç noktanız arasındaki el sıkışma başarılı olmadığında ortaya çıkar. Yaygın nedenler şunlardır:

  • Uç noktanız, eşzamanlı el sıkışması için doğrulama kodunu geri döndürmüyor veya eşzamansız (manuel) el sıkışması için 200 OK döndürmüyor.
  • Uç noktanızın önündeki bir güvenlik duvarı, Azure Application Gateway veya web uygulama güvenlik duvarı (WAF) doğrulama talebini engeller ve döndürür403 (Forbidden).
  • Uç noktanız CloudEvents v1.0 şemasını kullanır ancak HTTP OPTIONS doğrulama isteğine yanıt vermez.
  • Uç noktanız kendi kendine imzalanmış bir sertifika kullanır, ancak Event Grid doğrulama için bunu desteklemez.

Doğrulama el sıkışmasının tam açıklaması için Event Grid olay şeması ile Uç nokta doğrulaması ve CloudEvents şeması kullanılarak Uç nokta doğrulaması bölümlerine bakınız.

Çözüm 1: Event Grid şema aboneliği için doğrulama el sıkışmasını test edin

Webhook'unuza örnek bir SubscriptionValidationEvent gönderin ve cevabı onaylayın:

  1. Curl veya benzer bir araç kullanarak örnek istek gövdesi ile webhook URL'nize SubscriptionValidationEvent HTTP POST isteği gönderin.
  2. Webhook'unuz eşzamanlı el sıkışma işlemini uyguluyorsa, webhook'unuzun yanıtta validationCode döndürdüğünü doğrulayın. Bir HTTP 200 OK durum kodu döndürmeniz gerekir. Event Grid geçerli bir yanıt olarak tanımıyor HTTP 202 Accepted ve talebin 30 saniye içinde tamamlanması gerekiyor.
  3. Webhook’unuz asenkron (manuel) el sıkışmasını kullanıyorsa, uç noktanızın 200 OK döndürdüğünü doğrulayın. Sonra 10 dakika içinde olay verilerine bir GET talebi validationUrl göndererek el sıkışmayı tamamlayın. Doğrulama URL'si port 553'ü kullanıyor, bu yüzden o port engellenirse güvenlik duvarı kurallarınızı güncelleyin.

İşte gönderebileceğiniz örnek SubscriptionValidationEvent bir JSON yükü:

[
  {
    "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"
  }
]

İşte beklenen başarılı yanıt:

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

İşte Event Grid olay şemasını kullanan bir webhook aboneliğini doğrulamak için eşdeğer curl komutu:

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}

Daha fazla bilgi için Event Grid olay şeması ile Uç nokta doğrulaması bölümüne bakınız.

Çözüm 2: Doğrulama talebini engelleyen güvenlik duvarı veya WAF kurallarını kaldırın

Webhook'unuz yanıt olarak 403 (Forbidden) döndürüyorsa, Azure Application Gateway veya web uygulaması güvenlik duvarının arkasında olup olmadığını denetleyin. Eğer öyleyse, aşağıdaki güvenlik duvarı kurallarını devre dışı bırakın ve HTTP POST'u tekrar yapın:

  • 920300 (İstekte kabul üst bilgisi eksik)
  • 942430 (Kısıtlı SQL karakter anomalisi algılama (args): özel karakter sayısı aşılmış (12))
  • 920230 (Birden çok URL kodlama algılandı)
  • 942130 (SQL enjeksiyon saldırısı: SQL totolojisi tespit edildi)
  • 931130 (Olası uzaktan dosya dahil etme (RFI) saldırısı: alan dışı referans veya bağlantı)

Çözüm 3: CloudEvents şema aboneliğini doğrulama

Aboneliğiniz CloudEvents v1.0 şemasını kullanıyorsa, Event Grid abonelik doğrulama etkinliği yerine CloudEvents kötüye kullanım korumasını kullanır. Uç noktanız HTTP OPTIONS yöntemine yanıt vermeli ve başlığı WebHook-Allowed-Origin geri göndermelidir. Daha fazla bilgi için CloudEvents şeması kullanılarak uç nokta doğrulaması bölümüne bakınız.

Daha fazla yardıma ihtiyacınız varsa, sorularınızı Microsoft Soru-Cevap bölümünde sorun. Event Grid için bir sayfa veya destek bileti açın.