Secret(K8s)
パスワード、APIキー、証明書といった機密設定のためのKubernetesオブジェクト。ConfigMapに似ているが、機密向けとして多少慎重に扱われる。デフォルトではbase64エンコードされるだけで暗号化されない点が悪名高い。
ConfigMapと同様、環境変数またはマウントされたファイルとして注入する。重要な誤解が一つあり、base64は暗号化ではない。読み取り権限があれば誰でも簡単にデコードできる。実際に守るには、etcdの保存時暗号化(明示的に有効化が必要)、Secretを読める人を絞るRBAC、さらに望ましくはSecrets Store CSIドライバー経由でHashiCorp VaultやAWS Secrets Managerなど外部のシークレット管理を使うことだ。GitOpsではSealed SecretsやExternal Secretsを使えば、平文のシークレットをgitにコミットせずに済む。
Secretの扱いは、Kubernetesで最もよくあるセキュリティ上の穴の一つ。ConfigMapとの違いは用途と、その上に追加すべき保護の層にある。