再デプロイせずに SOP 暗号化シークレットを変更する方法

再デプロイせずに SOP 暗号化シークレットを変更する方法

cronjob を展開しました。シークレットに含まれるパラメータ (AES キーのローテーション) を更新する必要があります。シークレットは SOP で暗号化されています。

ジョブを再デプロイせずに AES キーを更新することは可能ですか?

私が試したこと:

"kubectl edit secret jobsecret" -- edits the sops encrypted file but it is still encrypted
"helm edit secrets jobsecret.yaml" -- edits/encrypts the parameter file before deploy

次に考えたのは、ファイルを作成し、それを SOP で暗号化し、その結果を「kubectl edit secret jobsecret」のエディターにコピー/貼り付けすることです。もっと良い方法があることを期待していました。

私は開発者であり、k8s 管理者ではありません。しかし、それは選択ではありません。「k8s 管理者なし」の問題を解決できるまで、代役を務めます。

答え1

要約

$ kubectl patchリソースのフィールドを更新するために使用できます。

例:

kubectl patch secret YOUR_SECRET -p '{"data":{"key":"NEW_BASE64_ENCODED_VALUE"}}'

さらに詳しい情報はこちらをご覧ください:

以下にさらに詳しい説明を記載しました。


シークレットを「パッチ適用」する例:

  • $ secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: super-secret
data:
  username: a3J1aw==
  password: b2xkLXBhc3N3b3Jk

補足です!

usernameやなどのキーの値はpasswordbase64 でエンコードされます。

の値を変更するには、以下passwordを実行する必要があります。

  • kubectl patch super-secret -p '{"data":{"password":"bmV3LXBhc3N3b3Jk"}}'

新しく更新されたシークレットを表示すると、次のように表示されます (出力は部分的なものです)。

  • $ kubectl get secret super-secret -o yaml
data:
  password: bmV3LXBhc3N3b3Jk 
  username: a3J1aw==

以下の追加資料を確認することを強くお勧めします。

関連情報