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

これにより、各 DNS 認証が AUTHORIZING 状態の証明書と、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 に添付できます。

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

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

次のステップ