概要
機密情報を正しく管理することは、安全な開発ワークフローを作成するうえで非常に重要です。Cloud SQL では、機密情報を Secret Manager で作成したシークレットとして保存することをおすすめします。シークレットには、機密システムにアクセスするために使用する可能性のある API キー、パスワード、機密情報、認証情報が含まれています。
Secret Manager は、利便性を提供し、セキュリティを強化します。シークレットにバージョニングを適用して、チーム間で共有することもできます。シークレットをチームと共有する方法の詳細については、アクセス制御(IAM)をご覧ください。
このページでは、Secret Manager を使用して Cloud SQL でシークレットを管理する 4 つのユースケースについて説明します。
- ユーザー名とパスワードの保存
- Cloud SQL インスタンスへの接続
- SSL / TLS 証明書の管理
- 障害復旧シナリオの調整
始める前に
Secret Manager を使用して Cloud SQL でシークレットを処理する前に:
- Cloud SQL と Secret Manager の両方を確認します。
- Cloud SQL の使用を開始するには、ローカル コンピュータから最初の Cloud SQL インスタンスに接続する方法をご覧ください。
ユーザー名とパスワード
Secret Manager を使用して Cloud SQL ユーザー アカウントのユーザー名とパスワードをシークレットとして保存することは、この機密情報を管理する安全かつ信頼性の高い方法です。
まず、Cloud SQL でユーザーを作成する必要があります。このユーザーを作成する際に、ユーザー名とパスワードを指定する必要があります。Cloud SQL でユーザーを作成する方法については、組み込み認証を使用してユーザーを管理するをご覧ください。
ユーザーを作成したら、Secret Manager にシークレットを作成してユーザー名とパスワードを保存します。これにより、この機密情報が消失するのを防ぐことができます。Secret Manager でのシークレットの作成とアクセスの詳細については、シークレットの作成とアクセスをご覧ください。
Cloud SQL のインスタンス
Cloud SQL インスタンスに接続するときは、Secret Manager を使用してシークレットを管理し、安全な開発ワークフローを作成できます。
まず、ローカル コンピュータから Cloud SQL インスタンスに接続します。インスタンスを実行したら、環境変数を使用してそのインスタンスに接続します。変数に関連付けられる一部の値(インスタンス接続名など)は機密性が高くなります。値ごとに、Secret Manager にシークレットを作成してこの情報を保存および管理できます。環境変数を使用して Cloud SQL インスタンスに接続する方法については、サンプルアプリを構成して実行するをご覧ください。
シークレットとして保存されているインスタンス接続名は、Secret Manager から直接取得できます。この柔軟性の高いワークフローにより、チームはこの機密情報を複数のアプリケーションで共有し、一元管理された場所から管理できます。Secret Manager からシークレットを取得する方法の詳細については、Secret Manager でシークレットを作成するをご覧ください。
アプリケーションを使用するには、シークレット内の情報が必要です。この情報には、アプリケーションへの接続に使用される環境変数に関連付けられた値が含まれます。アプリケーションは起動時にシークレットにアクセスし、シークレットを使用して Cloud SQL への接続を構成します。関連するシークレットが Secret Manager で更新された場合は、アプリケーションを再起動する必要があります。
SSL / TLS 証明書
パブリック IP アドレスまたはプライベート IP アドレスを使用して Cloud SQL インスタンスに接続する場合は、送信中のデータを保護する Transport Layer Security(TLS)証明書を使用する必要があります。各 TLS 証明書には公開鍵証明書と秘密鍵が含まれています。TLS 証明書の構成の詳細については、SSL/TLS 証明書を構成するをご覧ください。
TLS 証明書、公開鍵証明書、秘密鍵をシークレットとして保存して安全に保ち、チームと共有できます。シークレットの作成とアクセスの詳細については、Secret Manager でシークレットを作成するをご覧ください。シークレットの共有の詳細については、アクセス制御(IAM)をご覧ください。
障害復旧シナリオ
Cloud SQL のプライマリ インスタンスで障害が発生した場合、リードレプリカをプライマリ インスタンスに昇格できます。リードレプリカがプライマリ インスタンスになったら、この昇格を反映するためにインスタンス接続名を更新する必要があります。インスタンス接続名がシークレットに保存されている場合は、新しいプライマリ インスタンスの名前でシークレットを更新する必要があります。詳細については、シークレットを編集するをご覧ください。
フェイルオーバーに Secret Manager を使用する方法の一つとして、プライマリ インスタンスの名前をシークレットに保存して、シークレットが更新されるたびに更新されるように Cloud SQL コネクタを構成する方法があります。
Cloud SQL Auth Proxy で次の bash ラッパー スクリプトを使用すると、インスタンス接続名の値がいつ更新されたかを検出し、新しい値でプロキシを再起動できます。
プライマリ レプリカのインスタンス接続名を含むシークレットの作成とアクセスの詳細については、Secret Manager でシークレットを作成するをご覧ください。Cloud SQL Auth プロキシの使用について詳しくは、Cloud SQL Auth プロキシを使用して Cloud SQL に接続するをご覧ください。
次のステップ
- Secret Manager は、Cloud Run などの他の Google Cloud プロダクトと統合できます。
- コンテナ環境でシークレットを保護する方法については、シークレットを使用するをご覧ください。
- Secret Manager と統合される他の Google Cloud プロダクトのリストについては、他のプロダクトでの Secret Manager の使用をご覧ください。
- Secret Manager を開発環境に統合する方法については、すべての Secret Manager のコードサンプルのページで入手できる、さまざまなサンプルをご覧ください。