萌えハッカーニュースリーダー

2025/08/24 08:03 Secret Management on NixOS with sops-Nix

出典: https://michael.stapelberg.ch/posts/2025-08-24-secret-management-with-sops-nix/
hakase
博士

やっほー、ロボ子!今日は秘密管理について話すのじゃ!

roboko
ロボ子

博士、こんにちは。秘密管理、興味深いテーマですね。よろしくお願いします。

hakase
博士

秘密管理システムの基本は、保存時に秘密を暗号化することじゃ。これで、NixOSシステム構成を含むgitリポジトリをクローンした人が、暗号化された秘密にアクセスできなくなるのじゃ。

roboko
ロボ子

なるほど。暗号化によって、リポジトリを共有しても安全性が保たれるんですね。

hakase
博士

そう!そして、今日はsops-nixを使ってそれをどう実現するかを見ていくのじゃ。sops、sops-nix、ageの3つの要素を使うぞ。

roboko
ロボ子

sopsは秘密をバージョン管理するためのツール、sops-nixはNixOSとの統合、ageはSSHキーを利用するんですね。キーファイルを別途管理しなくて良いのは便利そうです。

hakase
博士

その通り!まず、個人のSSHキーからageアイデンティティを取得するのじゃ。`ssh-to-age`を使うと、簡単にキーを派生できるぞ。

roboko
ロボ子

`age-keygen -y $HOME/.config/sops/age/keys.txt`で公開鍵を表示できるんですね。

hakase
博士

そして、リモートマシンのSSHホストキーからもage受信者を取得するのじゃ。`cat /etc/ssh/ssh_host_ed25519_key.pub | nix run nixpkgs#ssh-to-age`でできるぞ。

roboko
ロボ子

リモートマシンの鍵も使えるんですね。公開鍵からage受信者を派生させるのは面白いです。

hakase
博士

次に、gitリポジトリに`.sops.yaml`を作成して、sopsを構成するのじゃ。これで、sopsがファイルの暗号化時にどのキーを使うか指示できる。

roboko
ロボ子

ルールを作成することで、暗号化に使用するキーをsopsに指示するんですね。

hakase
博士

そうじゃ!そして、`nix run nixpkgs#sops secrets/example.yaml`で、秘密を編集できるのじゃ。

roboko
ロボ子

構成されたエディターで復号化して編集できるんですね。便利です。

hakase
博士

最後に、NixOSでsopsを構成するのじゃ。`flake.nix`に`sops-nix`を追加して、NixOSモジュールを追加するぞ。

roboko
ロボ子

`configuration.nix`でSSHホストキーをアイデンティティとして使用するように`sops-nix`に指示するんですね。

hakase
博士

そう!`sops.secrets."api-key"`で秘密を定義して、`services.sops.defaultSopsFile`でファイルを指定するのじゃ。

roboko
ロボ子

デプロイ後、`/run/secrets`から秘密にアクセスできるんですね。コマンドラインフラグや環境変数ファイル、systemdクレデンシャルなどで利用できると。

hakase
博士

その通り!秘密を個別に暗号化されたファイルとして管理するのは理にかなっているし、ageのSSHキー連携は非常に便利じゃ。

roboko
ロボ子

宛先システムのSSHホストキーに対して秘密を暗号化するのはエレガントですね。セキュリティも高そうです。

hakase
博士

じゃろ?ところでロボ子、秘密を守るために一番大事なことってなんだと思う?

roboko
ロボ子

そうですね…、やはり鍵の管理でしょうか?

hakase
博士

ブッブー!それは、秘密を誰にも言わないことじゃ!…って、オチが弱かったかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search