Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、外部のシークレット管理ツールと連携して、KubernetesのSecretオブジェクトを管理する「External Secrets Operator」を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する本連載「Cloud Nativeチートシート」。今回は外部のシークレット管理ツールと連携して、KubernetesのSecretオブジェクトを管理する「External Secrets Operator」を紹介します。
External Secrets Operatorを利用すれば、シークレットをGitでセキュアに管理でき、GitOpsとの親和性もバッチリです。
「External Secrets Operator」は、「AWS Secret」「GitLab Variable」などの外部ツールのシークレットを元にSecretオブジェクトを作成、管理できるフレームワークです。
特徴として、次の4つが挙げられます。
特に1番目の特徴は重要です。Kubernetesには「Secret」というパスワードやトークンなどの機密情報を保持するオブジェクトがありますが、Secretのオブジェクト定義において、機密情報は暗号化されているわけではありません。文字列をただ「Base64」でエンコードしたものが記載されているので、オブジェクト定義を見られる人なら誰でも秘密情報の値を知ることができてしまいます。
そのため、シークレットのYAMLファイルは誰でも見られるソースリポジトリには配置することが難しく、例えばGitOpsをしたい場合には、シークレットは別の場所で分けて管理し、デプロイ時に組み合わせるなど作り込みで対応せざるを得ず、その管理、運用が困難でした。
External Secrets Operatorは、そんな課題を解決するために、外部のシークレット管理ツールと連携し、それらに保存されている機密情報を取得してシークレットを自動で作成します。そのため、ユーザーはオブジェクト定義情報に機密情報そのものを記載することなく、機密情報を管理できます。各種クラウドベンダーが提供しているシークレット管理サービスとも連携させることができ、多くの環境で利用可能です。
似たようなツールとして、過去には「Kubernetes External Secrets」(KES)が提供されていました。KES以外にも複数の類似のツールが、それぞれのシークレット管理ツールに合わせて開発されていましたが、それらを統合する動きの中で、JavaScriptで書かれたKESは標準化を進めることが難しく、Go言語で開発されたExternal Secrets Operatorが統合先として選ばれました。今ではKESは開発が止まり、下記リンクのissueにもある通り、External Secrets OperatorはKESの後継として推奨されています。
ここからはExternal Secrets Operatorの使い方を見ていきましょう。
紹介するExternal Secrets Operatorは、下図のような構成になっています。
基本的には、「SecretStore」「ExternalSecret」の2つのオブジェクトから構成されます。図で色分けしている通り、SecretStoreとExternalSecretは、それぞれシークレット管理ツールとその各パラメーターに対応します。
SecretStoreは、外部のシークレット管理ツールと連携するためのオブジェクトで、例えばAmazon Web Services(AWS)のSSMパラメータストアサービスや、「GitLab」プロジェクトの情報を持ちます。
ExternalSecretは具体的なシークレットと結び付くオブジェクトです。先に説明したSecretStoreと連携して、「どの外部シークレット管理ツールから、どのパラメーターを取得するか」の情報と、それを元に「KubernetesのSecretオブジェクトをどのように作成するか」の情報を持ちます。図のAWS側の絵のように、1つのSecretStoreに複数のExternalSecretが参照することができ、シークレット管理ツールの複数のパラメーターを取り扱えます。
この後、具体的にExternal Secrets Operatorの使い方を説明しますが、この構成を頭の片隅に置きながら読んでいただくと、それらの関係性がより分かりやすいと思います。
ここからはExternal Secrets Operatorを使ってみます。本記事では、下記のバージョンで動作を確認しています。
Copyright © ITmedia, Inc. All Rights Reserved.