このチュートリアルでは、Certificate Authority Service を例として Google マネージド証明書を使用する証明書のデプロイ プロセスについて説明します。
次のロードバランサは、CA Service による Google マネージド証明書をサポートしています。
- グローバル外部アプリケーション ロードバランサ
- 従来のアプリケーション ロードバランサ
- クロスリージョン内部アプリケーション ロードバランサ
- グローバルな外部プロキシ ネットワーク ロードバランサ
証明書の発行ポリシーがターゲット CA プールで有効になっている場合、証明書のプロビジョニングが次のいずれかの理由で失敗することがあります。
- 証明書発行ポリシーによって、要求された証明書がブロックされている。この場合、証明書は発行されていないため、請求は発生しません。
- このポリシーで、Certificate Manager でサポートされていない証明書に対する変更が適用されている。この場合、Certificate Manager との完全な互換性がない場合でも、証明書が発行されているため、引き続き請求されます。
このチュートリアルの手順に沿って発行された証明書は、公的に信頼されていません。一般に信頼される証明書を発行する場合は、代わりに次のいずれかのチュートリアルの手順に従ってください。
既存の証明書を Certificate Manager に移行する場合は、代わりに証明書を Certificate Manager に移行するの手順に従ってください。
リージョン CA プールを使用して Google マネージド TLS 証明書を発行する場合でも、証明書自体はグローバルであり、どのリージョンでも使用できます。
目標
このチュートリアルでは、次のタスクを行う方法を説明します。
- Certificate Manager を使用して、CA Service で Google マネージド証明書を作成する。
- ターゲット HTTPS プロキシを使用して、サポートされているロードバランサに証明書をデプロイします。
証明書のデプロイ プロセスの詳細については、デプロイの概要をご覧ください。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
このチュートリアルのタスクを完了するための次のロールがあることを確認してください。
- Certificate Manager オーナー: Certificate Manager リソースの作成と管理に必要です。
- Compute ロードバランサ管理者または Compute ネットワーク管理者: HTTPS ターゲット プロキシの作成と管理に必要です。
- Certificate Authority Service 管理者: CA Service 内でアクションを実行するために必要です。
詳しくは以下をご覧ください。
- Certificate Manager のロールと権限
- Compute Engine の Compute Engine の IAM ロールと権限
- CA Service の権限とロール
CA プールを作成します。この CA プールに少なくとも 1 つの CA を作成して有効にする必要があります。
CA Service と Certificate Manager の統合を構成する
次のように、CA Service と統合するように Certificate Manager を構成します。
次のコマンドを使用して、ターゲットの Google Cloud プロジェクトに Certificate Manager サービス アカウントを作成します。
gcloud beta services identity create --service=certificatemanager.googleapis.com \ --project=PROJECT_ID
PROJECT_ID
は、ターゲット Google Cloud プロジェクトの ID に置き換えます。このコマンドは、作成されたサービス ID の名前を返します。次の例をご覧ください。
service-520498234@gcp-sa-certificatemanager.iam.gserviceaccount.com
Certificate Manager サービス アカウントに、次のようにターゲット CA プール内の証明書リクエスト元ロールを付与します。
gcloud privateca pools add-iam-policy-binding CA_POOL \ --location REGION \ --member "serviceAccount:SERVICE_ACCOUNT" \ --role roles/privateca.certificateRequester
以下のように置き換えます。
CA_POOL
: ターゲット CA プールの ID。REGION
: ターゲットの Google Cloud リージョン。SERVICE_ACCOUNT
: ステップ 1 で作成したサービス アカウントのフルネーム。
CA プールの証明書発行の構成リソースを作成します。
gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \ --ca-pool=CA_POOL \ [--lifetime=CERTIFICATE_LIFETIME] \ [--rotation-window-percentage=ROTATION_WINDOW_PERCENTAGE] \ [--key-algorithm=KEY_ALGORITHM]
以下のように置き換えます。
ISSUANCE_CONFIG_NAME
: 証明書発行構成リソースの一意の名前。CA_POOL
: この証明書発行の構成に割り当てる CA プールの完全なリソースパスと名前。CERTIFICATE_LIFETIME
: 証明書の有効期間(日数)。有効な値は、標準の期間形式で 21 ~ 30 日です。デフォルト値は 30 日(30D
)です。この設定は省略可能です。ROTATION_WINDOW_PERCENTAGE
: 更新がトリガーされる証明書の存続期間の割合。この設定は省略可能です。デフォルト値は 66% です。証明書の更新が、証明書の発行の 7 日以上後、期限切れの 7 日以上前に行われるように、証明書の有効期間を基準にしてローテーション ウィンドウの割合を設定する必要があります。
KEY_ALGORITHM
: 秘密鍵の生成に使用される暗号化アルゴリズム。有効な値はecdsa-p256
またはrsa-2048
です。 デフォルト値はrsa-2048
です。この設定は省略可能です。
証明書発行の構成の詳細については、証明書発行の構成を管理するをご覧ください。
CA Service インスタンスによって発行された Google マネージド証明書を作成する
CA Service インスタンスによって発行された Google マネージド証明書を次のように作成します。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
表示されたページで [証明書] タブを選択します。
[証明書を追加] をクリックします。
証明書の名前を入力します。
この名前は、プロジェクト内で一意にする必要があります。
省略可: 証明書の [説明] を入力します。説明は、後で特定の証明書を識別するのに役立ちます。
[ロケーション] で [グローバル] を選択します。
[範囲] で、次のオプションのいずれかを選択します。
- デフォルト: グローバル外部アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、グローバル外部プロキシ ネットワーク ロードバランサのデフォルトを選択します。
- All-regions: クロスリージョン内部アプリケーション ロードバランサのすべてのリージョンを選択します。
[証明書の種類] で [Google 管理の証明書を作成する] を選択します。
[認証局の種類] で [非公開] を選択します。
証明書のドメイン名を指定します。移行先ドメインのカンマ区切りリストを入力します。また、各ドメイン名は完全修飾ドメイン名(
myorg.example.com
など)にする必要があります。[証明書発行構成] で、ターゲット CA プールを参照する証明書発行構成リソースの名前を選択します。
証明書に関連付けるラベルを指定します。必要に応じて、複数のラベルを追加できます。ラベルを追加するには、[add_box ラベルの追加] ボタンをクリックして、ラベルの
key
とvalue
を指定します。[作成] をクリックします。新しい証明書が証明書のリストに表示されることを確認します。
gcloud
グローバル外部アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、グローバル外部プロキシ ネットワーク ロードバランサの場合:
次のコマンドを実行します。
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAMES" \ --issuance-config=ISSUANCE_CONFIG_NAME
以下のように置き換えます。
CERTIFICATE_NAME
: 証明書の一意の名前。DOMAIN_NAMES
: この証明書のターゲット ドメインのカンマ区切りのリスト。各ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。ISSUANCE_CONFIG_NAME
: ターゲット CA プールを参照する証明書発行構成リソースの名前。
クロスリージョン内部アプリケーション ロードバランサの場合:
次のコマンドを実行します。
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAMES" \ --issuance-config=ISSUANCE_CONFIG_NAME \ --scope=all-regions
以下のように置き換えます。
CERTIFICATE_NAME
: 証明書の一意の名前。DOMAIN_NAMES
: この証明書のターゲット ドメインのカンマ区切りのリスト。各ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。ISSUANCE_CONFIG_NAME
: ターゲット CA プールを参照する証明書発行構成リソースの名前。
API
次のように、certificates.create
メソッドに対して POST
リクエストを行い、証明書を作成します。
グローバル外部アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、グローバル外部プロキシ ネットワーク ロードバランサの場合:
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME" { "managed": { "domains": ["DOMAIN_NAME"], "issuanceConfig": "ISSUANCE_CONFIG_NAME", } }
以下のように置き換えます。
PROJECT_ID
: ターゲットの Google Cloud プロジェクトの ID。CERTIFICATE_NAME
: 証明書の一意の名前。DOMAIN_NAME
: この証明書のターゲット ドメイン。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。ISSUANCE_CONFIG_NAME
: ターゲット CA プールを参照する証明書発行構成リソースの名前。
クロスリージョン内部アプリケーション ロードバランサの場合:
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME" { "managed": { "domains": ["DOMAIN_NAME"], "issuanceConfig": "ISSUANCE_CONFIG_NAME", "scope": "ALL_REGIONS" } }
以下のように置き換えます。
PROJECT_ID
: ターゲットの Google Cloud プロジェクトの ID。CERTIFICATE_NAME
: 証明書の一意の名前。DOMAIN_NAME
: この証明書のターゲット ドメイン。ドメイン名は完全修飾ドメイン名(myorg.example.com
など)にする必要があります。ISSUANCE_CONFIG_NAME
: ターゲット CA プールを参照する証明書発行構成リソースの名前。
証明書のデプロイ プロセスの概要については、デプロイの概要をご覧ください。
証明書が有効であることを確認する
次のコマンドを使用して、証明書をロードバランサにデプロイする前に、証明書自体が有効であることを確認します。証明書の状態が ACTIVE
に変わるまで数分かかることがあります。
gcloud certificate-manager certificates describe CERTIFICATE_NAME
CERTIFICATE_NAME
は、ターゲット Google マネージド証明書の名前に置き換えます。
このコマンドでは、次のような出力が返されます。
createTime: '2021-10-20T12:19:53.370778666Z' expireTime: '2022-05-07T05:03:49Z' managed: domains: - myorg.example.com issuanceConfig: projects/myProject/locations/global/certificateIssuanceConfigs/myIssuanceConfig state: ACTIVE name: projects/myProject/locations/global/certificates/myCert pemCertificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- sanDnsnames: - myorg.example.com updateTime: '2021-10-20T12:19:55.083385630Z'
証明書をロードバランサにデプロイする
このセクションでは、Google マネージド証明書をロードバランサにデプロイするために必要な手順について説明します。
このセクションのタスクに進む前に、CA Service と Certificate Manager の統合を構成するおよびCA Service インスタンスによって発行された Google マネージド証明書を作成するに一覧表示されているタスクを完了していることを確認してください。
ロードバランサの種類に応じて、次のように証明書をデプロイできます。
- 次のロードバランサでは、証明書マップを使用して証明書をデプロイします。
- グローバル外部アプリケーション ロードバランサ
- グローバルな外部プロキシ ネットワーク ロードバランサ
- 従来のアプリケーション ロードバランサ
- クロスリージョン内部アプリケーション ロードバランサの場合は、ターゲット プロキシに証明書を直接関連付けることで証明書をデプロイします。
証明書マップを使用して証明書をデプロイする
このセクションでは、証明書マップを使用して証明書をデプロイする手順について説明します。
CertificateMap を作成する
証明書に関連付けられた証明書マップエントリを参照する証明書マップを作成します。
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
CERTIFICATE_MAP_NAME
は、ターゲット証明書マップの名前に置き換えます。
証明書マップ エントリを作成する
証明書マップ エントリを作成し、それを証明書と証明書マップに関連付けます。
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
: この証明書マップエントリに関連付けるホスト名
証明書マップエントリが有効であることを確認する
次のコマンドを使用して、対応する証明書マップをターゲット プロキシに添付する前に、証明書マップエントリがアクティブであることを確認します。
gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
以下のように置き換えます。
CERTIFICATE_MAP_ENTRY_NAME
: ターゲット証明書マップエントリの名前CERTIFICATE_MAP_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'
証明書マップをターゲット プロキシに添付する
構成した証明書マップを目的のターゲット プロキシに添付します。
Google Cloud コンソールで、[ターゲット プロキシ] ページに移動します。
ターゲット プロキシの名前に注意します。
証明書マップをターゲット プロキシに添付する
gcloud compute target-https-proxies update PROXY_NAME \ --certificate-map="CERTIFICATE_MAP_NAME"
以下のように置き換えます。
PROXY_NAME
: ターゲット プロキシの名前CERTIFICATE_MAP_NAME
: 証明書マップエントリを参照する証明書マップの名前と、関連する証明書
既存の TLS(SSL)証明書がプロキシに直接添付されている場合、プロキシは、直接添付されている TLS(SSL)証明書よりも、証明書マップによって参照される証明書を優先します。
証明書をターゲット プロキシに直接添付する
証明書をプロキシに直接添付するには、次のコマンドを実行します。
gcloud compute target-https-proxies update PROXY_NAME \ --url-map=URL_MAP \ --global \ --certificate-manager-certificates=CERTIFICATE_NAME
以下のように置き換えます。
PROXY_NAME
: プロキシの一意の名前。URL_MAP
: URL マップの名前。ロードバランサの作成時に URL マップを作成しました。CERTIFICATE_NAME
: 証明書の名前。
トラブルシューティング
トラブルシューティングの手順については、CA Service インスタンスによって発行された証明書に関連する問題をご覧ください。
クリーンアップ
このチュートリアルで行った変更を元に戻すには、次の手順を行います。
プロキシから証明書マップを切断します。
証明書マップを切断する前に、次の点に注意してください。
- プロキシに直接 TLS(SSL)証明書が添付されていた場合、証明書マップを切断すると、プロキシは直接添付された TLS(SSL)証明書を使用して再開します。
- プロキシに直接 TLS(SSL)証明書が添付されていない場合、証明書マップをプロキシから切断することはできません。証明書マップを切断するには、まず少なくとも 1 つの TLS(SSL)証明書をプロキシに直接添付する必要があります。
証明書マップを切断するには、次のコマンドを実行します。
gcloud compute target-https-proxies update PROXY_NAME \ --clear-certificate-map
PROXY_NAME
は、ターゲット プロキシの名前に置き換えます。証明書マップから証明書マップエントリを削除します。
gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
以下のように置き換えます。
CERTIFICATE_MAP_ENTRY_NAME
: ターゲット証明書マップエントリの名前CERTIFICATE_MAP_NAME
: ターゲット証明書マップの名前
証明書マップを削除します。
gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
CERTIFICATE_MAP_NAME
は、ターゲット証明書マップの名前に置き換えます。Google マネージド証明書を削除します。
gcloud certificate-manager certificates delete CERTIFICATE_NAME
CERTIFICATE_NAME
は、ターゲット証明書の名前に置き換えます。証明書発行の構成リソースを削除します。
gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
ISSUANCE_CONFIG_NAME
は、ターゲットの証明書発行の構成リソースの名前に置き換えます。CA プールの削除で説明されているように、CA プールを削除します。
証明書発行の構成で参照されている CA プールで最後に有効にした CA を無効にする場合や、参照される CA プールを完全に削除する場合は、まず、その CA プールを参照するすべての証明書発行の構成を削除する必要があります。