# Podman上のゲートウェイ

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

### 概要 <a href="#overview" id="overview"></a>

本ページでは、Podman上にKeeperゲートウェイをインストール、設定、更新する手順を説明します。KeeperゲートウェイのコンテナはRocky Linux 9のベースイメージを基にビルドされ、[DockerHub](https://hub.docker.com/r/keeper/gateway)で配布されています。

PodmanはOCI互換で、常駐デーモンを使わないコンテナエンジンです。Dockerと同じ `keeper/gateway` イメージをそのまま利用でき、イメージ側の変更は不要です。Dockerとの主な違いは、`docker.io/` のレジストリ接頭辞、SELinux向けのボリュームラベル `:Z`、バックグラウンドデーモンではなく systemd によるサービス管理です。

#### 要件 <a href="#prerequisites" id="prerequisites"></a>

* PAMの全機能を利用するには、x86 AMDプロセッサーを搭載したLinuxホストが必要
* `podman` がインストールされていること (バージョン4.0以上が必須、5.0以上を推奨)
* Compose方式を使う場合のみ `podman-compose` がインストールされていること

{% hint style="info" %}
Podmanは、RHEL 9、Fedora 39以降、Rocky 9、Alma 9に標準で同梱されています。Ubuntu 24.04以降およびDebian 12以降では、ディストリビューション付属のパッケージリポジトリからインストールしてください。
{% endhint %}

**Podmanのインストール**

**RHEL / Alma / Rocky / Fedora**

```
sudo dnf install -y podman
```

**Ubuntu / Debian**

```
sudo apt update && sudo apt install -y podman
```

インストールできたかは、以下で確認します。

```
podman --version
```

***

#### ゲートウェイの作成 <a href="#create-a-gateway" id="create-a-gateway"></a>

新しいゲートウェイは、ウェブボルトまたはデスクトップアプリで **\[新規作成]** > **\[ゲートウェイ]** をクリックして作成できます。

コマンダーのCLIからゲートウェイと構成ファイルを作成することもできます。

```
pam gateway new -n "<Gateway Name>" -a <Application Name or UID> -c b64
```

アプリケーション名とUIDは `secrets-manager app list` で確認できます。

#### インストールのオプション <a href="#installation-options" id="installation-options"></a>

Podman上にゲートウェイをセットアップする方法は以下の2通りです。

* Podman Composeによるインストール
* 手動インストール

***

### オプション1: Podman Composeによるインストール <a href="#podman-compose-installation" id="podman-compose-installation"></a>

Docker Composeに近い手順で進める場合は `podman-compose` を使います。

#### 手順1. podman-composeのインストール <a href="#step-1-install-podman-compose" id="step-1-install-podman-compose"></a>

**RHEL / Alma / Rocky / Fedora**

```
sudo dnf install -y podman-compose
```

**Ubuntu / Debian**

```
sudo apt install -y podman-compose
```

#### 手順2. Composeファイルの作成 <a href="#step-2-create-the-compose-file" id="step-2-create-the-compose-file"></a>

作業用ディレクトリを作成し、その中にComposeファイルを置きます。

```
sudo mkdir -p /opt/keeper-gateway && cd /opt/keeper-gateway
```

以下の内容で `docker-compose.yml` という名前のファイルを作成します。

```
services:
  keeper-gateway:
    platform: linux/amd64
    image: docker.io/keeper/gateway:latest
    container_name: keeper-gateway
    shm_size: 16g
    security_opt:
      - seccomp:docker-seccomp.json
    environment:
      LC_ALL: "C.UTF-8"
      ACCEPT_EULA: Y
      GATEWAY_CONFIG: XXXXXXXXXXXXXXXXX
    volumes:
      - gateway-data:/etc/keeper-gateway:Z

volumes:
  gateway-data:
```

{% hint style="warning" %}
`shm_size` は重要なパラメータです。利用可能なサーバーメモリの少なくとも半分まで増やすことを推奨します。本番のゲートウェイには、可能な限り多くのメモリとCPUを割り当ててください。リモートブラウザ分離セッションでは、Chromiumがプロセスごとに多くのメモリを消費します。
{% endhint %}

必須の環境変数は `GATEWAY_CONFIG` のみです。ゲートウェイ作成時にKeeperから示されるBase64エンコード済みの構成を指定します。

{% hint style="info" %}
**注 — SELinuxを使用するホスト (RHEL / Fedora / Rocky / Alma):** ボリュームマウントの `:Z` 接尾辞は**必須**です。適切なSELinuxラベルが付与され、コンテナからマウント先ディレクトリにアクセスできるようになります。SELinuxを使わないシステム (Ubuntu / Debian) では指定しても支障はなく、そのまま残して問題ありません。
{% endhint %}

{% hint style="info" %}
Ubuntu/Debianでは、`security_opt` に `- apparmor:gateway-apparmor-profile` を追加し、以下の手順4に従ってAppArmorプロファイルをダウンロードして有効化してください。
{% endhint %}

#### 手順3. Seccompファイルのダウンロード <a href="#step-3-download-the-seccomp-file" id="step-3-download-the-seccomp-file"></a>

`docker-seccomp.json` ファイルをダウンロードし、Composeファイルと同じフォルダに配置します。

[ファイルをダウンロード](https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/docker-seccomp.json)するか、以下を実行します。

```
curl -O https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/docker-seccomp.json
```

#### 手順4. AppArmorプロファイル (Ubuntu/Debian系ディストリビューションで必須) <a href="#step-4-apparmor-profile-required-for-ubuntu-debian-distributions" id="step-4-apparmor-profile-required-for-ubuntu-debian-distributions"></a>

{% hint style="info" %}
この手順は、UbuntuおよびDebian系ディストリビューションで**必須**です。その他のLinuxディストリビューション (RHEL、CentOS、Fedora、Amazon Linuxなど) では、手順5へ進んでください。
{% endhint %}

`gateway-apparmor-profile` ファイルをComposeファイルと同じフォルダに配置します。

[ファイルをダウンロード](https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/gateway-apparmor-profile)するか、以下を実行します。

{% code overflow="wrap" %}

```bash
curl -O https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/gateway-apparmor-profile
```

{% endcode %}

以下のコマンドでプロファイルを読み込み、`/etc/apparmor.d/` に配置します。

```bash
sudo apparmor_parser -r gateway-apparmor-profile
sudo cp gateway-apparmor-profile /etc/apparmor.d/
```

#### 手順5. サービスの起動 <a href="#step-5-start-the-service" id="step-5-start-the-service"></a>

`docker-compose.yml` と `docker-seccomp.json` を保存したフォルダにいることを確認してください。以下のコマンドでKeeperゲートウェイをバックグラウンドで起動します。

```bash
cd /opt/keeper-gateway
sudo podman-compose up -d
```

{% hint style="info" %}
Dockerとは異なり、`podman-compose` はComposeファイル内の `restart:` ディレクティブを**解釈しません**。ホスト再起動後もゲートウェイを上げるには、後述の「再起動時にゲートウェイを自動起動する」の手順をご参照ください。
{% endhint %}

***

### オプション2: Podmanの手動インストール <a href="#manual-installation" id="manual-installation"></a>

Composeファイルを使わずコンテナを直接実行する場合は、以下の手順に従います。

#### 手順1. ゲートウェイのイメージ取得 <a href="#step-1-pull-the-gateway-image" id="step-1-pull-the-gateway-image"></a>

```bash
sudo podman pull docker.io/keeper/gateway:latest
```

{% hint style="info" %}
Podmanでは、Docker Hubからイメージを取得するときに `docker.io/` のレジストリ接頭辞を明示する必要があります。省略すると、`/etc/containers/registries.conf` の設定により、Docker Hub以外のレジストリが先に検索対象になることがあります。
{% endhint %}

#### 手順2. Seccompファイルのダウンロード <a href="#step-2-download-the-seccomp-file" id="step-2-download-the-seccomp-file"></a>

{% code overflow="wrap" %}

```bash
curl -O https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/docker-seccomp.json
```

{% endcode %}

#### 手順3. AppArmorプロファイル (Ubuntu/Debianのみ) <a href="#step-3-apparmor-profile-ubuntu-debian-only" id="step-3-apparmor-profile-ubuntu-debian-only"></a>

{% hint style="info" %}
この手順は、UbuntuおよびDebian系ディストリビューションで**必須**です。その他のLinuxディストリビューションでは、手順4へ進んでください。
{% endhint %}

{% code overflow="wrap" %}

```bash
curl -O https://raw.githubusercontent.com/Keeper-Security/KeeperPAM/refs/heads/main/gateway/gateway-apparmor-profile
sudo apparmor_parser -r gateway-apparmor-profile
sudo cp gateway-apparmor-profile /etc/apparmor.d/
```

{% endcode %}

#### 手順4. コンテナの起動 <a href="#step-4-start-the-container" id="step-4-start-the-container"></a>

Keeperゲートウェイのコンテナを実行します。

```bash
sudo podman run -d \
    --name keeper-gateway \
    --shm-size=16g \
    --security-opt seccomp=docker-seccomp.json \
    -e LC_ALL="C.UTF-8" \
    -e ACCEPT_EULA=Y \
    -e GATEWAY_CONFIG="XXXXXXXXXXXXXXXXX" \
    -v gateway-data:/etc/keeper-gateway:Z \
    docker.io/keeper/gateway:latest
```

{% hint style="warning" %}
`--shm-size` は重要なパラメータです。利用可能なサーバーメモリの少なくとも半分まで増やすことを推奨します。
{% endhint %}

`XXXXXXXXXXXXXXXXX` は、ゲートウェイ作成時にKeeperから示されるBase64エンコード済みの構成に置き換えてください。

Ubuntu/Debianでは、AppArmor用のセキュリティオプションを付与したコマンドを使います。

```bash
sudo podman run -d \
    --name keeper-gateway \
    --shm-size=16g \
    --security-opt seccomp=docker-seccomp.json \
    --security-opt apparmor=gateway-apparmor-profile \
    -e LC_ALL="C.UTF-8" \
    -e ACCEPT_EULA=Y \
    -e GATEWAY_CONFIG="XXXXXXXXXXXXXXXXX" \
    -v gateway-data:/etc/keeper-gateway:Z \
    docker.io/keeper/gateway:latest
```

***

### ログ <a href="#logging" id="logging"></a>

Keeperゲートウェイのログを確認するには、以下を実行します。

```
sudo podman logs keeper-gateway
```

ボルト内の **\[シークレットマネージャー]** 画面から **\[アプリケーション]** > **\[ゲートウェイ]** へ移動すると、ゲートウェイが **\[オンライン]** と表示されます。

***

### ゲートウェイサービスの管理 <a href="#gateway-service-management" id="gateway-service-management"></a>

#### **サービスの起動** <a href="#starting-the-service" id="starting-the-service"></a>

```
sudo podman start keeper-gateway
```

#### **サービスの停止** <a href="#stopping-the-service" id="stopping-the-service"></a>

```
sudo podman stop keeper-gateway
```

#### **サービスの再起動** <a href="#restarting-the-service" id="restarting-the-service"></a>

```
sudo podman restart keeper-gateway
```

#### **ゲートウェイコンテナへの接続** <a href="#connecting-to-the-gateway-container" id="connecting-to-the-gateway-container"></a>

```
sudo podman exec -it keeper-gateway bash
```

***

### 再起動時にゲートウェイを自動起動する <a href="#starting-the-gateway-automatically-on-reboot" id="starting-the-gateway-automatically-on-reboot"></a>

Podmanはバックグラウンドデーモンを使いません。Composeファイルの `restart:` ディレクティブや `podman run` の `--restart` フラグは、**ホストの再起動をまたいでは**適用されません。ゲートウェイをOS起動時に確実に立ち上げるには、systemdのサービスユニットを生成します。

#### **root権限あり (推奨)** <a href="#rootful-recommended" id="rootful-recommended"></a>

```
sudo podman generate systemd --name keeper-gateway --new --files
sudo mv container-keeper-gateway.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable container-keeper-gateway.service
sudo systemctl start container-keeper-gateway.service
```

{% hint style="info" %}
`--new` フラグは、停止済みコンテナを再利用するのではなく、起動のたびにイメージから新しいコンテナを作るよう systemd に指示します。再起動後にイメージを更新した内容が反映されやすくなります。
{% endhint %}

#### **root権限なし (代替)** <a href="#rootless-alternative" id="rootless-alternative"></a>

Podmanをroot権限なしで実行する場合は、ユーザーの systemd にユニットを置きます。

```
podman generate systemd --name keeper-gateway --new --files
mkdir -p ~/.config/systemd/user/
mv container-keeper-gateway.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable container-keeper-gateway.service
systemctl --user start container-keeper-gateway.service
loginctl enable-linger $(whoami)
```

{% hint style="info" %}
`loginctl enable-linger` により、ユーザーセッションがなくてもユーザーサービスをブート時に起動できるようになります。
{% endhint %}

{% hint style="warning" %}
Ubuntu/Debianでは、再起動後もAppArmorプロファイルが読み込まれた状態になっているか確認してください。
{% endhint %}

```
sudo apparmor_parser -r gateway-apparmor-profile
sudo cp gateway-apparmor-profile /etc/apparmor.d/
```

再起動後、サービスが動いているかは以下で確認します。

```
sudo systemctl status container-keeper-gateway.service
```

***

### デバッグ <a href="#debugging" id="debugging"></a>

ゲートウェイで詳細なデバッグログを有効にする場合は、コンテナ起動時に以下の環境変数を追加します。

```bash
sudo podman run -d \
    --name keeper-gateway \
    --shm-size=16g \
    --security-opt seccomp=docker-seccomp.json \
    -e LC_ALL="C.UTF-8" \
    -e ACCEPT_EULA=Y \
    -e GATEWAY_CONFIG="XXXXXXXXXXXXXXXXX" \
    -e KEEPER_GATEWAY_LOG_LEVEL="debug" \
    -e LOG_LEVEL="debug" \
    -v gateway-data:/etc/keeper-gateway:Z \
    docker.io/keeper/gateway:latest
```

または、`podman-compose` を使用している場合は、`docker-compose.yml` の `environment` セクションに変数を追加します。

```
services:
  keeper-gateway:
    .....
    environment:
      LC_ALL: "C.UTF-8"
      KEEPER_GATEWAY_LOG_LEVEL: "debug"
      LOG_LEVEL: "debug"
```

ログレベルを変更したら、コンテナを再起動します。

```
sudo podman restart keeper-gateway
```

以下のコマンドでKeeperゲートウェイのログを追跡表示できます。

```
sudo podman logs -f keeper-gateway
```

***

### アップデート <a href="#updating" id="updating"></a>

まず、最新のイメージを取得します。

```
sudo podman pull docker.io/keeper/gateway:latest
```

続けて、運用方法に応じてサービスまたはコンテナを再起動します。

**systemdを使っている場合 (推奨)**

```
sudo systemctl restart container-keeper-gateway.service
```

**コンテナのみ手動管理している場合**

```bash
sudo podman stop keeper-gateway
sudo podman rm keeper-gateway
sudo podman run -d \
    --name keeper-gateway \
    --shm-size=16g \
    --security-opt seccomp=docker-seccomp.json \
    -e LC_ALL="C.UTF-8" \
    -e ACCEPT_EULA=Y \
    -v gateway-data:/etc/keeper-gateway:Z \
    docker.io/keeper/gateway:latest
```

{% hint style="info" %}
初回の初期化後、ゲートウェイは永続ボリュームにデバイス鍵を保存します。ボリュームを維持する限り、以降の実行で `GATEWAY_CONFIG` を再度指定する必要はありません。
{% endhint %}

***

#### ヘルスチェック <a href="#health-checks" id="health-checks"></a>

ゲートウェイの稼働状況を外部から確認できるよう、ヘルスチェックを構成できます。コンテナのオーケストレーションやロードバランシング、自動監視と組み合わせやすくなります。設定手順と例は[ヘルスチェック](/keeperpam/jp/privileged-access-manager/getting-started/gateways/health-checks.md)をご参照ください。

***

#### ホストインスタンスへの接続 <a href="#connecting-to-the-host-instance" id="connecting-to-the-host-instance"></a>

Keeperゲートウェイでは、ホストマシンへ接続したりトンネルを張ったりできます。`--add-host` に `host.docker.internal:host-gateway` を指定すると、コンテナからホスト宛てのセッションを張りやすくなります。

**手動で `podman run` する例**

```
sudo podman run -d \
    --name keeper-gateway \
    --shm-size=16g \
    --add-host host.docker.internal:host-gateway \
    --security-opt seccomp=docker-seccomp.json \
    -e LC_ALL="C.UTF-8" \
    -e ACCEPT_EULA=Y \
    -e GATEWAY_CONFIG="XXXXXXXXXXXXXXXXX" \
    -v gateway-data:/etc/keeper-gateway:Z \
    docker.io/keeper/gateway:latest
```

または、`docker-compose.yml` に以下を追加します。

```
services:
  keeper-gateway:
    platform: linux/amd64
    image: docker.io/keeper/gateway:latest
    shm_size: 16g
    extra_hosts:
      - "host.docker.internal:host-gateway"
    security_opt:
      - seccomp:docker-seccomp.json
    environment:
      LC_ALL: "C.UTF-8"
      ACCEPT_EULA: Y
      GATEWAY_CONFIG: xxxxxxxx
    volumes:
      - gateway-data:/etc/keeper-gateway:Z
```

この設定を有効にすると、ホスト上のサービスへ接続しやすくなります。SSHで接続する場合の設定例です。

* SSH秘密鍵を格納したPAMユーザーレコードを作成する
* ホスト名を `host.docker.internal` 、ポートを `22` としたPAMマシンレコードを作成する
* PAM設定で上記のPAMユーザーを参照し、SSH接続を有効にする

#### ホスト経由でのKeeperゲートウェイサービスのアップグレード <a href="#upgrading-the-keeper-gateway-service-through-the-host" id="upgrading-the-keeper-gateway-service-through-the-host"></a>

KeeperPAMからホストにSSHできる環境では、ゲートウェイのコンテナ更新をバックグラウンドで走らせてアップグレードできます。

```
sudo podman pull docker.io/keeper/gateway:latest
nohup sudo podman-compose up -d keeper-gateway &
```

Keeperゲートウェイは外向き接続のみを確立し、インバウンドのファイアウォール規則は不要です。以下の外向き接続を許可する必要があります。

| 送信先エンドポイント                                                                                                                          | 必要なポート                                              | 補足                                                         |
| ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------- |
| **Keeperクラウド** `keepersecurity.[x]` エンドポイント: US: `.com` EU: `.eu` AU: `.com.au` JP: `.jp` CA: `.ca` US\_GOV: `.us`                  | TLS ポート443                                          | ネイティブプロトコル (SSH、RDPなど) 経由で対象インフラにアクセスするため、Keeperクラウドと通信します |
| **Keeperルーター** `connect.keepersecurity.[x]` エンドポイント: US: `.com` EU: `.eu` AU: `.com.au` JP: `.jp` CA: `.ca` US\_GOV: `.us`          | TLS ポート443                                          | セキュアなリアルタイムのWebSocket接続を確立するため、Keeperルーターと通信します            |
| **Keeper Stun/Turnサービス** `krelay.keepersecurity.[x]` エンドポイント: US: `.com` EU: `.eu` AU: `.com.au` JP: `.jp` CA: `.ca` US\_GOV: `.us` | TCPおよびUDPのポート3478。TCPおよびUDPのポート49152～65535への外向きアクセス | エンドユーザーのボルトと対象システムの間で、ゲートウェイ経由の安全な暗号化WebRTC接続を実現します        |

暗号化と復号はすべてゲートウェイ上で行われ、ゼロ知識の前提が保たれます。Keeperクラウドとの通信にはKeeperシークレットマネージャーAPIが用いられます。

***

#### ディスク容量の管理 <a href="#managing-disk-space" id="managing-disk-space"></a>

ゲートウェイを何度も更新すると、使われなくなったコンテナイメージがホストに残りやすくなります。ディスクを圧迫しやすいので、空き容量の確認と未使用イメージの整理を定期的に行うことを推奨します。

**ディスク使用量の確認**

Keeperゲートウェイのサーバーで、現在のディスク使用量を確認するには以下のコマンドを実行します。

```
df -h
```

このコマンドは、マウントされているすべてのファイルシステムの空き容量を読みやすい形式で表示します。特にPodmanがデータを保存するパーティション (通常、root権限ありでは `/var/lib/containers` 、root権限なしでは `~/.local/share/containers` ) に注目してください。

Podman固有のストレージ使用量は以下でも確認できます。

```
sudo podman system df
```

ディスクの空きが少なくなってきた場合 (たとえば使用率が80～90%を超えるなど)、古いイメージのクリーンアップを検討してください。

**古いイメージの削除**

Keeperゲートウェイを更新すると、Podmanは古いイメージをシステムに残します。未使用のイメージをすべて削除するには、以下のコマンドを使用します。

```
sudo podman image prune -a
```

* `-a` フラグにより、コンテナから参照されていないイメージだけでなく**すべての**未使用イメージが削除されます。
* 確認プロンプトが表示された場合は、`y` と入力します。

**出力例:**

```
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
...
Total reclaimed space: 4.8GB
```

この操作は、実行中のいずれのコンテナからも使用されていない古いイメージを安全に削除します。

***

#### トラブルシューティング <a href="#troubleshooting" id="troubleshooting"></a>

| 現象                                         | 想定される原因                           | すぐできる対処                                                                        |
| ------------------------------------------ | --------------------------------- | ------------------------------------------------------------------------------ |
| **`podman pull` が "manifest unknown" で失敗** | `docker.io/` のレジストリ接頭辞がない         | イメージ参照を `docker.io/keeper/gateway:latest` のように完全な形で指定する                        |
| **Fedora/RHELでPermission denied**          | ボリュームにSELinuxラベル (`:Z`) がない       | 各ボリュームマウントに `:Z` を追加し、コンテナを再起動する                                               |
| **コンテナがすぐ終了する**                            | `GATEWAY_CONFIG` が無効または期限切れ       | `sudo podman logs keeper-gateway` を実行して出力を確認し、トークン期限切れなら構成を再生成する               |
| **ボルトでゲートウェイがオンラインにならない**                  | DNSまたはファイアウォールが外向きHTTPSを遮断している    | ホストから `keepersecurity.com` および `connect.keepersecurity.com` のポート443に到達できるか確認する |
| **再起動後にサービスが停止する**                         | Podmanは再起動をまたいで `restart:` を適用しない | systemdの手順に従いサービスユニットを生成する                                                     |
| **rootレス: 127.0.0.1へのポートバインド**             | rootレスコンテナは既定でlocalhostにバインドする    | root付きで実行する (`sudo podman`) か、手前にリバースプロキシ (nginx/HAProxy) を置く                  |
| **"Error: name already in use"**           | 同名の停止済みコンテナが残っている                 | 新しいコンテナを作成する前に `sudo podman rm -f keeper-gateway` を実行する                        |

原因が分からないときは `sudo podman logs keeper-gateway` で末尾の数行を確認してください。エラーの手がかりが出力されていることが多いです。

***

#### 参考文献 <a href="#references" id="references"></a>

* DockerHubの一覧: <https://hub.docker.com/r/keeper/gateway>
* [Dockerでのゲートウェイ](/keeperpam/jp/privileged-access-manager/getting-started/gateways/gateway-with-docker.md)（クイックリファレンス）
* [LinuxへのDockerおよびDocker Composeのインストール](/keeperpam/jp/privileged-access-manager/references/installing-docker-on-linux.md)（クイックリファレンス）
* [Keeperコネクションマネージャー](/keeper-connection-manager/installation/podman-install.md)向けのPodmanインストール


---

# Agent Instructions: 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:

```
GET https://docs.keeper.io/keeperpam/jp/privileged-access-manager/getting-started/gateways/gateway-with-podman.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
