Kubernetes Secret をデコードして表示する jq 芸

通常、Kubernetes の Secret を見ようとすると、Base64 エンコードされた値で見えるので、実際の値はパッと見分からない。

$ kubectl get secret my-credential -o json | jq '.data'

{
  "my-username": "yyyyyyyyyyyyyyyyyyy==",
  "my-password": "xxxxxxxxxxxxxxxxxxx=="
}

jq v1.6 以降だと、@base64d というコマンドが使えるようになっていて、コレで値を Base64 デコードできる。

以下のように to_entries で Object から Array に直し、それを map() で操作していく。Key Value の関係はそのままに、.value の方は @base64d を使ってデコードしてやる。最後に add で Array to Object に変換してやると、元どおりの形式で、値がデコードされた状態になる。

$ kubectl get secret my-credential -o json | jq '.data | to_entries | map({ (.key|tostring): (.value|@base64d) }) | add'

{
  "my-username": "MY-NAME-IS-NEO",
  "my-password": "ORE-ORE-PASSWORD"
}

コレでおけ。