グローバル セルフマネージド証明書をデプロイする。

このチュートリアルでは、Certificate Manager を使用してグローバル セルフマネージド証明書をデプロイする方法について説明します。

次のロードバランサは、グローバル セルフマネージド証明書をサポートしています。

  • グローバル外部アプリケーション ロードバランサ
  • 従来のアプリケーション ロードバランサ
  • グローバル外部プロキシ ネットワーク ロードバランサ
  • 従来のプロキシ ネットワーク ロードバランサ

リージョン ロードバランサまたはクロスリージョン ロードバランサにデプロイする場合は、以下をご覧ください。

セルフマネージド証明書を Certificate Manager にアップロードします。

証明書を Certificate Manager にアップロードする手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[Certificate Manager] ページに移動します。

    Certificate Manager に移動

  2. [証明書] タブで、[証明書を追加] をクリックします。

  3. [証明書名] フィールドに、証明書の一意の名前を入力します。

  4. 省略可: [説明] フィールドに証明書の説明を入力します。説明は、証明書を識別するために使用します。

  5. [ロケーション] で [グローバル] を選択します。

  6. [範囲] で [デフォルト] を選択します。

  7. [証明書の種類] で [セルフマネージド証明書を作成する] を選択します。

  8. [証明書] フィールドについて、次のいずれかを行います。

    • [アップロード] ボタンをクリックし、PEM 形式の証明書ファイルを選択します。
    • PEM 形式の証明書のコンテンツをコピーして貼り付けます。コンテンツは -----BEGIN CERTIFICATE----- で始まり、-----END CERTIFICATE----- で終わる必要があります。
  9. [秘密鍵証明書] フィールドで、次のいずれかを行います。

    • [アップロード] ボタンをクリックし、秘密鍵を選択します。秘密鍵は PEM 形式で、パスフレーズで保護されていない必要があります。
    • PEM 形式の秘密鍵のコンテンツをコピーして貼り付けます。秘密鍵は -----BEGIN PRIVATE KEY----- で始まり、-----END PRIVATE KEY----- で終わる必要があります。
  10. [ラベル] フィールドで、証明書に関連付けるラベルを指定します。ラベルを追加するには、[ラベルを追加] をクリックして、ラベルのキーと値を指定します。

  11. [作成] をクリックします。

    新しい証明書が証明書のリストに表示されます。

gcloud

グローバル セルフマネージド証明書を作成するには、certificate-manager certificates create コマンドを使用します。

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --certificate-file="CERTIFICATE_FILE" \
    --private-key-file="PRIVATE_KEY_FILE"

以下を置き換えます。

  • CERTIFICATE_NAME: 証明書の名前。
  • CERTIFICATE_FILE: CRT 証明書ファイルのパスとファイル名。
  • PRIVATE_KEY_FILE: KEY 秘密鍵ファイルのパスとファイル名。

Terraform

セルフマネージド証明書をアップロードするには、self_managed ブロックを含む google_certificate_manager_certificate リソースを使用します。

API

次のように、certificates.create メソッドに POST リクエストを送信して、証明書をアップロードします。

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
  self_managed: {
    pem_certificate: "PEM_CERTIFICATE",
    pem_private_key: "PEM_KEY",
  }
}

次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • CERTIFICATE_NAME: 証明書の名前。
  • PEM_CERTIFICATE: 証明書の PEM。
  • PEM_KEY: 鍵の PEM。

セルフマネージド証明書をロードバランサにデプロイする

グローバル セルフマネージド証明書をデプロイするには、証明書マップを使用します。

証明書マップを作成する

証明書に関連付けられた証明書マップエントリを参照する証明書マップを作成します。

gcloud

証明書マップを作成するには、gcloud certificate-manager maps create コマンドを使用します。

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME は、ターゲット証明書マップの名前に置き換えます。

Terraform

証明書マップを作成するには、google_certificate_manager_certificate_map リソースを使用します。

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

証明書マップエントリを作成する

証明書マップエントリを作成し、証明書と証明書マップに関連付けます。

gcloud

証明書マップエントリを作成するには、gcloud certificate-manager maps entries create コマンドを使用します。

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME" \
    --certificates="CERTIFICATE_NAME" \
    --hostname="HOSTNAME"

以下を置き換えます。

  • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
  • CERTIFICATE_MAP_NAME: 証明書マップエントリが添付されている証明書マップの名前。
  • CERTIFICATE_NAME: 証明書マップエントリに関連付ける証明書の名前。
  • HOSTNAME: 証明書マップエントリに関連付けるホスト名。

    ワイルドカード ドメインとルートドメインの両方をカバーする証明書を作成する場合は、example.com*.example.com など、ルートとワイルドカードを使用してホスト名を指定します。また、example.com 用と *.example.com 用の 2 つの証明書マップエントリを指定する必要があります。

Terraform

ルートドメインを使用して証明書マップエントリを作成するには、google_certificate_manager_certificate_map_entry リソースを使用します。

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

ワイルドカード ドメインを使用して証明書マップエントリを作成するには、google_certificate_manager_certificate_map_entry リソースを使用します。

resource "google_certificate_manager_certificate_map_entry" "second_entry" {
  name        = "${local.name}-second-entity-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = "*.${local.domain}"
}

証明書マップエントリが有効であることを確認する

証明書マップエントリに対応する証明書マップをターゲット プロキシに接続する前に、証明書マップエントリが有効であることを確認します。

証明書マップエントリを確認するには、gcloud certificate-manager maps entries describe コマンドを使用します。

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

以下を置き換えます。

  • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
  • CERTIFICATE_NAME: 証明書マップエントリに関連付ける証明書の名前。

出力は次のようになります。

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

証明書マップをターゲット プロキシに添付する

証明書マップは、新しいターゲット プロキシまたは既存のターゲット プロキシに接続できます。

gcloud

証明書マップを新しいターゲット プロキシに添付するには、gcloud compute target-https-proxies create コマンドを使用します。

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --url-map="URL_MAP" \
    --global

以下を置き換えます。

  • PROXY_NAME: ターゲット プロキシの名前
  • CERTIFICATE_MAP_NAME: 証明書マップエントリと関連する証明書を参照する証明書マップの名前。
  • URL_MAP: URL マップの名前。

証明書マップを既存のターゲット HTTPS プロキシに添付するには、gcloud compute target-https-proxies update コマンドを使用します。既存のターゲット プロキシの名前がわからない場合は、[ターゲット プロキシ] ページに移動して、ターゲット プロキシの名前を確認します。

gcloud compute target-https-proxies update PROXY_NAME \
    --certificate-map="CERTIFICATE_MAP_NAME" \
    --global

ターゲット プロキシを作成または更新したら、次のコマンドを実行して確認します。

gcloud compute target-https-proxies list

Terraform

証明書マップをターゲット プロキシに添付するには、google_compute_target_https_proxy リソースを使用します。

ターゲット プロキシを構成するときに、TLS(SSL)証明書を直接添付し、証明書マップを介して添付すると、プロキシは証明書マップで参照される証明書を使用し、直接添付された TLS(SSL)証明書を無視します。

クリーンアップ

このチュートリアルで使用したリソースについて Google Cloud アカウントに課金されないようにするには、リソースを削除します。

  1. ロードバランサとそのリソースを削除します。

    ロード バランシングの設定をクリーンアップするをご覧ください。

  2. 証明書マップを削除するか、プロキシから切断します。

    証明書マップを削除するには、次のコマンドを実行します。

    gcloud compute target-https-proxies delete PROXY_NAME
    

    ターゲット HTTPS プロキシを保持する場合は、証明書マップをプロキシから切り離します。

    • プロキシに直接 TLS(SSL)証明書が添付されている場合、証明書マップを切断すると、プロキシは直接添付された TLS(SSL)証明書を使用して再開します。
    • プロキシに直接 TLS(SSL)証明書が添付されていない場合、証明書マップをプロキシから切断することはできません。証明書マップを切断するには、まず少なくとも 1 つの TLS(SSL)証明書をプロキシに直接添付する必要があります。

    証明書マップを切断するには、次のコマンドを実行します。

    gcloud compute target-https-proxies update PROXY_NAME \
        --clear-certificate-map
    

    PROXY_NAME は、ターゲット プロキシの名前に置き換えます。

  3. 証明書マップから証明書マップエントリを削除します。

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME"
    

    以下を置き換えます。

    • CERTIFICATE_MAP_ENTRY_NAME: 証明書マップ エントリの名前。
    • CERTIFICATE_MAP_NAME: 証明書マップの名前。
  4. 証明書マップを削除します。

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    CERTIFICATE_MAP_NAME は、証明書マップの名前に置き換えます。

  5. アップロードした証明書を削除します。

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    CERTIFICATE_NAME は、証明書の名前に置き換えます。