> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ja/serufuhosuto/inference-server/configuration/security.md).

# セルフホストサーバーの保護

自分のハードウェアで Inference を実行する場合、 **そのセキュリティ態勢はあなたが管理します**。ローカルにデプロイされたサーバーは、デフォルトでは認証、暗号化、ネットワーク制限を強制しません。安全に公開するためではなく、簡単に起動できるように作られています。初期状態では、モデルの実行やワークフローの実行要求を含め、到達したあらゆるリクエストに応答します。

このページでは、ローカル開発トラフィックを超えるものを扱う前に、すべてのセルフホスト型デプロイメントで確認すべき 5 つの制御について説明します。これらは相互補完的なので、環境で許される限り多く適用してください。

{% hint style="warning" %}
**これはあなたの責任です。** Roboflow はマネージドの [サーバーレス Cloud API](/deployment/ja/roboflow-cloud/serverless-api.md) および [専用デプロイメント](/deployment/ja/roboflow-cloud/dedicated-deployments.md) の提供を保護しています。自分で実行するサーバーについては、ホスト、その周囲のネットワーク、および受け入れる認証情報の保護はあなたの責任です。以下の制御なしにサーバーが信頼できないネットワークから到達可能な場合、世界中に公開されているものとして扱ってください。
{% endhint %}

## 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 ワークスペーススラッグのカンマ区切りリストに設定します。

```bash
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`.

{% hint style="info" %}
**API キーチェックの対象外となるもの。** サーバーを利用可能かつ監視可能な状態に保つため、少数の未認証エンドポイントは開いたままです。 `/`, `/docs`, `/redoc`, `/info`, `/healthz`, `/readiness`, `/metrics`, `/openapi.json`、および静的アセット（`/static/...`, `/_next/...`）。 `/info` および `/metrics` は、サーバーに到達できる誰もが読み取れる情報として扱い、誰が到達できるかを制限するためにネットワーク制限（制御 1）に依存してください。
{% endhint %}

**独自の認証を導入する。** 組み込みチェックでは、認可は Roboflow ワークスペースに紐付けられます。独自の ID モデルがある場合は、サーバーの前にリバースプロキシまたは認証ミドルウェアを配置し、OAuth/OIDC、mTLS、署名付きヘッダー、API ゲートウェイ、または組織ですでに利用している任意の方式を強制して、認証済みトラフィックのみをポート `9001`へ通過させてください。2 つのアプローチは組み合わせることができます。

## 3. ネットワークで必要な場合は TLS を有効にする

組み込みの API キーチェックは、リクエスト内で認証情報を送信します。これらのリクエストが完全には制御できないネットワークを通過する場合、接続は暗号化する必要があります。そうしないと、キーとペイロードが平文で露出します。

選択肢は 2 つあります。

* **リバースプロキシまたはロードバランサーで TLS を終端する** サーバーの前で行います。すでにそれらを実行している場合、通常はこちらを選択します。
* **サーバーから直接 HTTPS を提供する** 証明書とキーをマウントし、次を設定することで実現します。 `ENABLE_HTTPS=true`。詳細は [HTTPS 経由で Inference を提供する](/deployment/ja/serufuhosuto/inference-server/configuration/https.md) を参照してください。これには、以下を使用した相互 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`:

```bash
docker run --rm -p 9001:9001 \
  -e ALLOW_CUSTOM_PYTHON_EXECUTION_IN_WORKFLOWS=false \
  roboflow/roboflow-inference-server-cpu:latest
```

{% hint style="warning" %}
**デフォルト値は 2026-06-19 に変更されます。** 現在、このフラグのデフォルトは `True` であり、後方互換性のためです。2026-06-19 にデフォルトは次の値へ変更されます。 `False`。ワークフローがカスタム Python ブロックに依存している場合は、 `ALLOW_CUSTOM_PYTHON_EXECUTION_IN_WORKFLOWS=true` を明示的に設定し、その日以降も動作し続けるようにしてください。それ以外の場合は無効のままにし、上記のネットワークおよび認証制御がすでに整っているデプロイメントでのみ有効化することを推奨します。
{% endhint %}

## 5. URL からの画像取得を制限する（SSRF）

Inference は、リクエストで指定された URL から直接画像を読み込めます（`{"image": {"type": "url", "value": "https://..."}}`）。サーバーが呼び出し元の制御する URL を取得する場合、呼び出し元はサーバーを誘導して自身に代わってリクエストさせようとする可能性があります。これは、 **サーバーサイドリクエストフォージェリ（SSRF）**&#x3068;呼ばれる攻撃の一種です。内部ネットワークに直接到達できない者でも、たとえば次の取得をサーバーに要求できます。

* `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 リバインディング** （検証チェックではパブリック IP に解決され、実際の接続ではプライベート IP に解決される）を使用する可能性があります。Inference にはこれらすべてに対する制御機能が備わっています。

### 不要な場合は URL 入力を無効にする

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

```bash
docker run --rm -p 9001:9001 \
  -e ALLOW_URL_INPUT=false \
  roboflow/roboflow-inference-server-cpu:latest
```

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

URL 画像が必要な場合、これらのフラグはサーバーが取得を許可される対象を絞り込みます。これらを組み合わせることで内部ターゲットを拒否し、 **接続を検証済み IP に固定し** （DNS リバインディングを防止）、すべてのリダイレクトホップを再検証します。

| 変数                                       | デフォルト   | 効果                                                                                                                                                  |
| ---------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ALLOW_URL_INPUT`                        | `True`  | URL 画像入力のマスタースイッチ。 `False` すべての URL 画像を拒否します。                                                                                                       |
| `ALLOW_URL_TO_NON_GLOBAL_ADDRESSES`      | `True`  | の場合、 `False`ホストが非グローバルアドレス（ループバック、プライベート、リンクローカル／メタデータ、CGNAT、IPv6 ULA など）に解決される URL は拒否されます。また、2 回目の DNS 応答によってターゲットがすり替えられないよう、接続は検証済み IP に固定されます。 |
| `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 を引き続き許可する強化された設定：

```bash
docker run --rm -p 9001:9001 \
  -e ALLOW_URL_TO_NON_GLOBAL_ADDRESSES=false \
  -e VALIDATE_IMAGE_URL_REDIRECTS=true \
  roboflow/roboflow-inference-server-cpu:latest
```

最も厳格に制御するには、許可リストを追加して、サーバーが画像を提供する正確なホストにのみ到達できるようにします。

```bash
docker run --rm -p 9001:9001 \
  -e ALLOW_URL_TO_NON_GLOBAL_ADDRESSES=false \
  -e VALIDATE_IMAGE_URL_REDIRECTS=true \
  -e WHITELISTED_DESTINATIONS_FOR_URL_INPUT=images.example.com,cdn.example.com \
  roboflow/roboflow-inference-server-cpu:latest
```

{% hint style="warning" %}
**2026 年第 4 四半期に 2 つのデフォルトが変更されます。** `ALLOW_URL_TO_NON_GLOBAL_ADDRESSES` （次の値に `False`）および `VALIDATE_IMAGE_URL_REDIRECTS` （次の値に `True`）は、後方互換性のため、現在は従来の寛容な動作をデフォルトとしています。両方のデフォルトは、2026 年第 4 四半期に安全な値へ切り替わる予定です。早期に適用するには安全な値を、ワークフローが内部 URL の取得に本当に依存している場合は従来の値を、今すぐ明示的に設定してください。そうすれば、この変更に驚かされることはありません。
{% endhint %}

{% hint style="info" %}
**プロキシはこの保護を回避します。** サーバーに HTTP(S) プロキシが設定されている場合、宛先を解決するのは Inference ではなくプロキシであるため、非グローバルアドレスのブロックと接続の固定は強制できません。サーバーはこれを検出すると警告を出力します。これらの制御に依存する場合は、プロキシ自体が到達できる対象を制限してください。
{% endhint %}

{% hint style="info" %}
**Python SDK にも同じ制御があります。** 「 `inference-sdk` 」クライアントは、URL から画像を読み込む際に同じ URL ポリシーと SSRF 保護を適用し、同じ環境変数を読み取ります。そのため、URL 画像を送信前にハイドレートするクライアントも保護されます。
{% endhint %}

## 推奨ベースライン

次の範囲を超えて到達可能なすべてのセルフホスト型サーバーについて `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=false` および `VALIDATE_IMAGE_URL_REDIRECTS=true`。可能な場合は、さらに許可リストを追加してください。

関連項目 [受け入れられる入力形式](/deployment/ja/serufuhosuto/inference-server/configuration/input-formats.md) では pickled-numpy 入力制御について、また [本番運用準備チェックリスト](/deployment/ja/production-checklist.md) ではエラー処理とレート制限について確認してください。
