Google マネージド SSL 証明書の使用

このページでは、Google マネージド SSL 証明書を作成および使用する方法について説明します。

Google マネージド SSL 証明書は、ドメイン用に Google Cloud が取得して管理する証明書で、自動的に更新されます。証明書ごとに複数のホスト名をサポートするドメイン検証(DV)証明書です。

特定のタイプの Google Cloud ロードバランサには、次のような SSL 証明書が必要です。

Google Kubernetes Engine でマネージド SSL 証明書を使用することもできます。詳細については、Google マネージド SSL 証明書の使用をご覧ください。

ロードバランサの作成前、作成中、作成後に、Google が管理する証明書を作成できます。このページでは、ロードバランサの作成中ではなく、作成前または作成後に証明書を作成することを前提としています。ロードバランサの作成中に証明書を作成するには、ロードバランサの入門ページをご覧ください。

複数ドメイン

複数のサブジェクトの代替名がサポートされています。それぞれの Google マネージド SSL 証明書は、Google マネージド SSL 証明書あたりの最大ドメイン数までサポートします。

ドメイン数が上限を超えている場合、複数の Google マネージド証明書をリクエストする必要があります。たとえば、(最大 + 1)個のドメインで Google マネージド証明書を作成しようとしても、Google は証明書を発行しません。代わりに、2 つ以上の Google マネージド証明書を作成し、各証明書に関連付けられるドメインを明示する必要があります。

Google Cloud は、RFC 6066 で定義されているように、Server Name Indication(SNI)を実装しています。

Google が複数のドメインを持つマネージド証明書を更新する場合、いずれかのドメインまたはサブドメインがロードバランサの IP アドレスを指していない場合、更新プロセスは失敗します。マネージド証明書をプロビジョニングしたら、すべてのドメインとサブドメインが依然としてロードバランサの IP アドレスを指していることを確認して、更新の失敗を回避します。

始める前に

権限

このガイドの手順を行う前に、プロジェクトで SSL 証明書を作成、変更する権限が必要です。次のいずれかのロールまたは権限がある場合は、これらの権限が付与されます。

  • プロジェクトのオーナーまたは編集者です。
  • プロジェクトで compute.loadBalancerAdmin ロールが割り当てられているか、compute.securityAdmin ロールと compute.networkAdmin ロールの両方が割り当てられている。
  • プロジェクトで割り当てられているカスタムロールに、compute.sslCertificates.* 権限と、compute.targetHttpsProxies.* または compute.targetSslProxies.* のいずれか、あるいはその両方(使用するロードバランサによる)が含まれている。

ステップ 1.Google マネージド SSL 証明書を作成する

ロードバランサの作成前、作成中、作成後に、Google が管理する証明書を作成できます。Cloud Console でロードバランサを作成するときに、Cloud Console を使用して証明書を作成できます。また、ロードバランサの作成前または作成後に証明書を作成することもできます。このステップでは、後で 1 つ以上のロードバランサに追加できる証明書の作成方法について説明します。

Google マネージド SSL 証明書をすでに作成している場合は、この手順をスキップできます。

コンソール

グローバル SSL 証明書は、[負荷分散] ページの [証明書] タブで操作できます。

  1. Google Cloud Console の [証明書] ページに移動します。
    [証明書] ページに移動
  2. [SSL 証明書を作成] をクリックします。
  3. 証明書の名前と説明(省略可)を入力します。
  4. [Google 管理の証明書を作成する] を選択します。
  5. ドメインを追加します。
  6. [作成] をクリックします。

gcloud

gcloud compute ssl-certificates create コマンドを使用して、外部 HTTP(S) ロードバランサまたは SSL プロキシ ロードバランサ用のグローバル Google マネージド SSL 証明書を作成します。

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --description=DESCRIPTION \
    --domains=DOMAIN_LIST \
    --global

次のプレースホルダを適切な値に置き換えます。

  • CERTIFICATE_NAME: グローバル SSL 証明書の名前
  • DESCRIPTION: グローバル SSL 証明書の説明
  • DOMAIN_LIST: この証明書に使用する単一のドメイン名またはドメイン名のカンマ区切りリスト

api

Google マネージド証明書リソース sslCertificates.insert メソッドを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates
{
  "name": "ssl-certificate-name",
  "managed": {
    "domains": [
      "www.example.com"
    ]
  },
  "type": "MANAGED"
}

Google マネージド SSL 証明書のステータスの確認

コンソール

グローバル SSL 証明書のステータスは、[負荷分散] ページの [証明書] タブで確認できます。

  1. Google Cloud Console の [証明書] ページに移動します。
    [証明書] ページに移動
  2. (省略可)SSL 証明書のリストをフィルタリングします。
  3. [ステータス] 列を確認します。
  4. 詳細を表示するには、証明書名をクリックします。

gcloud

Google マネージド証明書のステータスを特定するには、gcloud compute コマンドを使用します。適切なコマンドを実行した後は、以下の点に注意してください。

  • マネージド ステータス
  • ドメイン ステータス

--global フラグを指定して gcloud compute ssl-certificates list コマンドを使用すると、Google マネージド SSL 証明書が一覧表示されます。

gcloud compute ssl-certificates list \
   --global

gcloud compute ssl-certificates describe コマンドを使用できます。CERTIFICATE_NAME は、次のように置き換えます。

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --global \
   --format="get(name,managed.status, managed.domainStatus)"

この時点で、証明書のステータスとドメインのステータスは PROVISIONING です。このページのすべての手順を完了すると、ステータスが ACTIVE に変わります。

ステータスの詳細については、トラブルシューティング ページをご覧ください。

ステップ 2: ロードバランサを作成または更新する

ACTIVE にするには、Google マネージド SSL 証明書をロードバランサ、特にロードバランサのターゲット プロキシに関連付ける必要があります。

SSL 証明書を作成して PROVISIONING 状態にしたら、次の入門ガイドで説明されているように、ロードバランサの作成中にこの証明書を使用できます。

ここで説明するように、既存のロードバランサの更新に使用することもできます。

Console

Google Cloud Console を使用して外部 HTTP(S) ロードバランサまたは SSL プロキシ ロードバランサを更新すると、SSL 証明書が正しいターゲット プロキシに自動的に関連付けられます。

  1. Google Cloud Console の [負荷分散] ページに移動します。
    [負荷分散] ページに移動
  2. ロードバランサの名前をクリックします。
  3. [編集]()をクリックします。
  4. [フロントエンドの構成] をクリックします。
  5. 正しいフロントエンド(HTTPS、HTTP/2、または SSL)をクリックします。
  6. [その他の証明書] をクリックし、プルダウン リストから Google マネージド証明書を選択します。
  7. [作成] をクリックします。

gcloud

SSL 証明書を外部 HTTP(S) ロードバランサのターゲット HTTPS プロキシに関連付けるには、--global-ssl-certificates--global フラグを指定して、gcloud compute target-https-proxies update コマンドを使用します。

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST \
    --global-ssl-certificates \
    --global

SSL 証明書を SSL プロキシ ロードバランサのターゲット SSL プロキシに関連付けるには、gcloud compute target-ssl-proxies update コマンドを使用します。

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates SSL_CERTIFICATE_LIST

プレースホルダを有効な値に置き換えます。

  • TARGET_PROXY_NAME: ロードバランサのターゲット プロキシの名前
  • SSL_CERTIFICATE_LIST: SSL 証明書のカンマ区切りリスト

それぞれのターゲット HTTPS プロキシまたはターゲット SSL プロキシは、1 つ以上の SSL 証明書を参照している必要があります。ターゲット プロキシは、複数の SSL 証明書を参照できます。詳細については、負荷分散のリソースの割り当てと上限のターゲット プールとターゲット プロキシをご覧ください。

ステップ 3: ターゲット プロキシの関連付けを確認する

ロードバランサを作成または更新したら、次のコマンドを実行して、SSL 証明書がロードバランサのターゲット プロキシに関連付けられていることを確認します。

外部 HTTPS ロードバランサの場合:

gcloud compute target-https-proxies describe target-https-proxy-name \
    --global \
    --format="get(sslCertificates)"

SSL プロキシ ロードバランサの場合:

gcloud compute target-ssl-proxies describe target-ssl-proxy-name \
    --format="get(sslCertificates)"

この時点では、Google マネージド証明書のステータスは PROVISIONING のままである可能性があります。Google Cloud は認証局と連携して証明書を発行します。Google マネージド証明書のプロビジョニングには最長で 60 分かかります。

ステップ 4: ロードバランサの IP アドレスを参照するように DNS の A レコードと AAAA レコードを更新する

登録事業者のサイト、DNS ホスト、または ISP(DNS レコードが管理されている場所)で、ドメインとサブドメインの DNS A レコード(IPv4 の場合)および DNS AAAA レコード(IPv6 の場合)を追加または更新して、これらのレコードでロードバランサの転送ルールまたはルールと関連付けられた IP アドレスを参照するようにします。

Cloud DNSGoogle Domains を使用している場合は、ドメインを設定し、ネームサーバーを更新します。

単一の証明書に複数のドメインを使用する場合は、すべてのドメインとそのサブドメインの DNS レコードを追加または更新して、すべてのレコードでロードバランサの IP アドレスを指すようにする必要があります。

DNS 伝播が完了したら、dig コマンドを実行して設定を確認できます。たとえばドメインが www.example.com の場合は、次の dig コマンドを実行します。

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com.        1742    IN  CNAME   www.example.com.edgekey.net.
www.example.com.edgekey.net. 21330 IN   CNAME   www.example.com.edgekey.net.globalredir.akadns.net.
www.example.com.edgekey.net.globalredir.akadns.net. 3356 IN CNAME   e6858.dsce9.akamaiedge.net.
e6858.dsce9.akamaiedge.net. 212 IN  A   203.0.113.5

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

この例では、203.0.113.5 はロードバランサの IP アドレスです。

また、次のコマンドを再実行します。

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --format="get(managed.domainStatus)"

ドメインのステータスが FAILED_NOT_VISIBLE の場合は、トラブルシューティング ページで Google マネージド SSL 証明書のドメイン ステータスの説明をご覧ください。

ステップ 5: OpenSSL でテストする

証明書とドメインのステータスがアクティブになった後、ロードバランサが Google マネージド SSL 証明書の使用を開始するまでに 30 分ほどかかる場合があります。

テストするには、次の OpenSSL コマンドを実行します。DOMAIN は DNS 名に置き換え、IP_ADDRESS はロードバランサの IP アドレスに置き換えます。

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

このコマンドは、ロードバランサがクライアントに提示する証明書を出力します。他の詳細情報とともに、出力に証明書チェーンと Verify return code: 0 (ok) が含まれていることを確認します。

Google マネージド SSL 証明書の更新

Google Cloud は、90 日間有効なマネージド証明書をプロビジョニングします。有効期限が切れる約 1 か月前に、証明書の更新プロセスが自動的に開始されます。このために、ドメインの CAA DNS レコードと CA のリストの両方にある認証局(CA)が選択されます。

更新に使用する CA は、以前のバージョンの Google マネージド証明書を発行するときに使用した CA とは異なる場合があります。ドメインの Certification Authority Authorization(CAA)DNS レコードで、Google マネージド証明書が使用する CA のリストから 1 つの CA を確実に指定することにより、Google Cloud が更新に使用する CA をコントロールできます。

Google が複数のドメインを持つマネージド証明書を更新する場合、いずれかのドメインまたはサブドメインがロードバランサの IP アドレスを指していない場合、更新プロセスは失敗します。マネージド証明書をプロビジョニングしたら、すべてのドメインとサブドメインが依然としてロードバランサの IP アドレスを指していることを確認して、更新の失敗を回避します。

オプションの手順

Google マネージド証明書の発行が許可されている CA の指定

DNS サーバー ソフトウェアで、Google マネージド証明書の発行を許可する CA を指定します。これを行うには、CAA レコードを作成または変更して、pki.goog または letsencrypt.org(あるいはその両方)を含めます。CAA レコードがない場合、デフォルトでは、pki.googletsencrypt.org の両方が許可されます。

DOMAIN. CAA 0 issue "pki.goog"
DOMAIN. CAA 0 issue "letsencrypt.org"

letsencrypt.org 証明書のサポートはベストエフォート方式で提供されます。最高の信頼性を得るには、pki.googletsencrypt.org の両方を許可します。CA を 1 つだけ指定した場合、その CA のみが証明書の作成と更新に使用されます。この方法はおすすめしません。

証明書を初めて作成するとき、Google Cloud は pki.goog または letsencrypt.org を選択し、それを使用して証明書を発行します。Google が証明書を更新するときは、CAA レコード(作成した場合)で指定した CA に応じて、他の CA が証明書を発行する場合があります。次のいずれかの場合、別の CA によって証明書が更新される場合があります。

  • ドメインの DNS CAA レコードがない。
  • DNS CAA レコードに両方の CA が含まれている。

詳細については、RFC の Certification Authority Authorization(CAA)DNS レコードをご覧ください。

国際化ドメイン名(IDN)letsencrypt.org によって発行されます。現在、pki.goog ではサポートされていません。

Cloud DNS を使用している場合は、レコードの追加方法を確認して、--type フラグを CAA に設定してください。

既存の SSL 証明書の置き換え

既存の SSL 証明書を置き換えるには:

  1. 代替の Google マネージド SSL 証明書を作成するプロセスを開始します。この時点では、この証明書はまだアクティブになっていません。

  2. ターゲット プロキシを更新して、参照された証明書のリストに、現在の SSL 証明書と代替の SSL 証明書が含まれるようにします。ターゲット プロキシの更新手順は次のとおりです。

  3. 代替 SSL 証明書のプロビジョニングが完了するまで待ちます。この処理には 60 分ほどかかる場合があります。プロビジョニングが正常に完了すると、証明書のステータスACTIVE になります。

  4. すべての Google Front Ends(GFE)が代替証明書を利用できるように、さらに 30 分間待ちます。

  5. ターゲット プロキシを更新して、参照する証明書のリストから代替 SSL 証明書を削除します。ターゲット プロキシの更新手順は次のとおりです。

  6. 10 分待って、ロードバランサが古い SSL 証明書ではなく新しい SSL 証明書を使用していることを確認します。

  7. 必要に応じて、古い SSL 証明書リソースを削除します

古い SSL 証明書を削除しない場合、この証明書は有効期限が切れるまでアクティブのままになります。

セルフ マネージド SSL 証明書から Google マネージド SSL 証明書への移行

ロードバランサをセルフ マネージド SSL 証明書から Google マネージド SSL 証明書に移行する場合、次の手順をこの順序で実行する必要があります。

  1. 新しい Google マネージド証明書を作成します
  2. 既存のセルフ マネージド証明書とターゲット プロキシの関連付けを保ちながら、新しい Google マネージド証明書と正しいターゲット プロキシを関連付けます
  3. Google マネージド証明書のステータスACTIVE になるまで待ちます。
  4. 新しい証明書が Google Front End(GFE)に配信されるまで 30 分待ちます。
  5. ターゲット プロキシを再度更新し、セルフ マネージド証明書を削除します。

SSL 証明書の削除

SSL 証明書を削除する前に、HTTPS または SSL ターゲット プロキシがこの証明書を参照していないことを確認してください。次の 2 つの方法があります。

1 つ以上の SSL 証明書を削除するには:

コンソール

グローバル SSL 証明書は、[負荷分散] ページの [証明書] タブで削除できます。

  1. Google Cloud Console の [証明書] ページに移動します。
    [証明書] ページに移動
  2. 削除する SSL 証明書を選択します。
  3. [削除] をクリックします。
  4. もう一度 [削除] をクリックして確定します。

gcloud

グローバル SSL 証明書(外部 HTTP(S) ロードバランサまたは SSL プロキシ ロードバランサの場合)を削除するには、gcloud compute ssl-certificates delete コマンドと --global コマンドを使用します。

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

プレースホルダを有効な値に置き換えます。

  • CERTIFICATE_NAME: SSL 証明書の名前

次のステップ