このページでは、Cloud Deploy を使用して Google Kubernetes Engine または GKE Enterprise クラスタにデプロイするアプリケーションの Secret を管理するためのベスト プラクティスについて説明します。
アプリケーションの Secret をデプロイ アーティファクトに挿入するとセキュリティ リスクが生じるため、Cloud Deploy パイプライン内から Secret を管理しないでください。
この方法で使用された Secret は、Cloud Deploy の範囲外で生成、管理、ローテーションが行われる必要があります。
ここでの Secret とは、データベース認証情報、API キー、証明書、パスワードなどの機密データを指します。
Kubernetes Secret
Kubernetes Secret は、Pod とは別に、パスワード、OAuth トークン、SSH 認証鍵などの機密データをクラスタに格納する安全なオブジェクトです。Secret は ConfigMap に似ていますが、機密データを保持することを目的としています。
Kubernetes Secret は、デフォルトでは暗号化されていないため、このドキュメントで説明するアプローチでは使用されません。
Cloud Deploy で使用する Secret の管理
このセクションでは、Cloud Deploy を使用してデプロイするアプリケーションの Secret を管理する方法について説明します。
GKE または GKE Enterprise を使用してシークレットを管理するには、次の 2 つの方法があります。
Google Secret Manager
Secret Manager は、API キー、パスワード、その他の機密データを安全に保存する、フルマネージドのマルチリージョン Google Cloud サービスです。
Secret Manager の Secret には、クライアント ライブラリと Workload Identity 認証を使用するか、Secrets Store CSI ドライバを使用してアクセスできます。
アプリケーションで Secret Manager を使用するには:
SDK を使用して、アプリケーション コードから Secret を参照します。
環境変数(Secret のバージョンなど)やアプリケーション環境(開発環境、ステージング環境、本番環境など)を使用して、環境の追加メタデータを指定できます。
特定の機能のデプロイ プロセスにインフラストラクチャのプロビジョニングが含まれている場合は、アプリケーションをデプロイする前に、プロビジョニング プロセスの一環として Secret Manager を使用して Secret を作成または更新します。
Secret Manager で GKE Secret を管理する方法については、他のプロダクトでの Secret Manager の使用をご覧ください。
HashiCorp Vault
Hashicorp Vault は、Secret を管理するための人気の高いオープンソースのツールです。Google Cloud には、Terraform などの他の Hashicorp ツールとともに、Vault との幅広い統合とサポートが用意されています。
Kubernetes クラスタ内で Vault を構成するには、次のようにします。
API を使用して Vault の Secret にアクセスし、Workload Identity を使用して認証する。
Vault エージェントのコンテナを使用して、Kubernetes Pod に Secret を挿入する。
Vault CSI プロバイダを使用して、これらの Secret を使用する。
次のステップ
Secret Manager のベスト プラクティスの詳細を確認する。
Google Cloud で HashiCorp Vault と Terraform を使用するセキュリティのベスト プラクティスに関するブログ投稿を読む。