共有可能な Compose 定義から値を排除し、すべてのバックアップや診断エクスポートを内容スキャンに合格するまで機密情報として扱うことで、秘密情報の漏えいを防ぎます。
Home Assistant は実行時に認証情報を必要とするため、ホストへの完全なアクセス権を持つ管理者から認証情報を見えなくするローカル構成はありません。現実的な目標はより限定的です。誤ったコミット、サポートへのアップロード、広範なバックアップコピー、不要なコンテナアクセスを防ぎます。各値がスタックのどこから入るかを洗い出し、リテラルを管理された秘密情報ソースに置き換え、秘密情報そのものを表示せずにエクスポートされた成果物をテストします。
秘密情報が漏えいする可能性のある場所をすべて把握する
API トークン、データベースパスワード、MQTT 認証情報、Webhook URL、暗号化キー、秘密証明書、復旧キーを一覧化します。それぞれについて、実行時の利用先、保存パス、ファイル所有者、バックアップへの含有状況、リポジトリの追跡状況、ログへの露出、ローテーション方法を記録します。値そのものをインベントリにコピーしないでください。
秘密情報ファイルは値を整理するものですが、ホストを読み取れるアカウントからは依然として平文で見えます。この平文アクセス境界があるため、分離によって主に減らせるのは偶発的な開示であり、完全な権限を持つ攻撃者を阻止することではありません。
Compose YAML 内のリテラル値、追跡対象の環境ファイル、広範囲から読み取り可能な構成ディレクトリ、または内容が不明なエクスポートは、いずれも不合格です。すべての露出経路に担当者と是正策が割り当てられるまで、共有とリポジトリへのプッシュを停止します。
実行時の秘密情報をデプロイ定義から分離する
Compose 内のリテラルを、付与権限を最小限にしたファイルベースの秘密情報、またはデプロイ環境がサポートする別の秘密情報ソースに置き換えます。各サービスには、そのサービスが使用する値だけを渡し、可能な限り読み取り専用でマウントします。ホスト上の権限は、実行時の ID と管理者に限定します。
環境変数の値は、検査、プロセスコンテキスト、ログを通じて露出する可能性があります。一方、ファイルベースの秘密情報マウントを使うと、認証情報を受け取るコンテナを限定できます。ローカルの秘密情報ファイルにも、依然として権限制御が必要です。
まずプレースホルダーで検証し、レンダリングされた Compose 構成を調べて誤ったリテラルがないことを確認します。次に 1 つのサービスを起動し、割り当てられた秘密情報だけを読み取れることを確認します。変更によってアプリケーションが値をエコーしたり、ディレクトリへの広範なアクセス権が必要になったりした場合は、ロールバックします。
バックアップとサポートバンドルの内容を管理する
範囲が別途証明されていない限り、バックアップには認証情報が含まれるものとして分類します。信頼できるストレージの境界外に出るコピーは暗号化し、復旧キーは別に保管します。保持期間とアクセスを制限し、サポート上の質問に答えるためにマスク済みのログ抜粋で十分な場合は、完全な構成アーカイブを決して添付しないでください。
構成保護ワークフローを使用して復旧可能性を維持しながら、安全なストレージと共有可能なデプロイ資料を分離します。
公開前に、ファイル名と抽出したテキストをスキャンし、既知のキー名、トークンのプレフィックス、非公開 URL、メールアドレス、証明書、管理対象のテストマーカーの正確なハッシュを確認します。スキャンに合格したことは公開のゲートであって、未知の形式の秘密情報が存在しないことの証明ではありません。
露出した秘密情報をローテーションし、予防経路を実証する
使用可能な値がリポジトリ、チケット、チャット、公開リンク、または信頼できないバックアップに入った場合は、まず無効化またはローテーションします。目に見えるコピーを削除しても、コピーや履歴は無効になりません。影響を受けたサービスとローテーション時刻を記録しますが、古い値は保存しないでください。
無害なカナリア秘密情報を作成し、新しい経路でデプロイします。通常の Compose レンダリング、バックアップ、診断バンドルを生成し、その後、それらの成果物を検索します。実行時にはカナリアが渡される一方、共有可能な成果物には、意図的に保護されたバックアップ境界の外側でカナリアが露出しないことを確認します。
実際の秘密情報がデプロイ定義とリポジトリに存在せず、保護されたバックアップに別の復旧経路があり、成果物のスキャンに合格し、露出した認証情報がローテーション済みになったら完了です。サードパーティー連携が秘密情報の値をログに記録する場合、またはホストへの広範なアクセスなしに限定的な秘密情報ソースを利用できない場合は、エスカレーションします。
サポートとヒント
もっと読む

同時稼働するコンテナ向けに Immich のデータベース接続を最適化する方法
まず max_connections を増やさないでください。Immich のセッション数を測定し、すべてのコンテナの需要を合計し、管理用の余裕を確保したうえで、実証されたボトルネックだけを調整してください。

Immichでジョブやインポートの重複を防ぐ方法
重複するジョブと重複アセットを分離します。正規の取り込み経路を1つに統一し、再試行とパス変更を制御してから、小規模なコホートで再エントリーをテストします。

データベースのボリュームがいっぱいになった後に Immich を修復する方法
空き容量を確保するためにPostgreSQLのWALを削除しないでください。Immichへの書き込みを停止し、データベースの状態を保持したまま安全に容量を追加し、PostgreSQLを復旧してから、再発を防止してください。

