メインコンテンツまでスキップ

パスワード・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_PASSWORDNeo4j — LightRAG 知識グラフと工場グラフミラー、2 インスタンスサーバー側アカウントが正本 — 両インスタンスで ALTER USER (cypher-shell)
PI_RAG_API_KEYRAG API キー — copliot-web・lightrag・rag-api が共用ファイル
PI_VLLM_API_KEYvLLM API キー — lightrag・insight-api が共用ファイル
PI_LLM_API_KEYLiteLLM マスターキーファイル
PI_LITELLM_SALT_KEYLiteLLM ソルトキー — 🔴 ローテーションしないでください(下記)ファイル
PI_INBOUND_API_KEYバックエンド着信キー — rag・insight・parser・vision・デジタルスレッドが受け取り(空にするとこの5つが起動を拒否します)、コパイロット・管理コンソールバックエンドが同じ値で呼び出しますファイル

キー名は環境変数名そのままです。 neo4j や rag のような別名はありません — 別名を 作ると名前と変数をつなぐ表を別途管理する必要があり、その表は必ず実態とずれるためです。

6 つすべて PI_ で始まります

名前は一度整理されました(2026-08-27)。フォールバックがないため旧名で渡すと unknown key で拒否されます — 誤字と同様に扱われます(似た名前があれば提案されます)。

旧名現在の名前
DOCKER_NEO4J_PASSWORDPI_NEO4J_PASSWORD
RAG_API_KEYPI_RAG_API_KEY
VLLM_API_KEYPI_VLLM_API_KEY
LITELLM_MASTER_KEYPI_LLM_API_KEY
LITELLM_SALT_KEYPI_LITELLM_SALT_KEY
PP_INBOUND_API_KEYPI_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_KEYppin_
PI_VLLM_API_KEYppvl_
PI_RAG_API_KEYpprg_
PI_LLM_API_KEYsk-pplm_
PI_ADMIN_SESSION_SECRETppss_ (インストーラのみが作成します — 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 維持)
3docker 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 に設定します
2bin/restart.sh plantpulse-copilot-web — 起動時に保存値を新しいキーで再封印します。ログの [SECRETS] sealed at rest … で件数を確認します
3PI_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文字を 残しています。


関連ドキュメント​