このページでは、アプリケーションから 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 インスタンスに選択できる 3 種類のサーバー認証局(CA)について説明します。次の 3 つのオプションがあります。
- インスタンス単位の 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 CloudCertificate 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
を指定します。共有 CA オプションはプレビュー版です。
顧客管理の CA: このオプションでは、独自の CA 階層を作成して管理します。独自の CA と証明書を管理する場合は、このオプションを選択します。共有 CA を選択するには、CA Service で CA プールと CA を作成する必要があります。Cloud SQL で、インスタンスを作成するときに、CA プールを指定し、
serverCaMode
設定(Cloud SQL Admin API)または--server-ca-mode
フラグ(gcloud CLI)にCUSTOMER_MANAGED_CAS_CA
を指定します。顧客管理の CA オプションはプレビュー版です。
インスタンスの作成後は、gcloud sql instances describe
コマンドを使用して、Cloud SQL インスタンスに構成されている CA 階層を確認できます。詳細については、インスタンス情報を表示するをご覧ください。
次の表は、3 つの CA 階層オプションを比較したものです。
機能 | インスタンス単位の CA | 共有 CA | 顧客管理の CA |
---|---|---|---|
CA の構造 | 各インスタンスの個別の CA | 同じリージョン内のインスタンス間で共有されるルート CA と下位 CA | 作成して管理する CA 階層 |
暗号属性 | SHA256 アルゴリズムを使用した RSA 2,048 ビット鍵 | SHA384 アルゴリズムを使用した 256 ビット鍵の楕円曲線 Digital Signature Algorithm(ECDSA) | SHA384 アルゴリズムを使用した 256 ビット鍵の楕円曲線 Digital Signature Algorithm(ECDSA) |
CA の有効期間 | 10 年 | 25 年(ルート CA)、10 年(下位 CA) | 構成可能* |
サーバー証明書の有効期間 | 10 年 | 1 年 | 1 年** |
ユーザーが開始する CA のローテーション | はい | いいえ。CA ローテーションは Cloud SQL によって管理されます。 | はい |
ユーザーが開始するサーバー証明書のローテーション | はい | はい | はい |
TLS 接続用の CA トラスト アンカー | インスタンス単位の一意の CA が、対応するインスタンスのトラスト アンカーになります。 | ルート CA と下位 CA は、特定のリージョン内のすべてのインスタンスのトラスト アンカーです。 | 作成して管理する CA がトラスト アンカーです。 |
サーバー ID の検証 | それぞれのインスタンスに一意の CA があるため、CA を検証するとサーバー ID の検証も行われます。 | サーバー CA はインスタンス間で共有されるため、サーバー ID の検証には CA とホスト名の検証が必要です。 | CA はインスタンス間で共有されない場合がありますが、CA の検証と併せてホスト名の検証を行うことをおすすめします。 |
サーバー証明書のサブジェクト代替名(SAN)フィールド | SAN フィールドには、Private Service Connect が有効になっているインスタンスのホスト名(インスタンスの DNS 名)のみが含まれます。ホスト名は、サーバー ID の検証に使用できます。DNS 名をホスト名として Cloud SQL インスタンスに接続する場合は、DNS 解決を設定する必要があります。 | SAN フィールドには、すべてのタイプのインスタンスのホスト名(インスタンスの DNS 名)が含まれます。ホスト名は、サーバー ID の検証に使用できます。DNS 名をホスト名として Cloud SQL インスタンスに接続する場合は、DNS 解決を設定する必要があります。 | SAN フィールドには、すべてのタイプのインスタンスのホスト名(インスタンスの DNS 名)が含まれます。ホスト名は、サーバー ID の検証に使用できます。 |
* 顧客管理の CA オプションの場合、CA Service での CA 証明書のデフォルトの有効期間は 10 年です。CA 証明書に別の有効期間を構成することもできます。CA の有効期間を短くすると、より頻繁な CA ローテーションが必要になる可能性があります。また、有効期間を 1 年未満にすると、サーバー証明書の有効期間に影響する可能性があります。詳細については、CA ローテーションの管理をご覧ください。
** 顧客管理の CA オプションの場合、サーバー証明書のデフォルトの有効期間は 1 年です。ただし、CA 証明書の有効期間を 1 年未満に構成する場合は、サーバー証明書の有効期間がこれよりも短くなります。作成時に CA 証明書の有効期間を構成する方法については、CA 証明書の設定とルート CA を作成するをご覧ください。
Cloud SQL がホストするインスタンス単位の CA
インスタンス単位の CA 階層は、gcloud CLI、Cloud SQL Admin API、または Terraform を使用してインスタンスを作成する際のデフォルトのサーバー CA モード構成です。
Cloud SQL は、インスタンスを作成するときに、インスタンスごとに新しい自己署名サーバー CA を作成します。この設定を使用するには、インスタンスの作成時に serverCaMode
を GOOGLE_MANAGED_INTERNAL_CA
に構成します。
Cloud SQL Admin API または gcloud CLI を使用して serverCaMode
構成設定を指定しないままにすることも、Google Cloud コンソールで [Google 内部認証局] オプションを選択します。
次の図は、インスタンス単位の CA 階層を示しています。
CA Service がホストする共有 CA
共有 CA 階層は、Google Cloud コンソールを使用してインスタンスを作成する際のデフォルトのサーバー CA モード構成です。
このサーバー CA モードは、各リージョンのルート CA と下位サーバー CA で構成されます。下位サーバー CA はサーバー証明書を発行し、リージョン内のインスタンス間で共有されます。Cloud SQL は、共有リージョン サーバー CA のローテーションを処理し、CA 証明書バンドルをダウンロードするための一般公開リンクを提供します。
発行 CA が同じリージョン内のインスタンス間で共有されるサーバー CA 階層を使用するようにインスタンスを構成できます。この設定を使用するには、インスタンスの作成時に serverCaMode
を GOOGLE_MANAGED_CAS_CA
に構成します。
次の図は、共有 CA 階層を示しています。
顧客管理の CA
このサーバー CA モードでは、CA Service で独自の CA 階層を設定できます。
Cloud SQL で顧客管理の CA オプションを使用するには、Cloud SQL インスタンスと同じリージョンに CA プールを作成します。次に、少なくとも 1 つの CA を作成します。Cloud SQL インスタンスを作成するときに、serverCaPool
フィールドに CA プールの ID を指定し、serverCaMode
フィールドの値として CUSTOMER_MANAGED_CAS_CA
を設定します。CA Service は CA プールから CA を提供し、その CA を使用してインスタンスのサーバー証明書を発行します。
CA Service で CA を作成する際は、ユースケースに応じてルート CA または下位 CA を作成できます。たとえば、ルート CA 階層を設定する予定や外部 CA に連結する予定がある場合は、下位 CA を作成することをおすすめします。
独自の CA と証明書を管理する場合にのみ、顧客管理の CA オプションを選択します。詳細については、顧客管理の CA を使用するをご覧ください。顧客管理の CA オプションはプレビュー版です。
サーバー証明書のローテーションの仕組み
Cloud SQL では、サーバー証明書をローテーションできるため、古い証明書が期限切れになる前に新しい証明書にシームレスに切り替えることができます。
インスタンス単位の CA 階層、共有 CA 階層、または顧客管理の CA 階層を使用するインスタンスの場合、Cloud SQL インスタンスのサーバー証明書が期限切れになる約 3 か月前に、プロジェクト オーナーは、そのインスタンスに対する証明書ローテーション プロセスが開始されたことを通知するメールを Cloud SQL から受信します。メールにはインスタンスの名前が示され、Cloud SQL によって新しいサーバー証明書がプロジェクトに追加されたことが通知されます。既存のサーバー証明書は引き続き通常どおり機能します。事実上、インスタンスにはこの間、2 つのサーバー証明書があります。
使用するサーバー証明書ローテーション コマンドは、インスタンス単位の CA によって発行されたサーバー証明書と、共有 CA または顧客管理の CA によって発行されたサーバー証明書のどちらを使用しているかによって決まります。
現在のサーバー証明書が期限切れになる前に、新しい server-ca.pem
ファイルをダウンロードします。このファイルには、現在のサーバー証明書と新しいサーバー証明書の両方の証明書情報が含まれています。すべての SQL Server クライアント ホストマシンに新しいファイルをコピーして、既存のファイルと置き換え、新しいファイルを使用するように SQL Server クライアントを更新します。
すべての SQL Server クライアントが更新されたら、Cloud SQL インスタンスにローテーション コマンド(インスタンス単位の CA 用)またはローテーション コマンド(共有 CA または顧客管理の CA 用)を送信し、新しいサーバー証明書にローテーションします。この処理が完了すると、古いサーバー証明書は認識されなくなり、新しいサーバー証明書のみが使用されるようになります。
SSL 証明書の有効期限
インスタンス単位の CA を使用する Cloud SQL インスタンス(serverCaMode
が GOOGLE_MANAGED_INTERNAL_CA
に設定されているもの)の場合、SSL 証明書の有効期間は 10 年です。これらの証明書が期限切れになる前に、サーバー CA 証明書のローテーションを実施します。
共有 CA を使用するインスタンス(serverCaMode
が GOOGLE_MANAGED_CAS_CA
に設定されたもの)(プレビュー版)の場合、サーバー証明書の有効期間は 1 年です。有効期限が切れる前に、サーバー証明書のローテーションを実施します。ルート認証局(CA)証明書の有効期限は 25 年間で、下位の共有 CA 証明書の有効期限は 10 年間です。Cloud SQL がローテーションを処理します。
顧客管理の CA(serverCaMode
が CUSTOMER_MANAGED_CAS_CA
に設定されているもの)(プレビュー版)を使用している場合、作成した CA プール内の CA をローテーションすることで、CA 証明書のローテーションを実施できます。CA の有効期間は通常 10 年ですが、CA Service でこれよりも短い CA の有効期間を構成できます。
CA をローテーションするには、CA Service の CA ローテーション プロセスを使用します。詳細については、CA ローテーションの管理をご覧ください。
クライアントが CA の検証またはサーバー証明書のホスト名の検証を構成している場合、期限切れのサーバー証明書を持つ Cloud SQL インスタンスへのクライアントの接続は失敗します。クライアント接続の停止を防ぐため、証明書の有効期限が切れる前にサーバー証明書をローテーションします。
インスタンス単位の CA を使用する場合も、共有 CA または顧客管理の CA サーバーモードを使用する場合も、Cloud SQL インスタンスの SSL 構成はいつでもリセットできます。
次のステップ
Cloud SQL インスタンスで SSL / TLS を構成する。
Google Cloud での暗号化の処理方法について詳細を確認する。
- SQLServer での暗号化された接続の使用方法について学習する。
- Cloud SQL インスタンスで SSL / TLS を管理する。