Kubernetesシークレットを安全に共有する

暗号化された自己消滅リンクで、Kubernetesシークレット、Kubeconfigファイル、サービスアカウントトークンを送ろう。

問題

KubernetesシークレットとKubeconfigファイルにはクラスター認証情報、サービスアカウントトークン、TLS証明書が含まれており、インフラへの直接アクセスを付与する。SlackやメールでシェアするとクラスターEntire全体が露出する。漏洩したKubeconfigファイルがあれば、攻撃者はワークロードのデプロイ、変更、削除が可能になる。

Vaulted のサポート内容

VaultedはKubernetesシークレットを送信前にクライアントサイドでAES-256-GCMを使って暗号化する。自己消滅リンクにより、受信者が取得するまでの間だけクラスター認証情報が利用可能となる。ゼロ知識アーキテクチャにより、Vaultedサーバーは平文のクラスター設定を見ることができない。

手順

  1. Kubernetesシークレット、Kubeconfig、またはサービスアカウントトークンをVaultedに貼り付ける
  2. 最大限のセキュリティのために1回閲覧制限と短い有効期限を設定する
  3. クラスターアクセスが必要なエンジニアに暗号化リンクを共有する
  4. 相手が認証情報でkubectlを設定し、リンクは恒久的に消滅する

ターミナルからKubernetesシークレットを共有する

Vaulted CLIを使えばターミナルを離れることなくクラスター認証情報を共有できる: cat kubeconfig.yaml | npx vaulted-cli --views 1 --expires 1h。または内容を直接渡す: npx vaulted-cli "$(kubectl get secret my-secret -o jsonpath={.data})" -v 1。npmでインストール: npm install -g vaulted-cli。

GitHub ActionsでKubernetesシークレットを共有する

Vaulted GitHub ActionでCI/CDパイプライン内のクラスター認証情報を共有できる: uses: vaulted-fyi/share-secret@v1 でKubernetesシークレットをinputとして設定する。クライアントサイドで暗号化し、自己消滅リンクを出力する。GitHub Marketplaceで公開中。