パスワード・API キー変更
PlantPulse AI はグラフストレージ(Neo4j)アカウントと内部サービスをつなぐ API キーをいくつか使います。
2026.09 から 内部 API キーはインストーラがインストールのたびに新規作成します(プレースホルダのときのみ)。2026.10 には保存
資格情報暗号化キー 2 つ(PI_COPILOT_SECRET_KEY ・ PI_DT_SECRET_KEY)も初回インストール時に併せて作成されます。Neo4j
パスワードは作成されないため、インストール時に入力する必要があります(プレースホルダが残っていると START=1 起動が拒否されます)。
それ以降は、漏えいが疑われるときや担当者が変わるときに本書の手順で変更します。
変更に使うツールは bin/passwd.sh ひとつです。platform・ai・studio 3 製品が 同じ名前・
同じ使い方で持っています。
/etc/kopens/plantpulse-ai.env ひとつこの製品の秘密情報は /etc/kopens/plantpulse-ai.env にあります。インストールディレクトリ内ではなく
repo ツリーの外で、権限は 0600 です。
🔴 compose/.env を書き換えないでください。 誰も読みません — スタックは変わりません。
passwd.sh が 書き込むファイルとスタックを起動するスクリプトが 読み込むファイルは同じひとつです。
そのため、ローテーションした値がそのまま反映されます。
アプリケーションアカウントとは別の話です
二つを混同しないでください。
| 何 | どこで変更するか | |
|---|---|---|
| アプリケーションアカウント | 人がログインするアカウント | 各アプリの管理画面で管理します |
| インフラ・API キー | DB アカウント、サービス間認証キー | 本書 — bin/passwd.sh |
本書は以下、インフラクレデンシャルのみを扱います。
何を変更できるか
まず一覧を見ます。引数なしで実行しても同じです。
cd /opt/kopens/plantpulse-ai-docker
bin/passwd.sh --list
キー・ID・現在値(先頭 3 文字のみ)・対象・その値がどこにあるかが併せて表示されます。
全体の値を確認したい場合は --list --show です。
| キー | 何 | どう変わるか |
|---|---|---|
PI_NEO4J_PASSWORD | Neo4j — LightRAG 知識グラフと工場グラフミラー、2 インスタンス | サーバー側アカウントが正本 — 両インスタンスで ALTER USER (cypher-shell) |
PI_RAG_API_KEY | RAG API キー — copliot-web・lightrag・rag-api が共用 | ファイル |
PI_VLLM_API_KEY | vLLM API キー — lightrag・insight-api が共用 | ファイル |
PI_LLM_API_KEY | LiteLLM マスターキー | ファイル |
PI_LITELLM_SALT_KEY | LiteLLM ソルトキー — 🔴 ローテーションしないでください(下記) | ファイル |
PI_INBOUND_API_KEY | バックエンド着信キー — rag・insight・parser・vision・デジタルスレッドが受け取り(空にするとこの5つが起動を拒否します)、コパイロット・管理コンソールバックエンドが同じ値で呼び出します | ファイル |
キー名は環境変数名そのままです。 neo4j や rag のような別名はありません — 別名を
作ると名前と変数をつなぐ表を別途管理する必要があり、その表は必ず実態とずれるためです。
PI_ で始まります名前は一度整理されました(2026-08-27)。フォールバックがないため旧名で渡すと
unknown key で拒否されます — 誤字と同様に扱われます(似た名前があれば提案されます)。
| 旧名 | 現在の名前 |
|---|---|
DOCKER_NEO4J_PASSWORD | PI_NEO4J_PASSWORD |
RAG_API_KEY | PI_RAG_API_KEY |
VLLM_API_KEY | PI_VLLM_API_KEY |
LITELLM_MASTER_KEY | PI_LLM_API_KEY |
LITELLM_SALT_KEY | PI_LITELLM_SALT_KEY |
PP_INBOUND_API_KEY | PI_INBOUND_API_KEY |
コンテナ内ではサービスごとに異なる名前(CO_INBOUND_API_KEY ・ TS_INBOUND_API_KEY …)で
見えますが、運用者が触る値は上記6つだけです。compose がひとつを複数の名前に
振り分けます。
空にすると二重に止まります。起動前判定(bin/lint-env.sh)が PI_INBOUND_API_KEY is empty … で スタックを 起動せず、
バックエンドサービス(rag・insight・parser・vision・デジタルスレッド)も自分のキーが空だと 起動を拒否します(以前は認証なしで
通過させていました)。認証なしで起動する道は開発用スイッチ PI_INBOUND_AUTH_DISABLED=true を意図的に与えたときのみで、キーがあれば
そのスイッチは無視されます → 環境変数設定
ただし CHANGE_ME_… プレースホルダは空値ではなくその検査を通過し、その文字列はすべてのインストールで同じです。変更する際は
必ず新しい値を入れ(--generate 推奨)、--list で値が入ったか確認してください。passwd.sh はファイルを書き換えた後にスタック
全体を再起動するので、このキーを受け取る側と呼び出す側が一斉に新しい値に揃います。
PP_* はここにはありませんPP_PG_PASSWORD ・ PP_CASSANDRA_PASSWORD ・ PP_REDIS_PASSWORD のような PP_* はプラットフォーム資格情報のためこの
製品では変更できません(サーバー側を変更する権限がありません)。一覧にもなく、渡すと誤字と同様に
拒否されます。接頭辞が所有者を表します — PP_ = プラットフォーム、PI_ = AI。
2026.10 からコンテナはプラットフォームアカウント・パスワードを 起動時にプラットフォームから受け取ります → 環境変数
設定。そのためプラットフォーム側で bin/passwd.sh を変更した後は AI の該当
コンテナを再起動すれば新しい値を受け取ります(bin/restart.sh)。起動前の DB プロビジョニングのような ホストスクリプトも
実行のたびにプラットフォームから受け取るため、AI 側で変更すべきものはありません — ホスト env にはプラットフォームアカウント・パスワードの行は
ありません。旧インストールに PP_PG_* ・ PP_CASSANDRA_* ・ PP_REDIS_PASSWORD の行が残っていれば読み込まれず、起動前判定が
削除するよう知らせます。
ホスト env に残るプラットフォームの秘密情報は PP_DATALAKE_ADMIN_API_KEY(資格情報を受け取るキー)と PP_API_TOKEN(プラットフォーム V5 API)
の2つです。プラットフォーム側でこの値が変わった場合は /etc/kopens/plantpulse-ai.env のその行を手動で合わせ、bin/restart.sh で
再作成します。
管理コンソール(PI_ADMIN_USER ・ PI_ADMIN_PASSWORD)と LiteLLM 管理画面(PI_LITELLM_UI_USERNAME ・
PI_LITELLM_UI_PASSWORD)は passwd.sh 一覧にありません。環境ファイルを書き換えて bin/up.sh で再
作成します → 初期パスワード変更
変更する
値を省略してプロンプトで入力するのが推奨経路です。 パスワードが ps 出力やシェル
履歴に残りません。2回入力させて一致を確認します。
bin/passwd.sh PI_INBOUND_API_KEY
値を引数として直接渡すこともできます。
bin/passwd.sh PI_RAG_API_KEY=<new-value>
複数を一度に渡すと再起動が1回にまとまります。 コミッショニング時はこの形式を使ってください。
bin/passwd.sh PI_VLLM_API_KEY=<new-value> PI_LLM_API_KEY=<new-value>
値をツールに生成させる — --generate
人が値を決める必要のないキーは ツールに生成させるのが最も安全です。何も入力
しないためシェル履歴・ps に残らず、インストーラと 同じ規則(長さ・系列接頭辞)で生成されます。
bin/passwd.sh --generate PI_INBOUND_API_KEY PI_RAG_API_KEY
生成された値は 先頭がどの系列のキーかを示します。ログや設定画面で断片だけ見えても何か 判別でき、誤った場所に貼り付けたこともすぐわかります。接頭辞は秘密ではなく、その後ろのランダム 部分の長さは短くなりません。
| キー | 接頭辞 |
|---|---|
PI_INBOUND_API_KEY | ppin_ |
PI_VLLM_API_KEY | ppvl_ |
PI_RAG_API_KEY | pprg_ |
PI_LLM_API_KEY | sk-pplm_ |
PI_ADMIN_SESSION_SECRET | ppss_ (インストーラのみが作成します — passwd.sh 一覧にはありません) |
--generate が 拒否するキーもあります。
PI_LITELLM_SALT_KEY— キーではなくソルトです(下記)PI_NEO4J_PASSWORDなど生成規則のないキー — 値を直接与えるかプロンプトで入力しますPI_ADMIN_PASSWORD・PP_*— 人がその値でログインするか、プラットフォームが定めた値と一致する必要がありますPI_COPILOT_SECRET_KEY・PI_DT_SECRET_KEY— 一覧にありません。ランダムな置き換えは保存値を破棄するのと 同じです(下記「保存資格情報暗号化キー」)
何が変わるかだけ確認し、何も変更しない場合は --dry-run です。
bin/passwd.sh --dry-run PI_RAG_API_KEY=<new-value>
実行すると変更項目と影響を先に表示し、[y/N] で確認を求めます。自動化で
確認をスキップするには --yes です。
スクリプト・cron のようにターミナルがない環境で値を省くとプロンプトを表示できずエラーに
なります。この場合は KEY=<value> 形式で渡してください。
PI_LITELLM_SALT_KEY はローテーションすると «静かに» 壊れますこの値は管理コンソールの モデル登録 画面で入力した外部プロバイダ API キーをゲートウェイ DB に暗号化する
鍵です。変更しても既に保存されているものを再暗号化しません — コンテナは healthy として起動しモデル
一覧もそのままですが、そのモデルの呼び出しだけが失敗します。 passwd.sh はこのキーを変更しようとすると確認前に
警告を表示します。インストール時に一度決め、バックアップ対象に入れてください。
実行すると何が起こるか
順序が決まっています。
| 順序 | 処理内容 |
|---|---|
| 1 | サーバー側アカウントが正本であるものから — PI_NEO4J_PASSWORD の場合、Neo4j 2インスタンス両方でアカウントを先に変更します。変更前に両方が現在値でログインできるか確認し、片方でも失敗すれば何も変更せず停止します |
| 2 | /etc/kopens/plantpulse-ai.env を新しい値に更新します(権限 0600 維持) |
| 3 | docker compose up -d --wait — サービスを再作成して新しい値を反映させます(compose ファイルと環境ファイルを明示して呼び出すため、どのディレクトリから実行しても同じです) |
サーバー側を先に変更し、ファイルを合わせる順序です。逆にすると、サーバーは旧値のままファイルは新しい値になり、 再起動まで認証が壊れた状態のままになります。
この間 AI 経路が切断されます。 点検ウィンドウで実施してください。
途中で失敗した場合
| どこで | 状態 | 対応 |
|---|---|---|
| 1段階(Neo4j アカウント変更) | ファイルは触れず中断します。最初のインスタンスは変更され2つ目で失敗した場合、すでに変更済みのインスタンス名を表示します | bin/status.sh で plantpulse-neo4j ・ plantpulse-digital-thread-neo4j が立っているか確認します。片方だけ変更されていれば、そちらを旧値に戻した後(ALTER CURRENT USER)再実行します |
| 3段階(再起動) | ファイルは すでに新しい値です | bin/status.sh で状態を確認し、起動失敗の原因を処理 |
保存資格情報暗号化キー — _PREVIOUS で置き換えます
PI_COPILOT_SECRET_KEY(コパイロット)・PI_DT_SECRET_KEY(デジタルスレッドコネクタ登録簿)は画面から入力した
資格情報(外部コネクタ認証値・LLM キー・SMTP パスワード・Slack Webhook・Web Push 秘密鍵、コネクタ資格情報)を
DB に封印する鍵です。passwd.sh 一覧にはありません — 新しい値だけ入れると旧値で封印したものを解く
ことができないためです。置き換えは旧値も併せて与え、«再封印させる» 手順で行います。
| 順序 | 処理内容 |
|---|---|
| 1 | 旧値を PI_COPILOT_SECRET_KEY_PREVIOUS に(カンマ区切りで複数可)、新しい値(openssl rand -base64 32)を PI_COPILOT_SECRET_KEY に設定します |
| 2 | bin/restart.sh plantpulse-copilot-web — 起動時に保存値を新しいキーで再封印します。ログの [SECRETS] sealed at rest … で件数を確認します |
| 3 | PI_COPILOT_SECRET_KEY_PREVIOUS を空にしてもう一度再作成します |
PI_DT_SECRET_KEY も同様です — PI_DT_SECRET_KEY_PREVIOUS に旧値を設定し plantpulse-digital-thread-api
を再作成した後に空にします。
キーが変わったのに旧値がないと、コパイロットは Stored secrets cannot be decrypted で 起動を拒否し、
封印された行とそれを空にする SQL をログに表示します — 静かに認証なしで呼び出すことはしません。キーを紛失した場合は、その
資格情報を画面から再入力するしかありません。env ファイルのバックアップにこの2つの値が含まれているか確認してください。
確認
bin/passwd.sh --list
現在値の先頭3文字が変わっていれば反映されています。デフォルト値のままかひと目でわかるよう先頭3文字を 残しています。