0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kusomize-SOPS(KSOPS)の紹介

0
Last updated at Posted at 2025-08-21

はじめに

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ツールと組み合わせることで真価を発揮します。
この紹介は別記事で行いますので、少々お待ちください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?