SignedPolicy

Overview

SignedPolicy는 사용자의 권한과 시간을 제한하는 모듈입니다. 예를 들어, 운영자는 인가된 사용자에게 60초 동안 접근할 수 있는 RTMP URL을 배포하고 RTMP 전송을 1시간으로 제한할 수 있습니다. 제공된 URL은 60초 후에 파기되며 전송은 1시간 후에 자동으로 중지됩니다. SignedPolicy URL을 제공받은 사용자는 제공된 URL 이외의 리소스에 접근할 수 없습니다. 이는 SignedPolicy URL이 인증되었기 때문입니다.

SignedPolicy URL은 아래와 같이 스트리밍 URL의 쿼리 스트링에 Policy와 Signature가 포함된 형태로 구성됩니다. OvenMediaEngine 설정에서 SignedPolicy가 활성화된 경우 서명이 없거나 유효하지 않은 서명이 있는 URL에 대한 접근은 허용되지 않습니다. Signature는 HMAC-SHA1을 사용하여 서명을 제외한 모든 URL을 인증합니다.

scheme://domain.com:port/app/stream?policy=<>&signature=<>

Policy

Policy는 JSON 형식이며 다음 속성을 제공합니다.

{
    "url_activate":1399711581,                                    
    "url_expire":1399721581,                                    
    "stream_expire":1399821581,                                    
    "allow_ip":"192.168.100.5/32",
    "real_ip":"111.111.111.111/32"
}

Key
Value
Description

url_expire

(Required)

<Number> Milliseconds since unix epoch

URL 만료 시간

만료 시간 이후의 요청은 거부합니다.

url_activate

(Optional)

<Number> Milliseconds since unix epoch

URL 활성화 시간

활성화 시간 이전의 요청은 거부합니다.

stream_expire

(Optional)

<Number> Milliseconds since unix epoch

스트림 만료 시간

시간이 만료되면 전송 및 재생이 중지됩니다.

allow_ip

(Optional)

<String> IPv4 CIDR

허용되는 IP 주소 범위

서버에 연결된 클라이언트의 IP 주소를 확인합니다.

real_ip (Optional)

<String> IPv4 CIDR

허용되는 IP 주소 범위

프록시 서버가 전달한 클라이언트의 IP 주소를 확인합니다.

circle-info

url_expire는 URL이 유효한 시간을 의미하므로 URL이 만료되기 전에 접속하면 계속 사용할 수 있으며 시간이 만료되어도 이미 접속된 세션은 삭제되지 않습니다. 그러나 stream_expire는 재생 중이더라도 시간이 만료되면 강제로 세션을 종료합니다.

circle-info

real_ip가 정책에 있는 경우 OME는 다음 순서로 값을 검색하고 확인합니다.

  1. X-REAL-IP 헤더의 값

  2. X-FORWARDED-FOR의 첫 번째 항목 값

  3. 실제로 연결한 클라이언트의 IP

Signature

Signature는 서명 쿼리 스트링을 제외한 모든 URL을 HMAC-SHA1 인코딩하여 생성됩니다. 생성된 Signature는 Base64URLarrow-up-right을 사용하여 인코딩되며 기존 URL의 쿼리 스트링으로 포함됩니다.

triangle-exclamation
triangle-exclamation
triangle-exclamation

Configuration

SignedPolicy를 활성화하려면 <VirtualHost> 아래의 Server.xml에 다음 <SignedPolicy> 설정을 추가해야 합니다.

Key
Description

PolicyQueryKeyName

정책(policy) 값을 가리키는 URL의 쿼리 스트링 키 이름입니다.

SignatureQueryKeyName

서명(signature) 값을 가리키는 URL의 쿼리 스트링 키 이름입니다.

SecretKey

HMAC-SHA1으로 인코딩할 때 사용되는 비밀 키입니다.

Enables

SignedPolicy를 활성화할 프로바이더 및 퍼블리셔의 목록입니다. 현재 프로바이더 중에서는 rtmp를 지원하며, 퍼블리셔 중에서는 WebRTC, LLHLS, Thumbnail을 지원합니다.

Make SignedPolicy URL with a script

SignedPolicy URL을 쉽게 생성할 수 있는 스크립트를 제공합니다. 스크립트는 아래 경로에서 찾을 수 있습니다.

스크립트 사용 방법은 다음과 같습니다:

예를 들어, 다음과 같이 사용할 수 있습니다:

Make SignedPolicy URL manually

circle-check

Encoding policy

정책을 URL에 포함하려면 Base64URLarrow-up-right로 인코딩해야 합니다.

Base64URL로 인코딩된 Policy는 기존 스트리밍 URL에 쿼리 스트링으로 추가됩니다. (쿼리 스트링 키는 Server.xml에 설정되어 있습니다.)

Signature

Signature는 정책을 포함한 전체 URL을 HMAC(SHA-1) 방식으로 해싱하여 Base64URL로 인코딩한 후 쿼리 스트링에 포함시킵니다.

HMAC-SHA1을 사용하여 비밀 키(예제에서는 1kU^b6)와 위의 URL을 사용하여 해시를 생성합니다.

서명 쿼리 스트링으로 포함하면(쿼리 스트링 키는 Server.xml에 설정됨) 최종적으로 다음과 같은 SignedPolicy URL이 생성됩니다.

Usage examples

Applying SignedPolicy in OBS

스크립트를 사용하여 SignedPolicy URL을 생성합니다.

아래 예와 같이 "app"을 기준으로 URL을 분리하고, 스트림 하위의 모든 부분을 Stream Key(스트림 키)에 입력합니다.

Last updated