CloudEvents 스키마를 사용한 엔드포인트 유효성 검사

웹후크는 Azure Event Grid에서 이벤트를 수신하는 여러 가지 방법 중 하나입니다. 새 이벤트가 준비되면 Event Grid 서비스는 요청 본문에 이벤트 정보가 포함된 HTTP 요청을 구성된 엔드포인트로 게시합니다.

웹후크를 지원하는 여러 다른 서비스와 마찬가지로, Event Grid를 사용하려면 해당 엔드포인트로 이벤트 제공을 시작하기 전에 웹후크 엔드포인트에 대한 소유권을 증명해야 합니다. 이 요구 사항으로 인해 악의적인 사용자가 엔드포인트에서 과도한 이벤트를 발생하는 일이 방지됩니다.

CloudEvents v1.0을 사용한 엔드포인트 유효성 검사

CloudEvents v1.0은 HTTP OPTIONS 메서드를 사용하여 자체 악용 방지 의미 체계를 구현합니다. 출력에 CloudEvents 스키마를 사용하는 경우, Event Grid는 Event Grid 유효성 검사 이벤트 메커니즘 대신 CloudEvents v1.0 악용 방지를 사용합니다.

CloudEvent v1.0 남용 보호

임의의 HTTP 엔드포인트에 대한 알림 등록 및 제공을 허용하는 모든 시스템은 잠재적으로 남용될 수 있으므로, 누군가가 악의적이거나 실수로 이러한 요청을 예상하지 못하는 시스템의 주소와 등록 당사자가 해당 등록을 수행할 권한이 없는 시스템의 주소를 등록할 수 있습니다. 극단적인 경우, 알림 인프라를 악용해 임의의 웹 사이트에 대한 서비스 거부 공격을 시작할 수 있습니다.

보낸 사람이 이런 식으로 남용되는 것을 방지하려면 합법적인 제공 대상이 알림 제공에 동의한다는 의사를 표시해야 합니다.

제공 계약은 다음과 같은 유효성 검사 핸드셰이크를 통해 실현됩니다. 핸드셰이크는 등록 시점에 즉시 실행될 수도 있고, 제공 직전의 "실행 전" 요청으로 실행될 수도 있습니다.

핸드셰이크는 인증 또는 권한 부여 컨텍스트를 설정하는 것을 목표로 하지 않는다는 것을 이해해야 합니다. 이는 트래픽을 예상하지 않는 대상에 대한 푸시가 보낸 사람에게 언급되지 못하도록 보호하는 데에만 사용됩니다. 이 사양에서는 권한 부여 모델을 사용하도록 규정하고 있지만, 해당 웹 사이트가 액세스 제어를 구현하지 않아 Authorization 헤더를 무시하는 경우 이 규정만으로는 임의의 웹 사이트를 원치 않는 트래픽으로부터 보호하기에 충분하지 않습니다.

제공 대상은 남용 보호 기능을 지원해야 합니다. 대상이 해당 기능을 지원하지 않는 경우, 보낸 사람은 대상으로 전혀 보내지 않거나, 매우 낮은 요청 속도로만 보내도록 선택할 수 있습니다.

유효성 검사 요청

유효성 검사 요청은 HTTP OPTIONS 메서드를 사용합니다. 요청은 등록되는 정확한 리소스 대상 URI로 전송됩니다. 유효성 검사 요청을 통해 보낸 사람은 대상에 알림을 보낼 수 있는 권한을 요청하고, 원하는 요청 속도(분당 요청 수)를 선언할 수 있습니다. 제공 대상은 권한 문과 허용된 요청 속도로 응답합니다. 다음은 유효성 검사 요청에 포함할 헤더 필드 중 몇 가지입니다.

WebHook-Request-Origin

WebHook-Request-Origin 헤더는 이 보낸 사람으로부터 알림을 보내기 위한 유효성 검사 요청 권한에 포함되어야 하며, 예를 들어 eventemitter.example.com과 같이 발신 시스템을 식별하는 DNS(Domain Name System) 식을 포함합니다. 이 값은 개별 호스트가 아닌 특정 시스템을 대신하여 작동하는 모든 보낸 사람 인스턴스를 요약해서 식별하기 위한 것입니다.

핸드셰이크 후 권한이 부여된 경우 보낸 사람은 각 제공 요청에 대해 Origin 요청 헤더를 사용해야 하며, 이 값은 헤더의 값과 일치해야 합니다.

예시:

WebHook-Request-Origin: eventemitter.example.com

유효성 검사 응답

제공 대상이 이벤트 제공을 허용하는 경우에만 WebHook-Allowed-OriginWebHook-Allowed-Rate 헤더를 포함하여 요청에 회신해야 합니다. 제공 대상이 콜백을 통해 권한을 부여하기로 선택하는 경우 응답 헤더를 보류합니다.

제공 대상이 이벤트 제공을 허용하지 않거나 이벤트 제공을 기대하지 않지만 그럼에도 불구하고 HTTP OPTIONS 메서드를 처리하는 경우, 기존 응답은 동의로 해석되어서는 안 되므로 핸드셰이크는 상태 코드를 사용할 수 없습니다. 그렇지 않고 제공 대상이 HTTP OPTIONS 메서드를 처리하지 않는 경우 OPTIONS가 지원되지 않는 것처럼 HTTP 상태 코드 405로 응답해야 합니다.

OPTIONS 응답에는 POST 메서드가 허용됨을 나타내는 Allow 헤더가 포함되어야 합니다. 다른 메서드도 리소스에 허용될 수 있지만, 해당 메서드의 함수는 이 사양의 범위를 벗어납니다.

WebHook-Allowed-Origin

제공 대상이 원본 서비스에서 알림 제공에 동의하는 경우 WebHook-Allowed-Origin 헤더가 반환되어야 합니다. 해당 값은 WebHook-Request-Origin 헤더에 제공된 원본 이름 또는 단일 별표 문자('*')여야 하며, 이는 제공 대상이 모든 원본의 알림을 지원함을 나타냅니다.

WebHook-Allowed-Origin: eventemitter.example.com

또는

WebHook-Request-Origin: *

Important

남용 보호에 대한 자세한 내용은 이벤트 제공 사양을 위한 HTTP 1.1 웹후크의 남용 보호를 참조하세요.

이벤트 구독 유효성 검사 문제 해결 방법은 이벤트 구독 유효성 검사 문제 해결 문서를 참조하세요.