For the complete documentation index, see llms.txt. This page is also available as Markdown.

자체 호스팅 서버 보안 강화

네트워크 격리, 인증, TLS, 사용자 지정 Python 제한, URL 이미지 입력에 대한 SSRF 제어를 사용해 자체 호스팅 Roboflow 추론 서버를 보호하세요.

자체 하드웨어에서 Inference를 실행할 때, 보안 상태는 귀하의 책임입니다. 로컬에 배포된 서버는 기본적으로 인증, 암호화 또는 네트워크 제한을 강제하지 않습니다. 이 서버는 안전하게 노출되도록 만들어진 것이 아니라 쉽게 시작할 수 있도록 만들어졌습니다. 기본 설정으로는 모델 실행 및 워크플로 실행 요청을 포함하여 서버에 도달하는 모든 요청에 응답합니다.

이 페이지에서는 자체 호스팅 배포가 로컬 개발 트래픽을 넘어서는 작업을 처리하기 전에 검토해야 하는 다섯 가지 제어 방식을 다룹니다. 이들은 상호 보완적이므로 환경이 허용하는 한 많이 적용하세요.

1. 네트워크 액세스 제한

가장 효과적인 단일 제어 방식은 애초에 서버를 노출하지 않는 것입니다. Inference는 기본적으로 포트 9001 에서 수신 대기하며 "신뢰할 수 있는" 네트워크라는 개념이 없습니다. 해당 포트에 도달할 수 있는 모든 대상이 이를 사용할 수 있습니다.

  • localhost에 바인딩 동일한 호스트의 프로세스만 필요로 하는 경우에 사용합니다. 예를 들어 컨테이너 포트를 다음과 같이 게시합니다. 127.0.0.1:9001:9001 대신 9001:9001.

  • 프라이빗 네트워크 또는 VPC에 유지 하고, 공용 IP 대신 VPN, SSH 터널 또는 서비스 메시를 통해 접근하세요.

  • 호스트 및 클라우드 방화벽 또는 보안 그룹 사용 포트를 허용하도록 9001 실제로 필요한 특정 클라이언트에서만 허용하세요.

  • 앞에 리버스 프록시 배치 (nginx, Traefik, Caddy 또는 클라우드 로드 밸런서)를 사용하세요. 더 광범위하게 노출해야 하는 경우에 해당합니다. 이렇게 하면 TLS, 속도 제한 및 액세스 로깅을 추가할 단일 지점을 확보할 수 있습니다.

인증과 TLS를 구성하지 않은 상태에서 추론 포트를 공용 인터넷에 직접 게시하지 마세요.

2. 인증 강제

기본적으로 자체 호스팅 서버는 아니요 요청에 API 키를 요구합니다. 플랫폼에서 데이터를 가져올 때 Roboflow API 수준에서 이루어지는 인증 외에는 서버 자체에 추가 보안이 없습니다. 인증을 켜려면 다음을 설정하세요. WORKSPACES_WHITELISTED_FOR_LOCAL_DEPLOYMENT 서버 사용이 허용된 Roboflow 워크스페이스 슬러그의 쉼표로 구분된 목록으로 설정합니다:

docker run --rm -p 9001:9001 \
  -e WORKSPACES_WHITELISTED_FOR_LOCAL_DEPLOYMENT=your-workspace-url-slug,another-workspace-url-slug \
  roboflow/roboflow-inference-server-cpu:latest

이를 설정하면 서버가 인가 미들웨어를 설치합니다. 모든 추론 및 워크플로 요청에는 다음이 포함되어야 합니다. api_key (쿼리 매개변수 또는 JSON 본문)가 필요하며, 이는 Roboflow를 통해 허용 목록에 있는 워크스페이스 중 하나로 확인되어야 합니다. 키가 없거나, 유효하지 않거나, 허용 목록에 없는 요청은 다음과 함께 거부됩니다. 401 Unauthorized.

API 키 검사가 적용되지 않는 항목. 서버의 사용성과 관찰 가능성을 유지하기 위해 소수의 미인증 엔드포인트는 열어 둡니다: /, /docs, /redoc, /info, /healthz, /readiness, /metrics, /openapi.json, 그리고 정적 자산 (/static/..., /_next/...). 다음을 취급하세요 /info/metrics 서버에 도달할 수 있는 누구나 읽을 수 있는 정보로 간주하고, 네트워크 제한(제어 1)을 사용하여 그 대상을 제한하세요.

자체 인증을 사용하세요. 내장 검사는 인가를 Roboflow 워크스페이스에 연결합니다. 자체 ID 모델이 있다면 서버 앞에 리버스 프록시 또는 인증 미들웨어를 배치하여 OAuth/OIDC, mTLS, 서명된 헤더, API 게이트웨이 또는 조직에서 이미 사용하는 방식을 적용하고, 인증된 트래픽만 포트 9001로 통과시키세요. 두 가지 접근 방식은 함께 사용할 수 있습니다.

3. 네트워크에서 요구하는 경우 TLS 활성화

내장 API 키 검사는 요청에 자격 증명을 전송합니다. 이러한 요청이 완전히 제어하지 않는 네트워크를 통과한다면 연결을 암호화해야 하며, 그렇지 않으면 키와 페이로드가 평문으로 노출됩니다.

두 가지 옵션이 있습니다:

  • 리버스 프록시 또는 로드 밸런서에서 TLS 종료 서버 앞에서 수행합니다. 이미 이를 운영 중인 경우 일반적인 선택입니다.

  • 서버에서 직접 HTTPS 제공 인증서와 키를 마운트하고 다음을 설정하여 수행합니다. ENABLE_HTTPS=true. 다음을 참조하세요 HTTPS를 통한 Inference 제공 전체 가이드 및 다음을 통한 상호 TLS(클라이언트 인증서)에 대해 알아보세요. SSL_CA_CERTS.

순수하게 로컬이며 루프백 전용인 트래픽의 경우(제어 1, 다음에 바인딩됨: 127.0.0.1) TLS는 선택 사항입니다. 요청이 신뢰할 수 없는 네트워크를 통해 호스트를 벗어나는 모든 경우 TLS가 필요합니다.

4. 워크플로에서 사용자 지정 Python 실행 비활성화

워크플로에는 다음을 포함할 수 있습니다 사용자 지정 Python 블록: 서버 프로세스 내에서 실행되는 임의의 Python 코드입니다. 이는 강력한 기능이지만, 서버에 워크플로를 제출할 수 있는 모든 사용자가 호스트에서 임의 코드를 실행할 수 있음을 의미합니다. 신뢰할 수 없는 클라이언트가 접근할 수 있는 서버에서는 원격 코드 실행에 해당합니다.

이는 다음으로 제어됩니다 ALLOW_CUSTOM_PYTHON_EXECUTION_IN_WORKFLOWS.

설정
효과

True (현재 기본값)

워크플로에서 사용자 지정 Python 블록을 정의하고 실행할 수 있습니다.

False

사용자 지정 Python 블록은 거부되며, 다른 모든 워크플로 기능은 계속 작동합니다.

워크플로가 사용자 지정 Python에 의존하지 않는 경우 다음으로 설정하세요. False:

5. URL에서의 이미지 가져오기 제한(SSRF)

Inference는 요청에 제공된 URL에서 직접 이미지를 로드할 수 있습니다 ({"image": {"type": "url", "value": "https://..."}}). 서버가 호출자가 제어하는 URL을 가져올 때마다 호출자는 서버가 자신을 대신해 요청하도록 유도할 수 있습니다. 이를 다음과 같은 공격 유형이라고 합니다. 서버 측 요청 위조(SSRF). 내부 네트워크에 직접 접근할 수 없는 사용자가 서버에 다음 항목을 가져오도록 요청할 수 있습니다. 예:

  • http://169.254.169.254/latest/meta-data/, 인스턴스 자격 증명을 반환할 수 있는 클라우드 메타데이터 서비스(AWS, GCP, Azure).

  • http://127.0.0.1:9001/... 및 기타 localhost 서비스: 관리자 패널, 데이터베이스 또는 Inference 서버 자체의 미인증 엔드포인트.

  • http://10.0.0.5/, http://192.168.1.1/, 그리고 경계 뒤에 있는 기타 프라이빗(RFC1918), 링크 로컬, CGNAT 또는 IPv6 ULA 호스트.

공개적으로 보이는 호스트 이름이 공개 대상이라는 증거는 아닙니다. 프라이빗 IP로 확인되거나, 해당 IP로 리디렉션되거나, 다음을 사용할 수 있습니다. DNS 리바인딩 (검증 검사에는 공용 IP로 확인된 후 실제 연결에는 프라이빗 IP로 확인됨). Inference는 이 모든 경우에 대한 제어 기능을 제공합니다.

필요하지 않다면 URL 입력 끄기

가장 강력한 제어 방식은 URL 이미지를 전혀 수락하지 않는 것입니다. 클라이언트가 항상 base64 또는 파일 업로드로 이미지를 보낸다면 URL 가져오기를 완전히 비활성화하세요:

필요한 경우 URL 입력 강화

URL 이미지가 필요한 경우 이 플래그는 서버가 가져올 수 있는 대상을 제한합니다. 함께 사용하면 내부 대상을 거부하고, 연결을 검증된 IP에 고정하며 (DNS 리바인딩 방지), 모든 리디렉션 홉을 다시 확인합니다.

변수
기본값
효과

ALLOW_URL_INPUT

True

URL 이미지 입력의 마스터 스위치입니다. False 모든 URL 이미지를 거부합니다.

ALLOW_URL_TO_NON_GLOBAL_ADDRESSES

True

다음인 경우 False, 호스트가 비전역 주소(루프백, 프라이빗, 링크 로컬/메타데이터, CGNAT, IPv6 ULA 등)로 확인되는 URL은 거부되며, 두 번째 DNS 응답이 대상을 바꾸지 못하도록 연결은 검증된 IP에 고정됩니다.

VALIDATE_IMAGE_URL_REDIRECTS

False

다음인 경우 True, 리디렉션은 무조건 따라가지 않고 한 번에 한 홉씩 따라가며 각 홉 URL을 다시 검증합니다.

MAX_IMAGE_URL_REDIRECTS

30

위 플래그와 관계없이 적용되는 리디렉션 홉의 엄격한 최대 제한입니다.

ALLOW_NON_HTTPS_URL_INPUT

False

다음인 경우 False, 오직 https:// URL만 허용됩니다.

ALLOW_URL_INPUT_WITHOUT_FQDN

False

다음인 경우 False, 호스트가 순수 IP이거나 공개 접미사가 없는 URL은 거부되므로 호출자는 실제 도메인 이름을 사용해야 합니다.

WHITELISTED_DESTINATIONS_FOR_URL_INPUT

설정되지 않음

대상의 쉼표로 구분된 허용 목록 (subdomain.domain.suffix). 설정하면 이들만 허용됩니다.

BLACKLISTED_DESTINATIONS_FOR_URL_INPUT

설정되지 않음

항상 거부되는 대상의 쉼표로 구분된 차단 목록입니다.

공개 HTTPS 이미지 URL은 계속 허용하는 강화된 구성:

가장 엄격하게 제어하려면 허용 목록을 추가하여 서버가 이미지를 제공하는 정확한 호스트에만 도달하도록 하세요:

프록시는 이 보호 기능을 우회합니다. 서버에 HTTP(S) 프록시가 구성된 경우 대상은 Inference가 아니라 프록시에서 확인하므로 비전역 차단 및 연결 고정을 강제할 수 없습니다. 서버는 이를 감지하면 경고를 표시합니다. 이러한 제어 기능에 의존한다면 프록시 자체가 접근할 수 있는 대상을 제한하세요.

Python SDK에서도 동일한 제어 기능. 다음 inference-sdk 클라이언트는 URL에서 이미지를 로드할 때 동일한 URL 정책 및 SSRF 보호 기능을 적용하고 동일한 환경 변수를 읽습니다. 따라서 전송 전에 URL 이미지를 하이드레이션하는 클라이언트도 보호됩니다.

권장 기준선

다음 범위를 넘어 접근할 수 있는 모든 자체 호스팅 서버의 경우 localhost:

  • 알려진 클라이언트로 네트워크 액세스 제한(방화벽, 프라이빗 네트워크 또는 프록시).

  • WORKSPACES_WHITELISTED_FOR_LOCAL_DEPLOYMENT 을 설정하거나 앞에 자체 인증을 구성하세요.

  • 서버 또는 업스트림 프록시에서 TLS 종료.

  • ALLOW_CUSTOM_PYTHON_EXECUTION_IN_WORKFLOWS=false 정말 필요한 경우가 아니라면 사용하세요.

  • URL 이미지 입력 비활성화 (ALLOW_URL_INPUT=false), 또는 다음으로 강화: ALLOW_URL_TO_NON_GLOBAL_ADDRESSES=falseVALIDATE_IMAGE_URL_REDIRECTS=true, 그리고 가능한 경우 허용 목록을 추가하세요.

추가 참조 허용되는 입력 형식 피클된 numpy 입력 제어에 대해서는 다음을 참조하고, 프로덕션 준비 상태 체크리스트 오류 처리 및 속도 제한에 대해서는 다음을 참조하세요.

마지막 업데이트

도움이 되었나요?