SSL / TLS 証明書の管理

このページでは、クライアント証明書とサーバー証明書を管理する方法について説明します。

クライアント証明書の管理

クライアント証明書を取得する

クライアント証明書のうち、公開鍵の部分は取得できます。ただし、秘密鍵は取得できません。秘密鍵を紛失した場合は、新たに秘密鍵を作成する必要があります。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [セキュリティ] タブを選択します。
  5. [クライアント証明書の管理] で、証明書名をクリックします。
  6. [SSL クライアント証明書] ダイアログ ボックスが開き、証明書をダウンロードするためのリンクを含むクライアント証明書(client-cert.pem)が表示されます。

gcloud

ssl client-certs describe コマンドを使用して、クライアント証明書の公開鍵を取得します。

gcloud sql ssl client-certs describe CERT_NAME \
--instance=INSTANCE_NAME \
--format="value(cert)" > client-cert.pem

REST v1

  1. 目的の証明書のフィンガープリントを取得するため、インスタンス上にある証明書のリストを表示します。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

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

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

    取得する証明書の sha1Fingerprint フィールドを記録します。引用符は除外してください。

  2. 証明書を取得します。

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • sha1FingerPrint: 証明書の sha1FingerPrint

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

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

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

  3. 引用符で囲まれたすべての証明書データをファイルにコピーします。たとえば、client-cert.pem のようになります。引用符そのものはコピーしないでください。

REST v1beta4

  1. 目的の証明書のフィンガープリントを取得するため、インスタンス上にある証明書のリストを表示します。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

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

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

    取得する証明書の sha1Fingerprint フィールドを記録します。引用符は除外してください。

  2. 証明書を取得します。

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • sha1FingerPrint: 証明書の sha1FingerPrint

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

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

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

  3. 引用符で囲まれたすべての証明書データをファイルにコピーします。たとえば、client-cert.pem のようになります。引用符そのものはコピーしないでください。

クライアント証明書を削除する

クライアント証明書を削除するとデータベース サーバーが更新され、再起動の必要がなくなります。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [セキュリティ] タブを選択します。
  5. [クライアント証明書の管理] で、削除する証明書を選択し、削除 をクリックします。
  6. [クライアント証明書の削除] ダイアログ ボックスで、[OK] をクリックします。

gcloud

ssl client-certs delete コマンドを使用してクライアント証明書を削除します。

gcloud sql ssl client-certs delete CERT_NAME \
--instance=INSTANCE_NAME

REST v1

  1. 削除する証明書のフィンガープリントを取得するため、インスタンス上にある証明書のリストを表示します。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts

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

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

    削除する証明書の sha1Fingerprint フィールドを記録します。引用符は除外してください。

  2. 証明書を削除します。

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • sha1FingerPrint: 証明書の sha1FingerPrint

    HTTP メソッドと URL:

    DELETE https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

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

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

REST v1beta4

  1. 削除する証明書のフィンガープリントを取得するため、インスタンス上にある証明書のリストを表示します。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts

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

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

    削除する証明書の sha1Fingerprint フィールドを記録します。引用符は除外してください。

  2. 証明書を削除します。

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

    • project-id: プロジェクト ID
    • instance-id: インスタンス ID
    • sha1FingerPrint: 証明書の sha1FingerPrint

    HTTP メソッドと URL:

    DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/sslCerts/sha1FingerPrint

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

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

サーバー証明書の管理

サーバー証明書のローテーションを行う

証明書の期限切れに関する通知を受け取った場合やローテーションを開始した場合は、ローテーションを完了するために次の手順を実行する必要があります。

  1. 新しいサーバー証明書情報をダウンロードします。
  2. 新しいサーバー証明書情報を使用するようにクライアントを更新します。
  3. ローテーションを完了します。これにより、現在アクティブな証明書が「前の」スロットに移動し、新しく追加された証明書がアクティブな証明書に更新されます。

コンソール

新しいサーバー証明書情報をダウンロードします。

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [セキュリティ] タブを選択します。
  5. [MANAGE CERTIFICATES] をクリックして展開します。
  6. [証明書をローテーション] を選択します。

    有効な証明書がない場合は、ローテーション オプションがグレー表示になります。

  7. [DOWNLOAD CERTIFICATES] をクリックします。

PEM ファイルとしてエンコードされたサーバー証明書情報は、ローカル環境にダウンロードされます。

  • ダウンロードしたファイルをクライアント ホストマシンにコピーし、既存の server-ca.pem ファイルを置き換えて、すべての PostgreSQL クライアントを更新し、新しい情報を使用します。

クライアントの更新後、ローテーションを完了します。

  1. [セキュリティ] タブに戻ります。
  2. [MANAGE CERTIFICATES] をクリックして展開します。
  3. [証明書をローテーション] を選択します。
  4. クライアントが正しく接続していることを確認します。
  5. 新しくローテーションされた証明書を使用して接続しているクライアントが存在しない場合は、[証明書をロールバック] を選択して前の構成にロールバックできます。

gcloud

  1. サーバー証明書を作成します。
    gcloud beta sql ssl server-ca-certs create \
    --instance=INSTANCE
  2. ローカル PEM ファイルに証明書情報をダウンロードします。
    gcloud beta sql ssl server-ca-certs list \
    --format="value(cert)" \
    --instance=INSTANCE_NAME > \
    FILE_PATH/FILE_NAME.pem
  3. ダウンロードしたファイルをクライアント ホストマシンにコピーし、既存の server-ca.pem ファイルを置き換えて、すべてのクライアントを更新し、新しい情報を使用します。
  4. クライアントの更新後、ローテーションを完了します。
    gcloud beta sql ssl server-ca-certs rotate \
    --instance=INSTANCE_NAME
          
  5. クライアントが正しく接続していることを確認します。

    新しくローテーションされた証明書を使用して接続していないクライアントがある場合は、以前の構成にロールバックできます。

REST v1

  1. サーバー証明書をダウンロードします。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas

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

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

  2. ローテーションを完了します。

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

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

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

REST v1beta4

  1. サーバー証明書をダウンロードします。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas

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

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

  2. ローテーションを完了します。

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa

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

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

証明書のローテーション オペレーションをロールバックする

証明書のローテーションを完了したら、クライアントはすべて新しい証明書を使用して Cloud SQL インスタンスに接続する必要があります。クライアントが新しい証明書情報を使用するように正しく更新されていない場合は、SSL/TLS を使用してインスタンスに接続できません。この場合、前の証明書構成にロールバックできます。

ロールバック オペレーションにより、現在アクティブな証明書が「今後の」スロットに移動されます(現在の「今後の」証明書が置き換えられます)。「前」の証明書が現在アクティブな証明書になり、証明書構成がローテーションの完了前の状態に戻ります。

以前の証明書構成にロールバックするには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [セキュリティ] タブを選択します。
  5. [MANAGE CERTIFICATES] をクリックして展開します。
  6. [証明書をロールバック] を選択します。

    有効な証明書がない場合、ローテーション オプションがグレー表示になります。それ以外の場合、ロールバック アクションは数秒後に完了します。

gcloud

gcloud beta sql ssl server-ca-certs rollback \
--instance=INSTANCE_NAME
   

REST v1

  1. サーバー証明書をダウンロードします。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/listServerCas

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

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

  2. ロールバック先のバージョンの sha1Fingerprint フィールドをコピーします。

    activeVersion として表示される sha1Fingerprint 値の直前の createTime 値を使用したバージョンを探します。

  3. ローテーションをロールバックします。

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

    JSON 本文のリクエスト:

    {
      "rotateServerCaContext": {"nextVersion": "sha1Fingerprint"}
    }
    

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

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

REST v1beta4

  1. サーバー証明書をダウンロードします。

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

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

    HTTP メソッドと URL:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/listServerCas

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

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

  2. ロールバック先のバージョンの sha1Fingerprint フィールドをコピーします。

    activeVersion として表示される sha1Fingerprint 値の直前の createTime 値を使用したバージョンを探します。

  3. ローテーションをロールバックします。

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa

    JSON 本文のリクエスト:

    {
      "rotateServerCaContext": {"nextVersion": "sha1Fingerprint"}
    }
    

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

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

ローテーションを開始する

ローテーションの開始では、Cloud SQL からのメールを待つ必要はありません。いつでも開始できます。ローテーションを開始すると、新しい証明書が作成され、「今後の」スロットに配置されます。証明書がすでに「今後の」スロットにある場合、その証明書は削除されます。今後の証明書は 1 つだけです。

ローテーションを開始するには:

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [セキュリティ] タブを選択します。
  5. [新しい証明書を作成] をクリックします。
  6. [MANAGE CERTIFICATES] をクリックして展開します。
  7. [証明書をローテーション] を選択します。

    有効な証明書がない場合は、ローテーション オプションがグレー表示になります。

  8. サーバー証明書のローテーションの説明に沿って、ローテーションを完了します。

gcloud

  1. ローテーションを開始します。
    gcloud beta sql ssl server-ca-certs create \
    --instance=INSTANCE_NAME
         
  2. サーバー証明書のローテーションの説明に沿って、ローテーションを完了します。

REST v1

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id/rotateServerCa

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

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

  2. サーバー証明書のローテーションの説明に従って、ローテーションを完了します。

REST v1beta4

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/rotateServerCa

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

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

  2. サーバー証明書のローテーションの説明に従って、ローテーションを完了します。

サーバー証明書に関する情報を取得する

サーバー証明書については、その有効期限や暗号化レベルなどの情報を取得できます。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [セキュリティ] タブを選択します。

    [サーバー証明書の管理] で、サーバー証明書の有効期限を表で確認できます。

    証明書のタイプを確認するには、gcloud beta sql ssl server-ca-certs list --instance=INSTANCE_NAME コマンドを使用します。

gcloud

gcloud beta sql ssl server-ca-certs list \
--instance=INSTANCE_NAME

REST v1

インスタンスについて説明コマンド(describe)を使用すると、サーバー証明書に関する詳細を確認できます。

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

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

HTTP メソッドと URL:

GET https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id?fields=serverCaCert

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

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

REST v1beta4

インスタンスについて説明コマンド(describe)を使用すると、サーバー証明書に関する詳細を確認できます。

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

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

HTTP メソッドと URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id?fields=serverCaCert

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

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

SSL / TLS 構成をリセットする

SSL/TLS 構成は完全にリセットできます。

コンソール

  1. Google Cloud コンソールで Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンスの [概要] ページを開くには、インスタンス名をクリックします。
  3. SQL ナビゲーション メニューから [接続] を選択します。
  4. [SSL 構成をリセット] セクションまで下にスクロールします。
  5. [SSL 設定をリセット] をクリックします。

gcloud

  1. 証明書を更新します。

    gcloud sql instances reset-ssl-config INSTANCE_NAME
  2. 新しいクライアント証明書を作成します

REST v1beta4

  1. 証明書を更新します。

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

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

    HTTP メソッドと URL:

    POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/resetSslConfig

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

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

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

次のステップ