Kubernetes Secret に登録した情報を Base64 デコードして表示する
Kubernetes の Secret に登録した情報は、Base64 エンコードされた状態で保持される。そのため、kubectl get secret
で情報を表示させても、Base64 文字列しか見えず、内容が確認しづらい。
勿論、登録された値を base64 --decode
コマンドに流してやれば見えるものの、--from-env-file
で一括登録したような環境変数たちを見る時は大変だ。
# 環境変数ファイルを登録した場合
$ kubectl create secret generic my-env-file-secret --from-env-file=./.env
そこで、JSON パーサの jq
を組み合わせて、登録されている Secret を Base64 デコードして表示してみる。
まずは生の Secret の状態を確認。
$ kubectl get secret my-env-file-secret -o json
{
"apiVersion": "v1",
"data": {
"MY_ENV": "Hzzzzz=",
"MY_API_KEY": "Lyyyyy=",
"MY_TOKEN": "Rxxxxx="
},
"kind": "Secret",
"type": "Opaque"
}
こんな風に、data
プロパティ配下に3つの環境変数が見えるが、値はいずれも Base64 エンコードされている。
そこで、この出力結果をパイプで jq
に渡して、以下のように処理する。
$ kubectl get secret my-env-file-secret -o json | jq -r '.data | to_entries | map( .key + "=" + (.value|@base64d) )[]'
MY_ENV=HelloWorld
MY_API_KEY=KeyHogeHoge
MY_TOKEN=TokenTokenToken
すると、こんな感じで表示される。
data
プロパティに絞り込んだら、to_entries
というパイプを使い、通常の連想配列を以下のような配列に変換する。
[
{
"key": "MY_ENV",
"value": "Hzzzzz="
},
// 以下略…
]
そしたら map()
にパイプして、.key
と .value
を連結させてやる。そして、.value
の方は Base64 エンコードされた文字列なので、jq
が持つ @base64d
というパイプを適用してデコードする。
ココまでやると、
[
"MY_ENV=HelloWorld",
"MY_API_KEY=KeyHogeHoge",
// 以下略
]
といった出力形式になるので、末尾に []
を付与して配列内にフィルタして出力する、というワケ。
コレでよきよき。