Sopsを触ってみた
Sops
今年から社内でInfra勉強会が始まりました。その中でSopsという技術について学んだのでアウトプットを兼ねて紹介します👏
紹介すること/紹介しないこと
- 紹介すること
- Sopsの概要
- 基本的な使い方
- 紹介しないこと
- 実際の運用やベストプラクティス
- 関連サービス(GCP KMSなど)
対象プロダクトの紹介
Sopsとは?
暗号化ファイルのエディターです。
YAML、JSON、ENV、INI、BINARY 形式をサポートしており、
AWS KMS、GCP KMS、Azure Key Vaultなど、複数のクラウドサービスに対応しています。
リポジトリはこちら→https://github.com/getsops/sops
(各サービスに対する使い方が割と丁寧に書いてあります🙏)
Sopsを使うメリット
メリットとしては、以下です。
- jsonやyamlの形式を維持したまま暗号化できる
- 機密情報を暗号化したファイルで取り扱うことができるので、他のアプリケーションのソースコードと同じようにGitによるバージョン管理ができる
Sopsを使ってみる
1.事前準備
今回は、画像のように事前にGCP KMS上に事前に秘密鍵を用意してある状態とします。
(※GCP KMSのようなキーマネジメントシステムは必須ではありませんが、今回はGCP KMSを利用します)
まずは、サンプルのSecretファイルを作成します。
{
"id": "sample_id",
"password": "sample_password"
}
2.暗号化する
GCP KMSの秘密鍵を使用して、対象ファイルを暗号化します。
$ sops -e --gcp-kms [リソースID(rojects/プロジェクト名/locations/ロケーション名/keyRings/キーリング名/cryptoKeys/鍵名)] sample.json > sample.enc.json
$ sops -e --gcp-kms projects/sample-project/locations/asia-northeast1/keyRings/sops/cryptoKeys/main sample.json > sample.enc.json
暗号化によって以下のような形式のファイルが作成されます。
id、passwordに加え、sopsというkeyが追加されています。
{
"id": "ENC[AES256_GCM,data:<暗号部分>,type:str]",
"password": "ENC[AES256_GCM,data:<暗号部分>,type:str]",
"sops": {
"kms": null,
"gcp_kms": [
{
"resource_id": "projects/sample-project/locations/asia-northeast1/keyRings/sops/cryptoKeys/main",
"created_at": "2024-03-07T09:23:48Z",
"enc": "<暗号部分>"
}
],
"azure_kv": null,
"hc_vault": null,
"age": null,
"lastmodified": "2024-03-07T09:46:37Z",
"mac": "ENC[AES256_GCM,data:<暗号部分>,type:str]",
"pgp": null,
"unencrypted_suffix": "_unencrypted",
"version": "3.8.1"
}
}
3.編集する
編集する際は、以下のコマンドで編集モードになり、vimと同様の操作で編集できます。
$ sops sample.enc.json
今回は、sample_passwordをsample1_passwordに変更してみます。
{
"id": "sample_id",
"password": "sample1_password"
}
また、編集前と編集後をgit diffで差分を確認すると、暗号化されたパスワードのvalueの部分が変わっていることが確認できます。
(編集前のsample.enc.jsonをver1.json、編集後のsample.enc.jsonをver2.jsonとして比較) |
4.復号化する
複合化する際は、こちらのコマンドを打つだけです。
$ sops -d sample.enc.json > decrypt_copy.json
sample.enc.jsonを複合化したdecrypt_copy.jsonが作成されます。
{
"id": "sample_id",
"password": "sample_password"
}
まとめ
今回は、Sopsについて紹介させていただきました。
暗号化ファイルのエディターと聞くと難しそうというイメージを持っていましたが、触ってみると簡単に暗号化できて便利だな、と感じました👏
今回は、基本的な内容のみ紹介しましたが、業務でもっと使って使いこなしていきたいです。
参考
Discussion