SSL/TLS 証明書を構成する

このページでは、SSL/TLS を使用するようにインスタンスを構成する方法について説明します。Cloud SQL での SSL/TLS の使用について詳細を確認してください。

概要

Cloud SQL では、お客様がインスタンスを作成した時点で、サーバー証明書が自動的に作成されます。 SSL/TLS を使用するには、クライアント証明書を作成して、MySQL クライアント ホストマシンにダウンロードする必要があります。SSL または TLS を使用して接続する場合は、すべての接続で SSL/TLS を使用することをおすすめします。

SSL/TLS の要求

SSL/TLS の要求が有効な場合は、Cloud SQL Proxy または SSL/TLS 証明書を使用して Cloud SQL インスタンスに接続できます。SSL/TLS を必要としない場合、有効な証明書を持たないクライアントの接続が許可されます。

SSL/TLS の要求を有効にするには:

コンソール

  1. Google Cloud Console の Cloud SQL インスタンス ページに移動します。
    [Cloud SQL インスタンス] ページに移動
  2. インスタンス名をクリックして [インスタンスの詳細] ページを開きます。
  3. 左側のナビゲーション パネルで [接続] リンクをクリックします。
  4. [SSL 接続] セクションまでスクロールします。
  5. [SSL 接続のみ許可] をクリックします。

gcloud

gcloud sql instances patch [INSTANCE_NAME] --require-ssl
  

REST

  1. 後述のリクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID

    HTTP メソッドと URL:

    PATCH https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

    JSON 本文のリクエスト:

    {
      "settings": {
        "ipConfiguration": {"requireSsl": "true"}
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

サーバー証明書

Cloud SQL では、お客様がインスタンスを作成した時点で、サーバー証明書が自動的に作成されます。有効である限り、お客様が積極的にサーバー証明書を管理する必要はありません。ただし、証明書には 10 年間の有効期限があり、期限が切れた証明書は無効になります。そうなると、クライアントでは、その証明書を使用したインスタンスへの安全な接続が確立できなくなります。

コンソールでは、サーバー証明書の作成日や有効期限などの情報を取得する、または手動で新しい証明書を作成することができます。

コンソール

  1. Google Cloud Console の Cloud SQL インスタンス ページに移動します。

    [Cloud SQL インスタンス] ページに移動

  2. インスタンス名をクリックして [インスタンスの詳細] ページを開きます。
  3. 左側のナビゲーション パネルで [接続] リンクをクリックします。
  4. [SSL サーバー証明書の構成] セクションまでスクロールします。

    サーバー証明書の有効期限はテーブルに表示されています。

クライアント証明書

新しいクライアント証明書を作成する

クライアント証明書は、インスタンスごとに 10 件まで作成できます。証明書の秘密鍵を紛失した場合、その秘密鍵は復元できないため、新たに秘密鍵を作成する必要があります。

Console(第 2 世代)

  1. Google Cloud Console の Cloud SQL インスタンス ページに移動します。

    [Cloud SQL インスタンス] ページに移動

  2. インスタンス名をクリックして [インスタンスの詳細] ページを開きます。
  3. 左側のナビゲーション パネルで [接続] リンクをクリックします。
  4. [SSL クライアント証明書の構成] セクションまでスクロールします。
  5. [クライアント証明書を作成] をクリックします。
  6. [クライアント証明書を作成] ダイアログ ボックスで、一意の名前を追加します。
  7. [作成] をクリック
  8. [新しい SSL 証明書を作成しました] ダイアログ ボックスの最初のセクションで [client-key.pem をダウンロード] をクリックして、秘密鍵を client-key.pem というファイルにダウンロードします。
  9. 2 番目のセクションで、[client-cert.pem をダウンロード] をクリックして、クライアント証明書を client-cert.pem というファイルにダウンロードします。
  10. 3 番目のセクションで [server-ca.pem をダウンロード] をクリックして、サーバー証明書を server-ca.pem というファイルにダウンロードします。
  11. [閉じる] をクリックします。

Console(第 1 世代)

以下の作業では、途中 Cloud SQL インスタンスを再起動します。

  1. Google Cloud Console の Cloud SQL インスタンス ページに移動します。

    [Cloud SQL インスタンス] ページに移動

  2. インスタンス名をクリックして [インスタンスの詳細] ページを開きます。
  3. 左側のナビゲーション パネルで [接続] リンクをクリックします。
  4. [クライアント証明書] セクションで、[クライアント証明書を作成] をクリックします。
  5. [新しいクライアント証明書] ダイアログ ボックスで、証明書に固有の名前を指定して、[追加] をクリックします。
  6. [新しい SSL 証明書を作成しました] ダイアログ ボックスの最初のセクションにあるリンクをクリックして、client-key.pem というファイルに秘密鍵をダウンロードします。
  7. 2 番目のセクションで、リンクをクリックして、クライアント証明書を client-cert.pem というファイルにダウンロードします。
  8. 3 番目のセクションで、リンクをクリックして、サーバー証明書を server-ca.pem というファイルにダウンロードします。
  9. インスタンスをすぐに再起動する場合は [閉じて再起動] をクリックします。後でインスタンスを手動で再起動する場合は [閉じる] をクリックします。

    証明書を有効にするためには、インスタンスを必ず再起動しなければなりません。

gcloud

第 1 世代インスタンスに対して以下の作業を行う場合は、途中 Cloud SQL インスタンスを再起動する必要があります。

  1. ssl client-certs create コマンドを使用して、クライアント証明書を作成します。

    gcloud sql ssl client-certs create [CERT_NAME] client-key.pem --instance=[INSTANCE_NAME]
    
  2. 作成した証明書の公開鍵を取得し、ssl client-certs describe コマンドを使用して client-cert.pem ファイルにコピーします。

    gcloud sql ssl client-certs describe [CERT_NAME] --instance=[INSTANCE_NAME] --format="value(cert)" > client-cert.pem
    
  3. instances describe コマンドを使用して、サーバー証明書を server-ca.pem ファイルにコピーします。

    gcloud sql instances describe [INSTANCE_NAME]  --format="value(serverCaCert.cert)" > server-ca.pem
    
  4. 第 1 世代のインスタンスの場合は、証明書と SSL/TLS 構成の変更内容を有効にするため、インスタンスを再起動します。

    gcloud sql instances restart [INSTANCE_NAME]
    

REST

第 1 世代インスタンスに対して以下の作業を行う場合、その途中で Cloud SQL インスタンスの再起動が必要になります。

  1. SSL/TLS 証明書を作成したうえで、このインスタンスにとって一意となる名前をその証明書に対して指定します。

    後述のリクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • client-cert-name: クライアント証明書名

    HTTP メソッドと URL:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

    JSON 本文のリクエスト:

    {
      "commonName" : "client-cert-name"
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

  2. 以下のようにして、レスポンスのうち引用符で囲まれた証明書の内容全体(引用符そのものは除く)をローカル ファイルにコピーします。
    1. serverCaCert.certserver-ca.pem にコピーします。
    2. clientCert.certclient-cert.pem にコピーします。
    3. certPrivateKeyclient-key.pem にコピーします。
  3. 第 1 世代インスタンスの場合はインスタンスを再起動します。

    後述のリクエストのデータを使用する前に、次のように置き換えます。

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • activation-policy: アクティベーション ポリシーは [常にオン] または [常にオフ] です

    HTTP メソッドと URL:

    POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/restart

    JSON 本文のリクエスト:

    {
      "settings": {
        "activationPolicy": "activation-policy"
      }
    }
    

    リクエストを送信するには、次のいずれかのオプションを展開します。

    次のような JSON レスポンスが返されます。

    {
      "kind": "sql#operation",
      "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
      "status": "PENDING",
      "user": "user@example.com",
      "insertTime": "2020-01-20T21:30:35.667Z",
      "operationType": "RESTART",
      "name": "operation-id",
      "targetId": "instance-id",
      "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
      "targetProject": "project-id"
    }
    

この時点でお客様が保持している証明書は以下のとおりです。

  • server-ca.pem という名前で保存されたサーバー証明書。
  • client-cert.pem という名前で保存されたクライアントの公開鍵証明書。
  • client-key.pem という名前で保存されたクライアント秘密鍵。

接続に使用するツールにより、これら 3 つのアイテムの指定方法が異なります。たとえば、MySQL クライアントを使用して接続するときは、これら 3 つのファイルをそれぞれ --ssl-ca--ssl-cert--ssl-key コマンド オプションの値として指定します。MySQL クライアントと SSL/TLS を使用した接続の例については、MySQL クライアントとの接続をご覧ください。

次のステップ