# セキュリティ

> PentAGIインストールにおける認証情報、HTTPS、サインイン、およびネットワーク公開の設定。

## [デフォルト値の変更](https://pentagi.com/ja/docs/configuration/security/#change-the-defaults)

新規インストールでは、ローカル管理者`admin@pentagi.com`がパスワード`admin`で作成され、初回サインイン時に変更する必要があります。パスワードを紛失した場合、アカウントが引き続き`admin@pentagi.com`アドレスを使用している限り、インストーラーのメンテナンスメニューからリセットできます。

初回起動前に、`.env`内のこれらの値を設定してください（インストーラーによりソルトとパスワードが自動生成されます）。PostgreSQLとNeo4jはデータボリュームの作成時にのみ認証情報を読み込むため、後から変更すると接続が切断されます。

| 変数                                                   | 用途                                                                                            |
| ---------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `COOKIE_SIGNING_SALT`                                | セッションCookieとAPIトークンの署名に使用 — ランダムな値を設定してください                                                   |
| `PENTAGI_POSTGRES_USER`, `PENTAGI_POSTGRES_PASSWORD` | PostgreSQLの資格情報                                                                               |
| `NEO4J_PASSWORD`                                     | [Knowledge graph](https://pentagi.com/ja/docs/glossary/#knowledge-graph)用のNeo4jパスワード。`NEO4J_USER`は`neo4j`のままにしてください |
| `PUBLIC_URL`                                         | ユーザーがアクセスするURL（例: `https://pentagi.example.com`）                                              |

稼働中のインストール環境では、まず PostgreSQL または Neo4j 内でデータベースのパスワードを変更し、その後 `.env` で変更してください。

## [HTTPS](https://pentagi.com/ja/docs/configuration/security/#https)

PentAGIはポート8443で自己署名証明書を用いてHTTPSを提供します。独自の証明書を使用する場合は、`SERVER_SSL_CRT`と`SERVER_SSL_KEY`を設定し、`docker-compose.yml`にファイルをマウントしてください。

## [ユーザーとサインイン](https://pentagi.com/ja/docs/configuration/security/#users-and-sign-in)

サインアップフォームはありません。管理者は、サインイン済みのブラウザセッションからUsers API（`/api/v1/users/`）を通じてローカルユーザーを管理します（APIトークンでは403エラーとなります）。ロールによって各ユーザーが参照・変更できる範囲を制限します。ローカルユーザーは、**Settings → Account** で自身のメールアドレスとパスワードを変更できます。

GitHubまたはGoogleサインインを設定すると、プロバイダーで検証されたメールアドレスが既存のアカウント（ローカルアカウントを含む）と一致するログインはそのアカウントとそのロールでサインインし、その他のログインはデフォルトのユーザーロールで新しいアカウントを取得します。すべてのインストールには管理者 `admin@pentagi.com` が初期状態で存在するため、サインインを有効にする前に **Settings → Account** でこのアドレスを自分が管理するものに変更し、ドメイン限定のGoogle Workspaceアプリなど、新規アカウントの作成が許容できる環境でのみ有効にしてください。

GitHubおよびGoogleサインインはOAuth経由で利用できます。コールバック`${PUBLIC_URL}/api/v1/auth/login-callback`でアプリを登録し、その資格情報を追加してください。

```bash
PUBLIC_URL=https://pentagi.example.com
OAUTH_GITHUB_CLIENT_ID=your_github_client_id
OAUTH_GITHUB_CLIENT_SECRET=your_github_client_secret
```

## [ネットワークの露出](https://pentagi.com/ja/docs/configuration/security/#network-exposure)

デフォルトでは、PentAGI の Web インターフェースは `127.0.0.1` でのみリッスンします。他のマシンからアクセスするには：

```bash
PENTAGI_LISTEN_IP=0.0.0.0
PENTAGI_LISTEN_PORT=8443
PUBLIC_URL=https://192.168.1.100:8443
CORS_ORIGINS=https://localhost:8443,https://192.168.1.100:8443
```

`PUBLIC_URL`と`CORS_ORIGINS`には実際のアドレスを使用し、`0.0.0.0`は絶対に使用しないでください。`docker compose up -d --force-recreate`でコンテナを再作成し、ファイアウォールでポート8443を開放してください。

リバースプロキシの背後で運用する場合は、`TRUSTED_PROXIES` にプロキシのアドレスまたは CIDR をカンマ区切りで設定してください。そうしないと、すべてのリクエストがプロキシから送信されているように見なされ、アドレスあたりのサインイン制限（5分間に30回の失敗した試行で、その後15分間のロックアウト）が全ユーザーで共有されてしまいます。

各[flow](https://pentagi.com/ja/docs/glossary/#flow)の[sandbox](https://pentagi.com/ja/docs/glossary/#sandbox)コンテナは、リバースシェルなどの帯域外コールバックのために2つのポートを公開します。これらは`DOCKER_PORTS_BASE`から始まる2000個のポート（デフォルト`28000`）から割り当てられ、[agent](https://pentagi.com/ja/docs/glossary/#agent)がターゲットにコールバック先として指示するアドレスである`DOCKER_PUBLIC_IP`にバインドされます。

デフォルトでは `DOCKER_PUBLIC_IP` は `0.0.0.0` です。ポートは Docker ホストのすべてのインターフェースでリッスンし、agent はパブリックアドレスを自身で解決します。ホストがそのアドレスを所有しており、ターゲットから到達可能な場合にのみ、特定のアドレスに設定してください。NAT の背後では、デフォルトのままにしてください。Docker が公開するポートはホスト上の ufw や firewalld のルールをバイパスするため、クラウドのセキュリティグループなどホストの前面にあるファイアウォールで範囲を制限するか、Docker の `DOCKER-USER` チェーンのルールで制限してください。

`PROXY_URL` は、バックエンドからモデルプロバイダー、埋め込みプロバイダー、検索 API、および更新チェックへの呼び出しをプロキシ経由でルーティングし、インストール環境を外部ネットワークから隔離するのに役立ちます。Ollama、vLLM、SearXNG などのセルフホスト型エンドポイントもこれを経由します。`NO_PROXY` の例外はないため、プロキシはそれらに到達できる必要があります。agent がコマンドを実行する flow の sandbox コンテナ、ブラウザツールのためにウェブページを開くスクレイパー、および Graphiti サービスはこれを使用しないため、ネットワークレベルでそれらの外向きトラフィックを制限してください。GitHub または Google でのサインイン、およびバンドルされたスタック外の Langfuse や OpenTelemetry エンドポイントへの呼び出しもこれを使用しません。また、Docker デーモンは独自のプロキシ設定を使用してイメージをプルします。

## [更新チェック](https://pentagi.com/ja/docs/configuration/security/#update-check)

サーバーは起動後2分以内、その後3時間ごとに `update.pentagi.com` に新しいビルドが利用可能かどうかを問い合わせます。リクエストにはインストールID、設定されている場合はライセンスキー、バージョンとプラットフォーム、およびインストールの概要（設定された provider とサインインの種類、いくつかの機能スイッチ、ユーザー、flow、[task](https://pentagi.com/ja/docs/glossary/#task)、コンテナ、プロンプト、APIトークン、[tool call](https://pentagi.com/ja/docs/glossary/#tool-call) の数、および provider 種類ごとのトークンとコストの合計）が含まれますが、名前、住所、プロンプトや flow の内容は含まれません。`UPDATE_CHECK_INTERVAL=0` でこれを無効にします。インストーラーは起動するたび、および Apply Changes、Update、Start、Stop などの各アクションを実行するたびに、インストールされたイメージと各スタックの状態を送信し、PentAGI が実行中は同じ概要も送信します。`UPDATE_CHECK_INTERVAL` はこれに影響しません。

> [!WARNING]
> `pentagi`コンテナはDockerソケットを通じてコンテナを管理するため、root権限で実行されます。より強力な分離が必要な場合は、[tools](https://pentagi.com/ja/docs/glossary/#tool)を別の[worker node](https://pentagi.com/ja/docs/deployment/worker-node/)で実行してください。