SSL / TLS 証明書を使用して承認する

このページでは、アプリケーションからセキュア ソケット レイヤ(SSL)(現在の Transport Layer Security(TLS))を使用して、Cloud SQL インスタンスへの接続を暗号化する方法について説明します。

概要

Cloud SQL では、SSL/TLS プロトコルを使用したインスタンスへの接続がサポートされています。SSL/TLS 接続は、クライアントと Cloud SQL インスタンスのデータベース間で転送されるデータを暗号化することで、セキュリティ レイヤを提供します。必要に応じて、SSL/TLS 接続で、Cloud SQL インスタンスにインストールされているサーバー証明書の検証によるサーバー ID の検証、クライアントにインストールされているクライアント証明書の検証によるクライアント ID の検証を行うことができます。

サーバー証明書

インスタンスを作成すると、Cloud SQL は認証局(CA)によって署名されたサーバー証明書を自動的に作成してインストールします。CA 証明書をクライアント ホストマシンにダウンロードして、CA とサーバー Cloud SQL ID の検証にこれを使用できます。必要に応じて、Cloud SQL がサーバー証明書の署名に使用する CA のタイプを選択できます。

クライアント証明書

必要に応じて、相互認証(サーバーおよびクライアントの ID の検証)のためにクライアント証明書とキーを作成して、クライアントのホストマシンにダウンロードできます。Cloud SQL がクライアント証明書の署名に使用する CA のタイプを選択することはできません。

SSL/TLS を使用して接続する

クライアントから Cloud SQL インスタンスに接続する場合、直接接続だけでなく、Cloud SQL Auth Proxy または Cloud SQL 言語コネクタを使用する接続にも SSL/TLS を使用できます。

  • 直接接続の場合は、Cloud SQL の SSL モード設定を使用して SSL/TLS 暗号化を適用することを強くおすすめします。必要に応じて、クライアント証明書の検証を適用することもできます。詳細については、SSL / TLS 暗号化を適用するをご覧ください。

  • Cloud SQL Auth Proxy または Cloud SQL 言語コネクタを使用する接続の場合、接続は SSL/TLS で自動的に暗号化され、クライアント ID とサーバー ID の検証が行われます。サーバー CA 証明書とクライアント証明書をダウンロードする必要はありません。

Cloud SQL 接続オプションの詳細については、Cloud SQL 接続についてをご覧ください。

クライアントサイドの SSL/TLS 構成の詳細については、データベース エンジンのドキュメントをご覧ください。

認証局(CA)階層

このセクションでは、Cloud SQL インスタンスに選択できる 2 種類のサーバー認証局(CA)について説明します。次の 2 つのオプションがあります。

  • インスタンス単位の CA: このオプションでは、各 Cloud SQL インスタンス専用の内部 CA が、対象のインスタンスのサーバー証明書に署名します。Cloud SQL はこれらの CA を作成して管理します。インスタンス単位の CA を選択するには、インスタンスを作成するときに、serverCaMode 設定(Cloud SQL Admin API)または --server-ca-mode フラグ(gcloud CLI)に GOOGLE_MANAGED_INTERNAL_CA を指定します。設定しないかフラグを指定しなかった場合、このオプションがインスタンスのデフォルト値になります。
  • 共有 CA: このオプションでは、ルート CA と下位サーバーの CA で構成される CA 階層が使用されます。リージョン内の下位サーバー CA はサーバー証明書に署名し、リージョン内のインスタンス間で共有されます。Cloud SQL は、Google Cloud Certificate Authority Service(CA Service)でルート CA と下位サーバーの CA をホストして管理します。Cloud SQL は、ルート CA と下位サーバーの CA のローテーションも処理し、CA 証明書バンドルへの一般公開リンクを提供してダウンロードできるようにします。共有 CA を選択するには、インスタンスを作成するときに、serverCaMode 設定(Cloud SQL Admin API)または --server-ca-mode フラグ(gcloud CLI)に GOOGLE_MANAGED_CAS_CA を指定します。

インスタンスの作成後は、gcloud sql instances describe コマンドを使用して、Cloud SQL インスタンスに構成されている CA 階層を確認できます。詳細については、インスタンス情報を表示するをご覧ください。

次の表は、2 つの CA 階層オプションを比較したものです。

機能 インスタンス単位の CA 共有 CA
CA の構造 各インスタンスの個別の CA 同じリージョン内のインスタンス間で共有されるルート CA と下位 CA
暗号属性 SHA256 アルゴリズムを使用した RSA 2,048 ビット鍵 SHA384 アルゴリズムを使用した 384 ビット鍵の楕円曲線 Digital Signature Algorithm(ECDSA)
CA の有効期間 10 年 25 年(ルート CA)、10 年(下位 CA)
サーバー証明書の有効期間 10 年 1 年
ユーザーが開始する CA のローテーション いいえ。CA ローテーションは Cloud SQL によって管理されます。
ユーザーが開始するサーバー証明書のローテーション
TLS 接続用の CA トラスト アンカー インスタンス単位の一意の CA が、対応するインスタンスのトラスト アンカーになります。 ルート CA と下位 CA は、特定のリージョン内のすべてのインスタンスのトラスト アンカーです。
サーバー ID の検証 インスタンスごとに固有の CA を持つことから、CA を検証するとサーバー ID が検証されます。 サーバー CA はインスタンス間で共有されるため、サーバー ID の検証には CA とホスト名の検証が必要です。
サーバー証明書のサブジェクト代替名(SAN)フィールド SAN フィールドには、Private Service Connect が有効になっているインスタンスのホスト名(インスタンスの DNS 名)のみが含まれます。ホスト名は、サーバー ID の検証に使用できます。DNS 名をホスト名として Cloud SQL インスタンスに接続する場合は、DNS 解決を設定する必要があります。 SAN フィールドには、すべてのタイプのインスタンスのホスト名(インスタンスの DNS 名)が含まれます。ホスト名は、サーバー ID の検証に使用できます。DNS 名をホスト名として Cloud SQL インスタンスに接続する場合は、DNS 解決を設定する必要があります。

Cloud SQL がホストするインスタンス単位の CA

この CA 階層は、デフォルトのサーバー CA モード構成です。

Cloud SQL は、インスタンスを作成するときに、インスタンスごとに新しい自己署名サーバー CA を作成します。この設定を使用するには、インスタンスの作成時に serverCaModeGOOGLE_MANAGED_INTERNAL_CA に構成するか、構成の設定を指定しないままにします。

次の図は、インスタンス単位の CA 階層を示しています。

インスタンス単位の内部 CA 階層の図。

CA Service がホストする共有 CA

このサーバー CA モードは、各リージョンのルート CA と下位サーバー CA で構成されます。下位サーバー CA はサーバー証明書を発行し、リージョン内のインスタンス間で共有されます。Cloud SQL は、共有リージョン サーバー CA のローテーションを処理し、CA 証明書バンドルをダウンロードするための一般公開リンクを提供します。

発行 CA が同じリージョン内のインスタンス間で共有されるサーバー CA 階層を使用するようにインスタンスを構成できます。この設定を使用するには、インスタンスの作成時に serverCaModeGOOGLE_MANAGED_CAS_CA に構成します。

次の図は、共有 CA 階層を示しています。

共有 CA 階層の図

サーバー証明書のローテーションの仕組み

Cloud SQL では、サーバー証明書をローテーションできるため、古い証明書が期限切れになる前に新しい証明書にシームレスに切り替えることができます。

使用するローテーション コマンドは、インスタンス単位の CA によって発行されたサーバー証明書と、共有 CA によって発行されたサーバー証明書のどちらを使用しているかによって異なります。

Cloud SQL インスタンスのサーバー証明書が期限切れになる約 3 か月前に、プロジェクト オーナーは、そのインスタンスに対する証明書ローテーション プロセスが開始されたことを知らせるメールを Cloud SQL から受信します。メールにはインスタンスの名前が示され、Cloud SQL によって新しいサーバー証明書がプロジェクトに追加されたことが通知されます。既存のサーバー証明書は引き続き通常どおり機能します。事実上、インスタンスにはこの間、2 つのサーバー証明書があります。

現在の証明書が期限切れになる前に、新しい server-ca.pem ファイルをダウンロードします。このファイルには、現在のサーバー証明書と新しいサーバー証明書の両方の証明書情報が含まれています。すべての MySQL クライアント ホストマシンに新しいファイルをコピーして、既存のファイルと置き換え、新しいファイルを使用するように MySQL クライアントを更新します。

すべての MySQL クライアントが更新されたら、ローテーション コマンド(インスタンスごとの CA の場合)またはローテーション コマンド(共有 CA の場合)を Cloud SQL インスタンスに送信し、新しいサーバー証明書にローテーションします。この処理が完了すると、古いサーバー証明書は認識されなくなり、新しいサーバー証明書のみが使用されるようになります。

クライアント証明書は、サーバー証明書のローテーションの影響を受けません。

SSL 証明書の有効期限

デフォルトでは、Cloud SQL インスタンスはデフォルトの設定 GOOGLE_MANAGED_INTERNAL_CAserverCaMode として使用します。SSL 証明書の有効期限は 10 年間です。これらの証明書が期限切れになる前に、CA のローテーションを実施します。

共有 CA を使用するインスタンス(serverCaModeGOOGLE_MANAGED_CAS_CA に設定されたもの)の場合、サーバー証明書の有効期間は 1 年間です。有効期限が切れる前に、SSL 証明書のローテーションを行います。ルート認証局(CA)証明書の有効期限は 25 年間で、下位の共有 CA 証明書の有効期限は 10 年間です。Cloud SQL がローテーションを処理します。

クライアントが CA の検証またはサーバー証明書のホスト名の検証を構成している場合、期限切れのサーバー証明書を持つ Cloud SQL インスタンスへのクライアントの接続は失敗します。クライアント接続の停止を防ぐため、証明書の有効期限が切れる前にサーバー証明書をローテーションします。

インスタンス単位の CA を使用する場合も、共有 CA サーバーモードを使用する場合も、Cloud SQL インスタンスの SSL 構成はいつでもリセットできます。

次のステップ