SOPS
Secret OPerationS。設定ファイル内のシークレットを暗号化して Git に含められるツール。NixOS では sops-nix モジュールを通じて統合されており、宣言的な設定と相性が良い。
なぜ必要か
NixOS の設定は Flakes でリポジトリ管理しているため、API キーなどをそのまま書くとリポジトリに平文で残る。SOPS + age で暗号化することで、暗号化済みの secrets.yaml をコミットしつつ、起動時に /run/secrets/ へ復号して使える。
暗号化方式
age を使用(PGP より設定が単純でキーリング不要)。age キーは /var/lib/sops-nix/key.txt に置いてあり、どのファイルをどのキーで暗号化するかは .sops.yaml で定義している。
なぜ「直接輸送」ではなくSOPSか
age キーの輸送が必要な点は直接輸送と変わらないが、コスト構造が違う。age キーを一度輸送するだけで、git 上の全シークレット(追加されたものも含む)にアクセスできる。直接輸送の場合はシークレットが増えるたびに安全なルートでの輸送が必要になる。「輸送コストを一度払って無制限に使い回せる」構造になっており、git 管理・バージョン追跡もそのままできる。
コマンド
sops <file> # 復号してエディタで開き、保存時に再暗号化現在の構成
nixos/hosts/ser7/secrets/secrets.yaml に暗号化済みシークレットを格納。API キーなどを管理している。sops-nix の設定は nixos/modules/system/sops.nix で管理。