KubernetesのSecretはそのまま使うべき?

Pocket

概要

Kubernetes の Secret 機能はそのまま使用しても大丈夫か

Kubernetes の Secret とは?

k8s公式ドキュメント – Secret

種々の秘匿情報を保持する機能です。
デフォルトだとBase64エンコードされます。

例えば公式ドキュメントにもある例ですが、

# Create files needed for rest of example.
echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt

とすると

apiVersion: v1
kind: Secret
metadata:
  name: db-user-pass
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

こんな感じのyamlができます。

k8sのpodにファイルとしてマウントしたり、pod起動時の環境変数に値を渡したりできます。

k8sのSecretの問題点

こんな感じでパスワードや証明書、SSH公開鍵等を管理するのに便利なSecretですが何点か気になる点があります。

  1. k8sで強い権限を持っている管理者から見えてしまう
  2. base64エンコードなので中身が見えたら簡単にデコードできる。

果たして皆さん、k8sの強権限者はアプリの強権限者と同じでしょうか?
見えなくていい人からアプリのシークレットが見えてませんか?
Base64エンコードで大丈夫でしょうか?

やりようはない?

一案としてですが HashiCorp Vault というのがあります。
詳細は省きますが、様々なSecret情報を管理してくれるOSSです。
エンタープライズ版もあります。

これを使うことでk8sのSecret情報をVault内部に隠してしまうことができます。
また、中間認証局としても振る舞えるらしいです。※あんまり調べてない

まとめ

生で使うのはやめて Vault などの Secret 管理ツールを使いましょう。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です