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

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 を保存してください。

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

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

Aikido が Broker 経由でアクセスできる内部 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 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 コンテナにマウントする
* 提供されている環境変数または設定オプションを使って、その CA ファイルを Broker に指定する

カスタム証明書を追加した場合、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 トラフィックで動作し、失敗した場合はロングポーリングにフォールバックします。これらの環境変数を使用して、ネットワーク要件に基づきそのどちらかに固定できます。

```
-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 スキャンでこれらの Aikido Broker URL を使用してください。**

これは重要です。理由は：

* 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 %}

### Error: Cannot access another client's resources

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

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

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

次に、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
```

名前空間が Broker 専用に作成されていた場合は、削除することもできます：

```bash
kubectl delete namespace aikido
```

{% endtab %}
{% endtabs %}

最後に、 [Broker Clients ページ](https://app.aikido.dev/settings/integrations/broker/clients) へ移動してクライアントを削除します。これによりクライアントシークレットが失効し、そのリソースと 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.
