• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

sops

date: 2026-06-26 excerpt: Mozilla SOPSを用いたYAML/JSON等の暗号化と復号方法

tag: sopssecuritykmsagegit


sops

概要

  • ファイルの暗号化と復号を行うオープンソースツール
  • 2015年にMozillaで開始されたプロジェクトで、2023年にCNCF(Sandbox)へ寄贈され、現在は getsops コミュニティが開発している
  • YAML、JSON、ENV、INI、バイナリ等のフォーマットに対応しており、値のみを暗号化してキーを平文のまま残すことができるため、Git等のバージョン管理と相性が良い
  • 暗号化の鍵として、AWS KMS、GCP KMS、Azure Key Vault、HashiCorp Vault等のクラウドKMSのほか、ageやPGP等のローカル鍵を使用できる

インストール

GitHub Releasesからバイナリを取得する場合

$ curl -LO https://github.com/getsops/sops/releases/download/v3.13.1/sops-v3.13.1.linux.amd64
$ chmod +x sops-v3.13.1.linux.amd64
$ sudo mv sops-v3.13.1.linux.amd64 /usr/local/bin/sops

Homebrewを使用する場合

$ brew install sops

鍵(Key Provider)の準備

ageを使用する場合

ここではローカルで手軽に利用できるageを用いたセットアップ手順を示す

ageのインストールと鍵作成

$ brew install age
$ age-keygen -o key.txt
# 作成された公開鍵と秘密鍵を確認する
$ cat key.txt
# public key: age1...

環境変数の設定

# 復号時に秘密鍵を参照するための環境変数
$ export SOPS_AGE_KEY_FILE=$(pwd)/key.txt

GCP KMSを使用する場合

必要な権限

  • 実行元のアカウント(ユーザーやサービスアカウント)に対象キーへの roles/cloudkms.cryptoKeyEncrypterDecrypter ロールが必要

基本的な使い方

ageを使用する場合

暗号化

公開鍵を指定してファイルを暗号化する

$ sops -e --age age1... secrets.yaml > secrets.enc.yaml

復号

環境変数に秘密鍵が設定されていれば、自動的に鍵を検出して復号が行われる

$ sops -d secrets.enc.yaml > secrets.dec.yaml

GCP KMSを使用する場合

暗号化

対象キーのリソースパスを指定して暗号化する

$ sops --gcp-kms projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] -e secrets.yaml > secrets.enc.yaml

復号

暗号化ファイル内のメタデータに鍵情報が記録されているため、復号時にキーを指定する必要はない 実行環境に対象キーの復号権限を持つ認証情報(Application Default Credentials等)があれば、そのまま復号できる

$ sops -d secrets.enc.yaml > secrets.dec.yaml

インプレース編集

暗号化されたファイルを直接テキストエディタで開き、保存時に自動で再暗号化する

$ sops secrets.enc.yaml
  • 環境変数 $EDITOR で指定されたエディタが起動する

設定ファイル(.sops.yaml)の利用

プロジェクトのルートディレクトリに .sops.yaml を配置することで、暗号化時に使用する鍵のルールを自動化できる

creation_rules:
  # .enc.yaml で終わるファイルに適用するルール
  - path_regex: \.enc\.yaml$
    age: age1...
  # 特定のディレクトリ配下のファイルをGCP KMSで暗号化するルール
  - path_regex: prod/.*
    gcp_kms: projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key

設定ファイルがある場合、個別にオプションで鍵を指定せずに暗号化を実行できる

$ sops -e secrets.enc.yaml

Gitとの連携

暗号化したファイルをリポジトリで管理する際、Gitの差分表示(git diff)で平文の差分を確認できるようにする

gitattributesの設定

プロジェクトルートの .gitattributes に以下を記述する

*.enc.yaml diff=sopsdiffer

git configの設定

sopsを差分表示ツールとして登録する

$ git config diff.sopsdiffer.textconv "sops -d"
  • この設定により、git diff を実行した際に対象の暗号化ファイルが一時的に復号され、平文の差分が表示される

関連

  • GCP Secret Manager
  • git

参考

  • getsops/sops
  • SOPS Documentation
  • Coveo/sops-git-diff


sopssecuritykmsagegit Share Tweet