SOPS vs Sealed Secrets: どちらの GitOps シークレットを選ぶか
SOPS は任意のシークレットファイルを KMS/age/PGP で暗号化し、Sealed Secrets は SealedSecret CRD をクラスタ内で Secret に復号する Kubernetes コントローラです。
SOPS は汎用的です。任意の構造化ファイルを暗号化し、多くのバックエンドや CI ツールと統合し、鍵を持っている場所ならどこでも復号します。Sealed Secrets は Kubernetes 固有です。クラスタの公開鍵で SealedSecret に暗号化し、クラスタ内のコントローラだけが復号でき、plaintext を完全に Git の外に保ちます。SOPS は環境をまたぐ柔軟性で勝り、Sealed Secrets は緊密な Kubernetes ネイティブの GitOps モデルで勝ります。
| SOPS | Sealed Secrets | |
|---|---|---|
| スコープ | 任意のファイル | Kubernetes CRD |
| 復号 | 鍵があればどこでも | クラスタ内コントローラ |
| バックエンド | KMS、age、PGP | クラスタ鍵ペア |
| GitOps への適合 | 幅広い | K8s ネイティブ |
| 最適な用途 | 環境をまたぐシークレット | K8s の GitOps シークレット |
ユースケースとスコープ
SOPS は柔軟な鍵バックエンドで多くの環境やファイル種別にわたってシークレットを管理するチームに適しています。Sealed Secrets は、ターゲットクラスタだけが unseal できる暗号化された manifest を Git に置きたい、Kubernetes 専用の GitOps に適しています。
ops と CI への適合
SOPS は CI またはデプロイ時に鍵で復号し、Sealed Secrets はクラスタ内のコントローラに依存するため、CI は暗号化のために公開鍵だけを必要とします。より高速なマネージド runner が、どちらのフローでも暗号化/復号と manifest ビルドのステップを短縮します。
Decide with your own numbers, not a feature table
Feature comparisons age badly and rarely decide anything, because both tools in a mature category can do the job. What differs is how each behaves on your repository, and that takes one afternoon to measure.
# time a cold install with each candidate, cache cleared
hyperfine --prepare "rm -rf node_modules" --warmup 1 \
"<tool-a> install" "<tool-b> install"
# and the thing CI actually pays for: a cold run with no local cache
docker run --rm -v "$(pwd):/w" -w /w node:22 sh -c "<tool> install"What actually changes when you switch
- Lockfile format. A switch is a one-way door for anyone still on the old tool until everyone migrates, so plan it as a single coordinated change.
- Resolution strictness. Tools differ on whether an undeclared transitive import works, and the stricter one will surface latent bugs as new failures.
- CI cache configuration. The cache path and key differ per tool; carrying over the old ones silently disables caching.
- Everyone on the team and every runner must move together. Pin the version so they cannot drift.
結論
柔軟で環境をまたぐ暗号化シークレットファイルが欲しいなら SOPS。クラスタだけが復号できる Kubernetes ネイティブなシーリングが欲しいなら Sealed Secrets。幅広さは SOPS を好み、K8s ネイティブの GitOps は Sealed Secrets を好みます。