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

受け入れ可能な入力形式

self-hosted の Roboflow Inference サーバーが受け付ける入力形式と、pickle 化された numpy ペイロードや URL 画像取得など、より安全でないものを無効化する方法。

なぜこれが重要か

Inference サーバーは統合しやすいように設計されているため、便利だがセキュリティがやや低い可能性のあるデータ読み込み方法がいくつか利用できます。本番環境へのデプロイでは、設定オプションでそれらの挙動を無効にできます。

このページでは、ニーズに応じてサーバーを強化するか、より柔軟な動作を有効にする方法を説明します。

ピクル化された numpy オブジェクトのデシリアライズ

Inference サーバーにリクエストを送る方法の 1 つは、シリアライズされた numpy オブジェクトを使うことです:

import cv2
import pickle
import requests

image = cv2.imread("...")
img_str = pickle.dumps(image)

infer_payload = {
    "model_id": "{project_id}/{project_version}",
    "image": {
        "type": "numpy",
        "value": img_str,
    },
}

res = requests.post(
    "http://localhost:9001/infer/{task}",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    json=infer_payload,
)

バージョン v0.14.0以降、このペイロード型のデシリアライズはデフォルトで無効になっています。次の設定で有効化できます: ALLOW_NUMPY_INPUT=True。詳しくは Inference CLI のドキュメントを参照して、そのフラグ付きでサーバーを起動する方法を確認してください。このオプションは Roboflow のホスト型 API では利用できません。

推論用画像に URL を送る

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 に解決されたり、そこへリダイレクトされたり、DNS リバインディングを使ったりする可能性があります(検証チェックでは public IP に解決し、実際の接続では private IP に解決する)。Inference にはこれらすべてに対する制御が含まれています。

必要ないなら URL 入力をオフにする

最も強力な制御は、URL 画像をまったく受け付けないことです。クライアントが常に base64 またはファイルアップロードで画像を送るなら、URL フェッチを完全に無効化します:

必要な場合は URL 入力を強化

URL 画像が必要な場合、これらのフラグによりサーバーが取得できる範囲を絞り込みます。これらを組み合わせることで、内部ターゲットを拒否し、接続を検証済み IP に固定し(DNS リバインディングを防止)、各リダイレクト先を再チェックします。

変数
デフォルト
効果

ALLOW_URL_INPUT

True

URL 画像入力の主スイッチ。False にするとすべての URL 画像が拒否されます。

ALLOW_LOADING_IMAGES_FROM_LOCAL_FILESYSTEM

True

False に設定すると、ローカルファイルシステムからの画像読み込みが無効になります。

ALLOW_URL_TO_NON_GLOBAL_ADDRESSES

True

False の場合、ホストが非グローバルアドレス(ループバック、プライベート、リンクローカル/メタデータ、CGNAT、IPv6 ULA など)に解決される URL は拒否され、接続は検証済み IP に固定されるため、2 回目の DNS 応答でターゲットを差し替えることはできません。

VALIDATE_IMAGE_URL_REDIRECTS

False

True の場合、リダイレクトは 1 ホップずつ追跡され、各ホップの URL が盲目的に追従されるのではなく再検証されます。

MAX_IMAGE_URL_REDIRECTS

30

リダイレクトホップ数の厳格な上限で、上のフラグにかかわらず適用されます。

ALLOW_NON_HTTPS_URL_INPUT

False

False の場合、https:// URL のみが受け付けられます。

ALLOW_URL_INPUT_WITHOUT_FQDN

False

False の場合、ホストが生の IP アドレスである URL やパブリックサフィックスを持たない URL は拒否されるため、呼び出し元は実際のドメイン名を使用する必要があります。

WHITELISTED_DESTINATIONS_FOR_URL_INPUT

未設定

カンマ区切りの宛先許可リスト(subdomain.domain.suffix)。設定すると、これらだけが許可されます。

BLACKLISTED_DESTINATIONS_FOR_URL_INPUT

未設定

カンマ区切りの宛先ブロックリスト。常に拒否されます。

公開 HTTPS 画像 URL を引き続き許可しつつ強化した設定:

最も厳格に制御するには、サーバーが画像を取得できるホストを正確に絞り込む allow-list を追加します:

プロキシはこの保護を回避します。サーバーに HTTP(S) プロキシが設定されている場合、宛先の解決は Inference ではなくプロキシが行うため、非グローバルのブロックや接続の固定は適用できません。サーバーはこれを検知すると警告を出します。これらの制御に依存する場合は、プロキシ自体が到達できる範囲を制限してください。

Python SDK でも同じ制御があります。 inference-sdk クライアントは、URL から画像を読み込む際に同じ URL ポリシーと SSRF 保護を適用し、同じ環境変数を読み取るため、送信前に URL 画像を展開するクライアントも保護されます。

サーバー側の動画ソースについては、こちらを参照してください: ビデオ設定。戻る サーバーのセキュリティ ネットワークアクセスと認証について

最終更新

役に立ちましたか?