SSL(TLS)証明書の構成

Media CDN サービスを作成した後、SSL(TLS)証明書を発行して添付し、ブラウザとモバイル アプリケーションでのセキュアな接続を実現できます。

マネージド証明書を発行する

マネージド証明書を作成して Media CDN サービスに添付するには、次の操作を行います。

  1. チャレンジ トークンを作成し、DNS レコードを追加して、証明書を発行するドメインのオーナー権限(「承認」)を示します。
  2. その承認に基づいて 1 つ以上のドメイン名で EDGE_CACHE 型の証明書を作成します。
  3. その証明書を 1 つ以上の Edge Cache Service に添付します。

証明書を承認して作成し、Edge Cache Service に添付するには、次の Identity and Access Management 権限が必要です。

  • certificatemanager.certs.create
  • certificatemanager.certs.get
  • certificatemanager.certs.list
  • certificatemanager.certs.use
  • certificatemanager.dnsauthorizations.create
  • certificatemanager.dnsauthorizations.get
  • certificatemanager.dnsauthorizations.list
  • certificatemanager.dnsauthorizations.use

Media CDN サービスに既存の証明書を添付する必要があるユーザーは、certificatemanager.certs.getcertificatemanager.certs.listcertificatemanager.certs.use の IAM 権限が必要です。

始める前に

  • パブリック DNS レコードを更新できる登録済みドメイン名が必要です。
  • SSL 証明書の概要を確認します。

DNS 認証を作成する

まず、ドメインの証明書を発行する前に、ドメインの所有権を示す DNS 認証を作成する必要があります。DNS 認証では、DNS-01 ACME チャレンジを使用し、ユーザー向けのトラフィックを Edge Cache Service に転送する前に証明書を発行できます。

次のように、domain の値を証明書を作成するドメイン名に設定します。

gcloud

gcloud certificate-manager dns-authorizations コマンドを使用します。

gcloud certificate-manager dns-authorizations create DOMAIN_NAME_AUTH \
    --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe DOMAIN_NAME_AUTH

gcloud CLI から、追加する必要がある DNS レコードの詳細を含むレスポンスが返されます。

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
  data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
  name: _acme-challenge.example.com.
  type: CNAME
domain: example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "example-dns-auth"
  description = "example dns authorization "
  domain      = "test.example.com"
}

ドメインで Cloud DNS を使用している場合は、ホストされたドメインに新しいレコードを追加する手順をご覧ください。他の DNS プロバイダを使用している場合は、CNAME レコードの追加についてプロバイダのドキュメントをご覧ください。

  • 証明書を発行する必要があるドメインごとに、この手順を繰り返します。
  • 証明書には複数のドメインを含めることができます。また、必要に応じてドメインごとに証明書を発行することもできます。ドメインの承認を取得すると、そのドメインを使用して証明書を発行できます。
  • 作成する証明書の合計数を減らし、それぞれの証明書にサービスに使用されるすべてのドメイン名を含めることをおすすめします。これにより、複数のドメインを使用する際のクライアントのパフォーマンスが向上します。これは、クライアントが TLS 再開のメリットをより多く得ることができるためです。
  • 各 Edge Cache Service は最大 5 つの証明書を参照できます。発行する証明書の数を少なくすることで、この上限内に収めることができます。

後で DNS レコード値を取得する必要がある場合は、DNS 認証の作成時に指定した authorizationName に対するリクエストを行います。

証明書の作成

証明書を作成するドメインの所有権を示す DNS レコードを追加したら、証明書作成リクエストを発行できます。

dnsAuthorizations のリストは、このプロセスで前に作成した既存の承認の名前と一致する必要があります。同じ証明書に複数のドメインを追加する場合は、リクエストを行う際に、domains[] および一致する dnsAuthorizations[] のリストを指定します。

test-example-com と呼ばれる test.example.com の承認を使用して証明書を作成するには:

gcloud

gcloud certificate-manager certificates コマンドを使用します。

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME" \
    --dns-authorizations="DOMAIN_NAME_AUTH" \
    --scope=EDGE_CACHE

これにより、AUTHORIZING 状態の DNS 認証と PROVISIONING 状態の証明書ごとに証明書が作成されます。

Create request issued for: [DOMAIN_NAME]
Waiting for operation [projects/my-project/locations/global/operations/operatio
n-1613425627385-5bb66ed644e91-3e2a2f1f-71979cf8] to complete...done.
Created certificate [CERTIFICATE_NAME].

Terraform

resource "google_certificate_manager_certificate" "default" {
  name        = "example-dns-cert"
  description = "example dns certificate"
  scope       = "EDGE_CACHE"
  managed {
    domains = [
      google_certificate_manager_dns_authorization.default.domain,
    ]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id,
    ]
  }
}

次の状況に応じて、証明書の作成が完了するまで数分(から最大 1 時間)かかることがあります。

  • DNS プロバイダが構成の変更を伝播する速さ。
  • 証明書を検証して作成しようとしているドメインの数。

state フィールドには、証明書の現在のステータスが表示されます。

  • PROVISIONING - 証明書はまだプロビジョニング中です。証明書作成がリクエストされてから間もないと表示される場合があります。
  • FAILED - ドメインの検証や証明書の発行が複数回試行された後に返されます。詳しくは、provisioning_issueauthorization_attempt_infofailure_reason の各フィールドをご覧ください。
  • ACTIVE - ドメインは正常に検証され、証明書はプロビジョニングされました。

証明書のステータスを確認するには:

gcloud

gcloud certificate-manager certificates コマンドを使用します。

gcloud certificate-manager certificates describe CERTIFICATE_NAME

この例では、DNS 認証は AUTHORIZED で、証明書の状態は ACTIVE です。

createTime: '2021-02-07T20:03:39.867762684Z'
expireTime: '2021-03-09T19:20:41Z'
managed:
  authorizationAttemptInfo:
  - domain: DOMAIN_NAME
    state: AUTHORIZED
  dnsAuthorizations:
  - projects/111111111111/locations/global/dnsAuthorizations/test-example-com
  domains:
  - DOMAIN_NAME
  state: ACTIVE
name: projects/my-project/locations/global/certificates/test-example-com
scope: EDGE_CACHE
subjectAlternativeNames:
- DOMAIN_NAME
updateTime: '2021-02-07T20:03:40.297242738Z'

証明書が ACTIVE になったら、Edge Cache Service に添付できます。

サービスへ証明書を添付する

マネージド証明書を作成したら、1 つ以上の Edge Cache Service に関連付けることができます。サービスの edgeSslCertificates のリストを更新することで、既存のサービスと新しいサービスの両方に証明書を添付できます。

Edge Cache Service に証明書を添付するには、次の IAM 権限が必要です。

  • certificatemanager.certs.get
  • certificatemanager.certs.list
  • certificatemanager.certs.use
  • networkservices.edgeCacheServices.get
  • networkservices.edgeCacheServices.list
  • networkservices.edgeCacheServices.update

証明書をサービスに添付するには、次の手順を行います。

gcloud

gcloud edge-cache services export コマンドを実行して、サービスの YAML ファイルをエクスポートします。

gcloud edge-cache services export MY_SERVICE \
    --destination=my-service.yaml

エクスポートされた YAML ファイルを編集して、証明書を追加します。

name: MY_SERVICE
edgeSslCertificates:
- projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

gcloud edge-cache services import コマンドを実行します。

gcloud edge-cache services import MY_SERVICE \
    --source=my-service.yaml

出力:

Request issued for: [MY_SERVICE]
Updated service [MY_SERVICE]

このコマンドは、サービスの説明を返します。ここには、現在添付されている edgeSslCertificates のリストが含まれます。

  name: MY_SERVICE
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

構成を更新すると、数分以内に証明書がすべてのエッジ ロケーションに伝播されます。DNS を変更する前に、証明書が Edge Cache Service に関連付けられていることをテストするには、サービスに関連付けられた IPv4 または IPv6 アドレスに対してリクエストを発行します。

証明書を置き換えて削除する

証明書のリストを更新して、証明書の追加や削除を行えます。

gcloud CLI の --edge-ssl-certificate フラグを使用する場合、証明書は既存の証明書のリストにのみ追加され、置き換えられません。これにより、有効でアクティブな証明書を誤って削除するのを防ぐことができます。

次の例でサービスから test-example-com 証明書を削除するには、インポート コマンドとエクスポート コマンドを使用して、サービスを YAML にエクスポートできます。

  name: my-service
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/test-example-com
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

次のコマンドは、サービスのエクスポート、証明書参照の削除、更新されたサービスのインポートの方法を示しています。

gcloud

gcloud edge-cache services コマンドを使用します。

gcloud edge-cache services export MY_SERVICE --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/MY_SERVICE] to 'my-service.yaml'.

任意のテキスト エディタを使用して、サービスで不要になった証明書を削除します。

  name: MY_SERVICE
  edgeSslCertificates:
  - projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME

変更したファイルを保存し、更新したサービスをインポートします。

gcloud

gcloud edge-cache services コマンドを使用します。

gcloud edge-cache services import MY_SERVICE --source=my-service.yaml
Request issued for: [MY_SERVICE]
Updated service [MY_SERVICE].

証明書に関連付けられるサービスの数に上限はありません。各 Edge Cache Service は最大 5 つの証明書を参照できます。

セルフマネージド証明書

独自の証明書は、それを必要とする特定のユースケースがあれば、Media CDN にアップロードできます。

証明書とそれに関連付けられた鍵を Certificate Manager にアップロードするには:

gcloud

gcloud certificate-manager certificates コマンドを使用します。Media CDN に関連付けられた証明書には、必ず --scope=EDGE_CACHE を指定してください。

gcloud certificate-manager certificates create stream-example-com \
    --certificate-file=CERT.pem \
    --private-key-file=PRIVATE_KEY.pem \
    --scope=EDGE_CACHE
Create request issued for: [stream-example-com]
Created certificate [stream-example-com].

マネージド証明書と同様に、証明書はアップロードすると EdgeCacheService に添付できます。

証明書の発行のトラブルシューティング

一般的な証明書の承認と発行のエラーを解決する方法については、トラブルシューティング ガイドをご覧ください。

次のステップ