はじめに
CloudNativeを主に扱っており、以前ArgoCDでKusomize-SOPS(KSOPS)を導入しました。
導入当時は日本語記事がなかったので色々と模索しながら実装したので、日本語での記事を書いてみようと思います。
ただ、「そもそもKSOPSって何?」という方も多いと思うので、まずはその紹介から行います。
KSOPSとは?
KSOPSとは、簡単に言えば「SOPSで暗号化したファイルをkustomizeで復号する」ための仕組みです。
SOPSについても簡単に説明しますと、yamlやjsonといった様々な形式のファイルを暗号化するためのツールです。これは形式を維持したまま暗号化できるメリットがありますが、暗号化と復号をそれぞれsopsコマンドで行う必要があります。そのため、暗号化をしない人からするとSOPSをインストールしなければならず、面倒です。
この問題を解決するために生まれたのがKSOPSです。
これを使うことで、暗号化されたファイルをkustomizationで復号してくれます。
KSOPSのデモ
SOPSでの暗号化
先ほども述べた通り、KSOPSを使うにはSOPSで暗号化する必要があります。
以下のようなsecretリソースを暗号化し、そのままデプロイすることを想定します。
apiVersion: v1
kind: Secret
metadata:
name: test_secret
type: Opaque
data:
username: test_user
password: test_password
まずは.sops.yamlファイルを作成し、使うキーや暗号化する内容を設定します。今回はAWS KMSで作成したキーを使います。
creation_rules:
- path_regex: .*.yaml
unencrypted_regex: "^(apiVersion|metadata|kind|type)$"
kms: "arn:aws:kms:ap-southeast-2:000000000000:key/ad87709b-bc8d-4034-9066-307fad85e7c3"
続いてsopsコマンドで暗号化します。
$ sops -e secret.yaml > secret.enc.yaml
暗号化した結果が以下の通りです。usernameとpasswordが暗号化され、sopsというリソースが追加されているのがわかります。
apiVersion: v1
kind: Secret
metadata:
name: test_secret
type: Opaque
data:
username: ENC[AES256_GCM,data:AbGRVmNkziRc,iv:ECfKNMeUgD18FoO3M1+ZWcdkuFPm4THUaeNHFDsro5c=,tag:jnRybMxk9q6OqyJnOOhpwQ==,type:str]
password: ENC[AES256_GCM,data:G9YT8pLKPviqB0C/RQ==,iv:UILkndC9alTX0u3aIZYZs8vHRWUwzFk5lNjfwo7VFcc=,tag:FiHHDAYC2/nl+ffvgn2wrw==,type:str]
sops:
kms:
- arn: arn:aws:kms:ap-southeast-2:000000000000:key/ad87709b-bc8d-4034-9066-307fad85e7c3
created_at: "2025-08-20T07:29:08Z"
enc: AQICAHjF5O1Tn8CF/wB4mQNaaCQUZlVaulEZdP3hQDAX7WDezgFgBLC6dA742CvlZ6GG1EkIAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMKlTmKthbMcM2+EXRAgEQgDtVhbD0qSTFgDJTSs8qZc7jkl8v2SBoOa+WoSs4swzedz0h44JYgpcUreluj7GIzNwc09MBZkyfnyVYlQ==
aws_profile: ""
lastmodified: "2025-08-20T07:29:08Z"
mac: ENC[AES256_GCM,data:JEAjriOV6xm4Zxz1tNomDuld/Pe6MYNBaC51MuCDKtsvhlzeijzTKD9tPcNRAnpW5H5odvoTUOsVDj1IgiL0cdDNAaliDNOHzrbj64e6iKyDaceHo45sI2wgiHJ5nmm3Ak6da+nBuOyHoKjvZAhdrw8aXGz3BB/H7F0r2UwXIUo=,iv:aHQsK/S+jrv9bPkdOvOrlJyYONNHycc1lqf7wICoIpc=,tag:lmHh0DUzzMcFqYu6qlfIlw==,type:str]
unencrypted_regex: ^(apiVersion|metadata|kind|type)$
version: 3.10.2
KSOPSの使用
ここからは、KSOPSを使い、kustomize buildで暗号化されたファイルを復号してみます。インストールから実運用まで紹介しますが、詳しくはgithubを参考にしてみてください。
インストール
以下のコマンドでインストールしてください。
$ curl -s https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | bash
$ wget -qcO - https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | bash
ここで、Permission deniedなどで権限拒否をされたときは、以下のようにsudoコマンドを入れてください。
$ wget -qcO - https://raw.githubusercontent.com/viaduct-ai/kustomize-sops/master/scripts/install-ksops-archive.sh | sudo bash
最後に以下の文面が表示されたら成功です。
2025-08-20 06:15:23 (12.6 MB/s) - written to stdout [12607722/12607722]
Successfully installed ksops
ksopsリソースの作成
以下のようなksopsリソースを作成してください。今回は、ksopsのバイナリが/usr/local/binにあるため、exec: path: ksopsのように設定します。
apiVersion: viaduct.ai/v1
kind: ksops
metadata:
# Specify a name
name: example-secret-generator
annotations:
config.kubernetes.io/function: |
exec:
# if the binary is in your PATH, you can do
path: ksops
# otherwise, path should be relative to manifest files, like
# path: ../../../ksops
files:
- ./secret.enc.yaml
その後、以下のようにksopsリソースを記述したyamlファイルを指定するkusomizationファイルを作成してください。
generators:
- ./secret-generator.yaml
最後に以下のようにkustomize buildコマンドを実行し、復号してみてください。復号されるのがわかります。
$ kustomize build --enable-alpha-plugins --enable-exec .
apiVersion: v1
data:
password: test_password
username: test_user
kind: Secret
metadata:
name: test_secret
type: Opaque
最後に
以上がKSOPSの紹介です。これだけですと、KSOPSを使うメリットが薄いように感じると思います。
しかし、KSOPSはArgoCDというGitOpsツールと組み合わせることで真価を発揮します。
この紹介は別記事で行いますので、少々お待ちください。