helm-secretsの使い方
helm-secretsは、Helmのプラグイン。
A current version of the plugin using Golang sops as backend
バックエンドとしてsopsを使用しています、とのこと。
sopsとは?→暗号化ファイルのエディター。
sops is an editor of encrypted files that supports YAML, JSON, ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault and PGP.
helm-secretsを使うと何ができるのか?
Secretsのマニフェストそのものを暗号化する
SecretsのHelm templateを暗号化する
Helmのvaluesファイルを暗号化する
暗号化されたvalueを自動的に復号しつつ、下記helmコマンドを利用可能にする
install
upgrade
lint
diff
プラグインのインストール
sopsも自動的にインストールされる…
code:shell
開発中のバージョンがインストールされる場合があるので--versionを指定
が、バージョンが古かった。
code:shell
❯ sops -v
sops 3.0.3
warning failed to retrieve latest version from upstream: Version information not found in upstream file warning failed to compare current version with latest: Version string empty (latest)
また3.0.3はAWS CLIのプロファイルを指定する機能がまだ入ってないバージョンだった。
(プロファイル指定機能のPR↓ 3.0.3はもっと前にリリースされたバージョン)
Ubuntuユーザーなので、ここから最新版のdebパッケージををもらう。
sops設定ファイルの準備
AWS KMSと使う場合
鍵のARNを書く。
code:.sops.yaml
creation_rules:
- kms: 'arn:aws:kms:ap-northeast-1:987654321234:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
暗号化対象YAMLの準備
普通のHelm valuesファイルの要領で値を記入する。つまり、平文で記入する。
もちろん、まだリポジトリにプッシュしてはいけない。
code:secrets.yaml
some_value: hogehoge
※ファイル名はsecrets.で始まり(ピリオド含む点に注意).yamlで終わる必要がある。
YAMLの暗号化
.sops.yamlを置いてあるディレクトリで実行する(そうしないとエラーになった)。
デフォルトプロファイルでよければAWS_PROFILE指定不要。
code:bash
❯ AWS_PROFILE=dev helm secrets enc secrets.yaml
Encrypting secrets.yaml
Encrypted secrets.yaml
code:fish
env AWS_PROFILE=dev helm secrets enc secrets.yaml
ファイル名はそのまま、暗号化された状態に置き換わる(上書きされる)。
Secretテンプレートからの参照
復号した値をbase64エンコードして挿入することでSecretのマニフェストとして完成する。
(暗号化前のYAMLにbase64エンコード済みの値を書いていた場合は.Values.some_valueだけでよいが、その場合編集がしづらい)
code:secret.yaml
data:
some_value: {{ .Values.some_value | b64enc | quote }}
暗号化YAMLを復号しつつチャートをアップグレード/インストール
helm upgrade --installコマンドを
helm secrets upgrade --installと置き換える。
また、-fオプションで暗号化したYAMLファイルを指定する(上記の例だと-f some_directory/secrets.yaml)。
暗号化YAMLの編集
EDITOR=vimは単なる好み(指定しないとnanoだった)。
復号にKMSキーを使うので、キーユーザーのみ編集操作が可能。
code:bash
❯ EDITOR=vim AWS_PROFILE=dev helm secrets edit kubernetes/helm/helm_vars/dev/secrets.yaml
code:fish
env EDITOR=vim AWS_PROFILE=dev helm secrets edit kubernetes/helm/helm_vars/dev/secrets.yaml
暗号化YAMLの閲覧
標準出力に出る。
code:fish
env AWS_PROFILE=dev helm secrets view kubernetes/helm/helm_vars/dev/secrets.yaml
これは下記と同じ。
code:fish
env AWS_PROFILE=dev sops -d kubernetes/helm/helm_vars/dev/secrets.yaml