Member-only story
GitOpsでKubernetesのシークレットを安全に管理する
GitOpsを使えばシークレット管理ができるのですが、みなさんもGitOpsを使うべきです。GitOpsを使えば安全にでき、大規模にできますし、また自動化されているので非常に便利です。
GitOps は、進化し続けるバズワードにおいて、最新の専門的な流行語にすぎません。その中心となるのは、現在の状態を表す宣言的な方法でリソースを管理することで、いつでも状況を把握できるようにし、その宣言的な状態をクラスタにリゾルブすることです。
GitOpsではストラクチャーにおいて大変な大間違いをしている人はたくさんいます。リポジトリのストラクチャーは非常に重要です。あなたの会社でGitOpsをどのように整理するかが、GitOpsの成否を左右することになります。
ストラクチャーの問題に取り組んだら、直面する次の最大の問題は、シークレットを保護する方法です。一般的に、シークレットがなくてもアクセスできるか、またはSlackや1Passwordを介して周りに渡される共有のシークレットを持っているというような妥協策を使っています。
Sealed Secretsは、Kubernetes上のシークレット問題を解決する人気のある方法ですが、PKIとパブリックキーの共有に依存して暗号化し、クラスタにプライベートキーをインストールするためのまともなソリューションですが、最終的には、もっと良い方法があるのです。
The Better Way to Secure Secrets
それではもっと素晴らしいシークレットの保存の方法を見ていきます。MozillaのSOPSです。SOPSは、AWS KMS、GCE、Vault、PGPなど、複数のキーマテリアルのソースに対応しています。AWS KMS の外部キーマテリアルを使ってシークレットを暗号化・復号化する機能を持ち合わせていますが、Shamir のSecret Sharing やキーグループにも対応しており、基本的にはどのキーが必要で、それらのキーどのくらいの量で復号化に必要なのかをポリシーとして設定できるようになっています。
SOPSのおかげでWS KMSのようなサービスを利用できるようになったので、暗号化と復号化のアクセス権を誰が持つかをコントロールできるようになりました。しかし、それはAWSのインスタンスプロファイルを活用して、設計されたことをマシンができるようにし、自動化によってもっと便利になるということをも意味しています。
最後にみなさんに注目してもらいたいのは、一度ファイルが暗号化されると、それがどのように暗号化されたかについてのすべてのメタデータがファイル自体の一部になるという機能です。