このページでは、Cloud SQL でセルフマネージド セキュア ソケット レイヤ(SSL)/ Transport Layer Security(TLS)証明書を使用して Cloud SQL インスタンスに安全に接続する方法について説明します。
概要
Cloud SQL では、Transport Layer Security(SSL / TLS)プロトコルを使用したインスタンスへの接続がサポートされています。これらの物理的境界の内部で転送されるデータについては、認証は通常行われますが、暗号化はデフォルトでは行われない場合があります。パブリック IP アドレスを使用してインスタンスに接続する場合は、SSL / TLS 証明書を適用して、転送中のデータを保護する必要があります。SSL / TLS は、インターネット経由で送信されるデータを暗号化するための標準プロトコルです。データが暗号化されていない場合、パケットを調べ、機密情報を読み取とることが誰にでも可能になってしまいます。
最も安全な暗号化方法は非対称暗号です。この方法では、公開鍵と秘密鍵の 2 つの暗号鍵が必要になります。基本的には、公開鍵を使用してデータを暗号化し、秘密鍵を使用してデータを復号します。サーバーマシンとクライアント マシンの両方で同じクライアント鍵一式を使用します。
Cloud SQL では、公開鍵は client-cert.pem
、秘密鍵は client-key.pem
です。また、サーバーは server-ca.pem
という独自の証明書を生成します。
アプリケーションが正常に接続するには、この 3 つの鍵がすべて必要です。これらの鍵は安全に保管してください。これらの鍵にアクセスできると、データへの接続や、データを傍受が可能になります。秘密鍵を後でサーバーから取得することはできません。そのため、秘密鍵を紛失した場合、新しいクライアント証明書を作成して、以前使用していた証明書を置き換える必要があります。同様に、サーバーが新しい server-ca.pem
ファイルを生成した場合、このファイルをダウンロードして PostgreSQL クライアントのホストマシンに保存し、既存のファイルと置き換える必要があります。
SSL / TLS 証明書
SSL 接続では、サーバー認証局(CA)証明書が必須です。Cloud SQL では、お客様がインスタンスを作成した時点で、サーバー証明書が自動的に作成されます。サーバー証明書は、有効である限り、お客様が積極的にサーバー証明書を管理する必要はありません。ただし、証明書には 10 年間の有効期限があり、期限が切れた証明書は無効になります。そうなると、クライアントでは、その証明書を使用したインスタンスへの安全な接続が確立できなくなります。新しい証明書を手動で作成することもできます。
クライアント証明書は自分で作成します。Cloud SQL インスタンスごとに 10 個のクライアント証明書という上限があります。サーバー証明書のローテーションの仕組み
Cloud SQL では、サーバー証明書をローテーションして、古い証明書が期限切れになる前に新しい証明書とシームレスに交換できます。
Cloud SQL インスタンスのサーバー証明書が期限切れになる約 3 か月前に、プロジェクト オーナーは、そのインスタンスに対する証明書ローテーション プロセスが開始されたことを知らせるメールを Cloud SQL から受信します。メールにはインスタンスの名前が示され、Cloud SQL によって新しいサーバー証明書がプロジェクトに追加されたことが通知されます。既存のサーバー証明書は引き続き通常どおり機能します。事実上、インスタンスにはこの間、2 つのサーバー証明書があります。
現在の証明書が期限切れになる前に、新しい server-ca.pem
ファイルをダウンロードします。このファイルには、現在のサーバー証明書と新しいサーバー証明書の両方の証明書情報が含まれています。すべての PostgreSQL クライアント ホストマシンに新しいファイルをコピーして、既存のファイルを置き換え、新しいファイルを使用するように PostgreSQL クライアントを更新します。
すべての PostgreSQL クライアントが更新されたら、Cloud SQL インスタンスにコマンドを送信し、新しいサーバー証明書にローテーションを行います。この処理が完了すると、古いサーバー証明書は認識されなくなり、新しいサーバー証明書のみが使用されるようになります。
クライアント証明書は、サーバー証明書のローテーションの影響を受けません。SSL / TLS 暗号化を適用する
SSL / TLS 接続を受け入れるように Cloud SQL インスタンスを構成すると、そのインスタンスの SSL / TLS 接続が有効になりますが、暗号化されていない安全性の低い接続も引き続き受け入れられます。すべての接続で SSL/TLS を必須としない場合でも、暗号化されていない接続は許可されます。このため、パブリック IP を使用してインスタンスにアクセスする場合は、すべての接続に SSL を適用することを強くおすすめします。承認済みネットワークを使用する
Cloud SQL インスタンスでパブリック IP アドレスを使用している場合は、SSL / TLS を構成するときに PostgreSQL クライアントの IP アドレスを承認済みネットワークとして追加します。
この場合、PostgreSQL クライアントは IP アドレスがこのリストに追加されている場合にのみ、接続を承認されます。IP アドレスは、単一のエンドポイントに制限することも、CIDR 形式の範囲にすることもできます。たとえば、10.50.51.3
や 10.50.51.0/26
です。
SSL 証明書の有効期限
Cloud SQL インスタンスに関連付けられた SSL 証明書の有効期限は 10 年です。有効期限が切れたら、SSL 証明書のローテーションを行います。また、Cloud SQL インスタンスの SSL 構成はいつでもリセットできます。
次のステップ
Cloud SQL インスタンスで SSL / TLS を構成する。
Google Cloud での暗号化の処理方法について詳細を確認する。
- SSL / TLS を使用して Cloud SQL インスタンスに接続する。
- Cloud SQL インスタンスで SSL / TLS を管理する。
PostgreSQL で SSL / TLS を使用する方法について詳細を確認する