Kubernetesシークレットを安全に共有する
暗号化された自己消滅リンクで、Kubernetesシークレット、Kubeconfigファイル、サービスアカウントトークンを送ろう。
問題
KubernetesシークレットとKubeconfigファイルにはクラスター認証情報、サービスアカウントトークン、TLS証明書が含まれており、インフラへの直接アクセスを付与する。SlackやメールでシェアするとクラスターEntire全体が露出する。漏洩したKubeconfigファイルがあれば、攻撃者はワークロードのデプロイ、変更、削除が可能になる。
Vaulted のサポート内容
VaultedはKubernetesシークレットを送信前にクライアントサイドでAES-256-GCMを使って暗号化する。自己消滅リンクにより、受信者が取得するまでの間だけクラスター認証情報が利用可能となる。ゼロ知識アーキテクチャにより、Vaultedサーバーは平文のクラスター設定を見ることができない。
手順
- Kubernetesシークレット、Kubeconfig、またはサービスアカウントトークンをVaultedに貼り付ける
- 最大限のセキュリティのために1回閲覧制限と短い有効期限を設定する
- クラスターアクセスが必要なエンジニアに暗号化リンクを共有する
- 相手が認証情報で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で公開中。