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

このページでは、アプリケーションから Secure Socket Layer(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 のタイプを選択できます。

認証局(CA)階層

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

  • インスタンスごとの CA: このオプションでは、各 Cloud SQL インスタンス専用の内部 CA が、対象のインスタンスのサーバー証明書に署名します。Cloud SQL はこれらの CA を作成して管理します。インスタンスごとの CA を選択するには、インスタンスを作成するときに、serverCaMode 設定(Cloud SQL Admin API)に GOOGLE_MANAGED_INTERNAL_CA または --server-ca-mode フラグ(gcloud CLI)を指定します。設定またはフラグを指定しない場合、このオプションはインスタンスのデフォルト値になります。
  • 共有 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)に GOOGLE_MANAGED_CAS_CA または --server-ca-mode フラグ(gcloud CLI)を指定します。

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

次の表に、2 つの CA 階層オプションを比較します。

機能 インスタンスごとの CA 共有 CA
CA の構造 インスタンスごとに個別の CA 同じリージョン内のインスタンス間で共有されるルート CA と下位 CA
暗号属性 SHA256 アルゴリズムを使用した RSA 2,048 ビットの鍵 SHA384 アルゴリズムを使用した 256 ビット鍵の楕円曲線デジタル署名アルゴリズム(ECDSA)
CA の有効期間 10 年 ルート CA は 25 年、下位 CA は 10 年
サーバー証明書の有効期間 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 ファイルをダウンロードします。このファイルには、現在のサーバー証明書と新しいサーバー証明書の両方の証明書情報が含まれています。すべての SQL Server クライアント ホストマシンに新しいファイルをコピーして、既存のファイルと置き換え、新しいファイルを使用するように SQL Server クライアントを更新します。

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

SSL 証明書の有効期限

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

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

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

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

次のステップ