> For the complete documentation index, see [llms.txt](https://help.aikido.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.aikido.dev/docs/docs-ja/miscellaneous-info/aikido-broker-for-internal-applications.md).

# 社内アプリケーション向け Aikido Broker

Aikido Broker を使用して、社内ネットワーク上に存在し、インターネットから到達できないアプリケーションをスキャンおよび監視します。

ブローカーはお使いのインフラ内で動作し、Aikido のリクエストを許可した内部 URL に転送します。Docker コンテナとして、または Helm チャートを使って Kubernetes 上にデプロイできます。

<figure><img src="/files/d56e51e5232190f20cdc280780aeb2ff14decde8" alt=""><figcaption></figcaption></figure>

## Broker を使うタイミング

Aikido のスキャンは、会社のネットワーク内にのみ存在するアプリケーションやサービスに対して Broker を使用します。例：

* オンプレミスの GitLab などローカルのコードプラットフォームに対するコードスキャン
* プライベートまたはオンプレミスのコンテナレジストリに対するコンテナスキャン
* 内部アプリケーションに対する AI ペンテスト
* 内部ドメインまたはサービスに対するフロントエンドおよび API テストスキャン

## 要件

Aikido Broker を実行するには、以下が必要です：

* [Docker (20.10+)](https://docs.docker.com/engine/) に設定し、 [Docker Compose (1.29+)](https://docs.docker.com/compose/) インストール済み
  * 必要に応じて Kubernetes 1.19+
* Aikido にスキャンさせたいアプリケーションへのネットワークアクセス
* へのアウトバウンド HTTPS アクセス `*.aikidobroker.com`
* 小さなコンテナを実行するのに十分な CPU (1 コア) とメモリ (1 GB)

## インストール

{% stepper %}
{% step %}
**Broker クライアントトークンを生成して設定する**

移動先 [Broker Clients ページ](https://app.aikido.dev/settings/integrations/broker/clients) で新しい broker client secret を作成します。次の手順のために Client Secret を保存してください。

{% hint style="info" %}
このページにアクセスできない場合は、Aikido ダッシュボードのサポートに連絡してください
{% endhint %}
{% endstep %}

{% step %}
**リソースを追加する（内部 URL）**

Broker 経由で Aikido がアクセスできる内部 URL を定義します。

これらは Aikido にスキャンさせたいアプリケーションと API です。たとえば：

* <https://api.internal.corp.local>
* <http://service-a.internal:8080>
* <https://10.0.5.20>

<figure><img src="/files/0b4417933e6d2f63a6566df3fc00b1d255a7289a" alt="" width="563"><figcaption></figcaption></figure>

Aikido UI で、一覧から既存の broker を選択するか、新しい broker を作成してこれらのリソースを管理できます。

リソースを保存すると、各リソースごとに一意の Broker URL が生成されます。Aikido 内では元の URL の代わりにこの Broker URL を使用してください。

<figure><img src="/files/be18e78e3ef04178d91f9a0c26bcbef15d11e4ab" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Broker を起動する**

Aikido にアクセスさせたい内部アプリケーションへ到達できるマシンで broker サービスを起動します。必ず次の値を置き換えてください。 `CLIENT_SECRET` clients ページで生成した値に。

{% tabs %}
{% tab title="Docker" %}

```shellscript
docker run -d \
  --name aikido-broker \
  --restart=on-failure:3 \
  --network host \
  -e CLIENT_SECRET="AIK_BROKER_XXX_YYY_ZZZZ" \
  -e ALLOWED_INTERNAL_SUBNETS="192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8" \
  aikidosecurity/broker-client:latest
```

Broker が期待どおりに動作しているかは次で確認できます `docker logs aikido-broker`

{% hint style="warning" %}
Windows と Mac OS では次を使用します： `host.docker.internal` の代わりに `localhost` または `127.0.0.1` を使ってローカルサービスに接続します。
{% endhint %}
{% endtab %}

{% tab title="Kubernetes" %}
Aikido は Broker をデプロイするための [Helm チャートを提供します](https://github.com/AikidoSec/helm-charts/tree/main/broker-client) Kubernetes 環境内で。

```shellscript
helm repo add aikido https://aikidosec.github.io/helm-charts
helm repo update
helm install broker-client aikido/broker-client \
  --set config.clientSecret="AIK_BROKER_XXX_YYY_ZZZZ" \
  --namespace aikido \
  --create-namespace
```

次を設定します】【： [追加パラメータ](https://github.com/AikidoSec/helm-charts/blob/main/broker-client/values.yaml) を使用して `values.yaml` ファイルを作成し、次のコマンドを実行します `helm install broker-client aikido/broker-client -f values.yaml`

Broker が実行中かは次で確認できます `kubectl logs -n aikido -l app.kubernetes.io/name=broker-client`
{% endtab %}
{% endtabs %}
{% endstep %}

{% step %}
**Broker が安定するまで待つ**

Aikido への接続と登録に約 30 秒かかります。

起動して接続されると、Aikido は設定した内部リソースにアクセスできるようになります。
{% endstep %}
{% endstepper %}

## 設定

Broker が内部サービスに到達する方法とホスト名の解決方法を制御できます。

#### ALLOWED\_INTERNAL\_SUBNETS

Broker が呼び出しを許可される CIDR 範囲の一覧です。

これは次の目的で使用します：

* Broker を特定の内部ネットワークに限定する
* 無関係なインフラへの誤アクセスを防ぐ

例：

```
ALLOWED_INTERNAL_SUBNETS=10.0.0.0/8,192.168.1.0/24
```

#### DNS\_SERVERS

Broker が内部ホスト名を解決するために使用する DNS サーバーの任意の一覧です。

次の場合に使用します：

* 内部 DNS ゾーンがある（例：\*.corp.local）
* 内部サービスが公開 DNS では解決できない

例：

```
DNS_SERVERS=10.0.0.10,10.0.0.11
```

#### カスタム CA 用の NODE\_EXTRA\_CA\_CERTS（内部 TLS）

内部サービスがプライベート CA で署名された証明書を使用している場合、その CA を指定して、Broker が TLS を正しく検証できるようにします。

一般的な使用例：

* 自己署名証明書を使用する内部サービス
* サービス間暗号化のための内部 PKI

設定方法はデプロイ方法によって異なりますが、基本的には次のようにします：

* カスタム CA ファイルを Broker コンテナにマウントする
* 提供されている環境変数または設定オプションを使って、Broker にその CA ファイルを指定する

カスタム証明書を追加した場合、Broker はコンテナ内でそれらを読み取れる必要があります。追加の `-v` フラグで証明書フォルダをコンテナにマウントし、 `NODE_EXTRA_CA_CERTS` 変数で Broker に証明書ファイルを指定します。短い例：

```
docker run -d \
  --name aikido-broker \
  --restart=on-failure:3 \
  --network host \
  -v /path/to/corporate-ca.crt:/certs/corporate-ca.crt:ro \
  -e CLIENT_SECRET="{secret}" \
  -e ALLOWED_INTERNAL_SUBNETS="192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8" \
  -e NODE_EXTRA_CA_CERTS=/certs/corporate-ca.crt \
  aikidosecurity/broker-client:latest
```

#### MTLS\_PEM\_PATH と MTLS\_CA\_PATH

内部サービスが mTLS 証明書を使用する場合、これら 2 つの設定を使用できます。mTLS 証明書が自己署名でない場合、CA パスは不要です。

カスタム証明書を追加した場合、Broker はコンテナ内でそれらを読み取れる必要があります。追加の `-v` フラグで証明書フォルダをコンテナにマウントし、 `MTLS_PEM_PATH` に設定し、 `MTLS_CA_PATH` 変数。短い例：

```
docker run -d \
  --name aikido-broker \
  --restart=on-failure:3 \
  --network host \
  -v /path/to/corporate-mTLS.pem:/certs/corporate-mTLS.pem:ro \
  -v /path/to/corporate-mTLS-ca.crt:/certs/corporate-mTLS-ca.crt:ro \
  -e CLIENT_SECRET="{secret}" \
  -e ALLOWED_INTERNAL_SUBNETS="192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8" \
  -e MTLS_PEM_PATH=/certs/corporate-mTLS.pem \
  -e MTLS_CA_PATH=/certs/corporate-mTLS-ca.crt \
  aikidosecurity/broker-client:latest
```

#### プロキシ

内部ネットワークで特定のホストやインターネットへ到達するためにプロキシが必要な場合は、Broker にそのプロキシを使用するよう設定します。

これは次のような場合に役立ちます：

* ネットワーク内のアウトバウンド通信は HTTP または HTTPS プロキシを経由しなければならない
* 内部セグメントには中央プロキシ経由でしか到達できない

Broker のプロキシ設定または環境変数を通じてプロキシ URL を設定します： `HTTP_PROXY, HTTPS_PROXY, ALL_PROXY`

また、 `NO_PROXY` 環境変数を設定することで、特定ホストへのリクエストがプロキシを経由しないようにクライアントを設定することもできます（`-e NO_PROXY=noproxy.dev,my-domain.internal`）。値は、プロキシをバイパスするホストをカンマ区切りで指定します。

#### NODE\_TLS\_REJECT\_UNAUTHORIZED

自己署名 TLS 証明書が原因で Broker が問題を繰り返す場合、'NODE\_TLS\_REJECT\_UNAUTHORIZED' 環境変数に 0 を渡して TLS 検証を無効にするよう Broker に指示できます：

```
docker run -d \
  --name aikido-broker \
  --restart=on-failure:3 \
  --log-opt max-size=20m --log-opt max-file=5 \
  --network host \
  -e CLIENT_SECRET="{secret}" \
  -e ALLOWED_INTERNAL_SUBNETS="192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.0/8" \
  -e NODE_TLS_REJECT_UNAUTHORIZED=0 \
  aikidosecurity/broker-client:latest
```

#### FORCE\_WEBSOCKET と FORCE\_POLLING

Broker はデフォルトで wss トラフィックを使用し、失敗した場合はロングポーリングにフォールバックします。これらの環境変数を使うことで、ネットワーク要件に応じて Broker をどちらか一方に固定できます。

```
-e FORCE_WEBSOCKET=1
```

```
-e FORCE_POLLING=1
```

## Aikido で Broker リソースを使う方法

Broker をインストールし、内部 URL をリソースとして追加すると、Broker は各リソースごとに一意の Aikido URL を生成します。これらの URL は、Aikido が Broker 経由で内部サービスに到達するための安全な प्रवेश点として機能します。

<figure><img src="/files/261694fce758fcc24c8f1fb61fc3e810d8ba1f59" alt=""><figcaption></figcaption></figure>

**これらの Aikido Broker URL をすべての Aikido スキャンで使用してください。**

これは重要です。なぜなら：

* Aikido は内部ネットワークに直接アクセスできない
* Broker は Aikido の URL を内部サービスにマッピングする
* 内部 URL を直接使っても動作しない

#### 例

Domains and API スキャン（フロントエンドスキャン）を設定する際は、内部アドレスの代わりに Broker URL を使用してください。

たとえば：

* 使用しないでください <http://my-internal-app.test:8000>
* 代わりに、生成された Broker URL を使用します。例： <https://4948_c562ddc641.aikidobroker.com>

<figure><img src="/files/2accb81c69d008d901d00e46bfd991b827cb8129" alt=""><figcaption></figcaption></figure>

## トラブルシューティング

### トラブルシューティングコマンドを実行する

まずこのコマンドを実行してください。Broker 設定の簡易ヘルスチェック（DNS、接続性、その他一般的な失敗箇所）を行い、通常はすぐに根本原因を特定できます。

{% tabs %}
{% tab title="Docker" %}

```bash
docker exec -it aikido-broker node /app/diagnostics.cjs
```

{% endtab %}

{% tab title="Kubernetes" %}

```bash
kubectl exec <pod> -c broker-client -- node /app/diagnostics.cjs
```

{% endtab %}
{% endtabs %}

### ログを確認する

警告メッセージとエラーについて Docker ログを確認します：

{% tabs %}
{% tab title="Docker" %}

```bash
docker logs aikido-broker
```

{% endtab %}

{% tab title="Kubernetes" %}

```
kubectl logs -n aikido -l app.kubernetes.io/name=broker-client
```

{% endtab %}
{% endtabs %}

### エラー：他のクライアントのリソースにアクセスできません

キャッシュされた client id が `CLIENT_SECRET` 組織と一致しなくなりました。 `config/client_id` ファイルを削除して、もう一度お試しください。

## Broker をアンインストールする

まずスキャンから Broker URL を削除してください。Broker がなくなると、まだ Broker URL を参照しているスキャンは失敗します。

その後、Broker を停止して削除します：

{% tabs %}
{% tab title="Docker" %}

```bash
docker stop aikido-broker
docker rm aikido-broker
docker rmi aikidosecurity/broker-client:latest
```

証明書や設定フォルダをコンテナにマウントしている場合、それらのファイルはホスト上に残ります。不要になったら手動で削除してください。
{% endtab %}

{% tab title="Kubernetes" %}

```bash
helm uninstall broker-client --namespace aikido
```

この namespace が Broker 専用に作成された場合は、削除することもできます：

```bash
kubectl delete namespace aikido
```

{% endtab %}
{% endtabs %}

最後に、 [Broker Clients ページ](https://app.aikido.dev/settings/integrations/broker/clients) に移動してクライアントを削除します。これにより client secret が無効化され、そのリソースと Broker URL が削除されます。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.aikido.dev/docs/docs-ja/miscellaneous-info/aikido-broker-for-internal-applications.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
