目的
CertficateManagerを用いてマネージド証明書を発行し、ロードバランサにデプロイする
最後に作成したマップと証明書を削除して完了
Certificate Managerの導入
セキュリティ -> Certificate Managerへ移動する
GUI操作では実施できないようなので、gcloudコマンドにて実施する
CloudShellからワイルドカード証明書を発行する
-> 発行する証明書:*.xcloudyx.net
ドメインの所有者を証明するため、DNSによる所有者確認を実施する
-> 認証方式:DNS認証
DNS認証の準備
参考URL:DNS 認証を作成する
コマンド:gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME
--domain="DOMAIN_NAME"
AUTHORIZATION_NAMEは、DNS認証を説明する一意の名前
DOMAIN_NAMEは DNS認証を作成するドメインの名前
以下は、xcloudyxcertというAUTHORIZATION_NAMEとし、証明書の発行先を*.xcloudyx.netとした例
cloudshell$ gcloud certificate-manager dns-authorizations create xcloudyxcert --domain="xcloudyx.net"
Create request issued for: [xcloudyxcert]
Waiting for operation [projects/generative-ai-396008/locations/global/operations/operation-1693895544538-60496ca380581-bf15f192-077385d2] to complete...done.
Created dnsAuthorization [xcloudyxcert].
DNS認証のため、xcloudyx.netのネームサーバ(NS)に登録する情報を確認する
コマンド:gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
以下は、xcloudyxcertの情報を表示
cloudshell$ gcloud certificate-manager dns-authorizations describe xcloudyxcert
createTime: '2023-09-05T06:32:24.587520999Z'
dnsResourceRecord:
data: c84f2978-8437-454e-95c9-fe41a8ac31db.10.authorize.certificatemanager.goog.
name: _acme-challenge.xcloudyx.net.
type: CNAME
domain: xcloudyx.net
name: projects/generative-ai-xxxxxx/locations/global/dnsAuthorizations/xcloudyxcert
updateTime: '2023-09-05T06:32:25.274569446Z'
DNSレコードの追加
証明書の発行
なぜか公式に作成のコマンドではなく更新しか書いていなかったが、createで実施する
DNS 認証を更新する
cloudshell$ gcloud certificate-manager certificates create wild-xcloudyx-cert --domains="*.xcloudyx.net" --dns-authorizations=xcloudyxcert
Create request issued for: [wild-xcloudyx-cert]
Waiting for operation [projects/generative-ai-396008/locations/global/operations/operation-1693966087221-604a736e3f181-277fac45-a9659a91] to complete...done.
Created certificate [wild-xcloudyx-cert].
cloudshell$ gcloud certificate-manager certificates describe wild-xcloudyx-cert
createTime: '2023-09-06T02:08:07.315172254Z'
managed:
authorizationAttemptInfo:
- domain: '*.xcloudyx.net'
state: AUTHORIZING
dnsAuthorizations:
- projects/285464393872/locations/global/dnsAuthorizations/xcloudyxcert
domains:
- '*.xcloudyx.net'
state: PROVISIONING
name: projects/generative-ai-396008/locations/global/certificates/wild-xcloudyx-cert
sanDnsnames:
- '*.xcloudyx.net'
updateTime: '2023-09-06T02:08:07.795064057Z'
しばらく待っていると、certificate managerのコンソールで作成が完了している
証明書のデプロイ -> ロードバランサ
Certificate Mapの作成
コマンド:gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
CERTIFICATE_MAP_NAMEは、ターゲット証明書マップの名前
cloudshell$ gcloud certificate-manager maps create certmap
Waiting for 'operation-1693965405419-604a70e40770f-179c67fa-43ecc718' to complete...done.
Created certificate map [certmap].
MapEntryの作成
コマンド: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は、この証明書マップエントリに関連付けるホスト名
cloudshell$ gcloud certificate-manager maps entries create mapentry --hostname=www.xcloudyx.net --map=certmap --certificates=wild-xcloudyx-cert
Waiting for 'operation-1693966948109-604a76a340bb6-d6b36f24-71c8ac23' to complete...done.
Created certificate map entry [mapentry].
MapEntryの確認
cloudshell$ gcloud certificate-manager maps entries describe mapentry --map=certmap
certificates:
- projects/285464393872/locations/global/certificates/wild-xcloudyx-cert
createTime: '2023-09-06T02:22:28.190060610Z'
hostname: www.xcloudyx.net
name: projects/generative-ai-396008/locations/global/certificateMaps/certmap/certificateMapEntries/mapentry
state: PENDING
updateTime: '2023-09-06T02:22:28.580995699Z'
ターゲットプロキシの証明書更新
既存のロードバランサに適用されている証明書を、CertificateManagerにある証明書で置き換える
コマンド:gcloud compute target-https-proxies update PROXY_NAME
--certificate-map="CERTIFICATE_MAP_NAME"
PROXY_NAMEは、ターゲットプロキシの名前
CERTIFICATE_MAP_NAMEは、証明書マップエントリとそれに関連付けられた証明書を参照する証明書マップの名前
cloudshell$ gcloud compute target-https-proxies update serverless-lb-target-proxy --certificate-map=certmap
Updated [https://www.googleapis.com/compute/v1/projects/generative-ai-396008/global/targetHttpsProxies/serverless-lb-target-proxy].
更新後のターゲットプロキシ
証明書の削除
証明書の削除にはmap,mapentryの削除を実施した上で、証明書の削除が必要
マップエントリの削除
cloudshell$ gcloud certificate-manager maps entries delete mapentry --map=certmap
You are about to delete certificate map entry 'mapentry' from certificate map 'certmap'
Do you want to continue (Y/n)? Y
Waiting for 'operation-1693979758698-604aa65c61fca-35704edd-cac7e4db' to complete...done.
Deleted map entry [mapentry].
マップの削除
cloudshell$ gcloud certificate-manager maps delete certmap
You are about to delete certificate map 'certmap'
Do you want to continue (Y/n)? Y
Waiting for 'operation-1693979767884-604aa665249a1-e9835332-f59791b7' to complete...done.
Deleted map [certmap].
証明書の削除
cloudshell$ gcloud certificate-manager certificates delete wild-xcloudyx-cert
You are about to delete certificate 'wild-xcloudyx-cert'
Do you want to continue (Y/n)? Y
Waiting for 'operation-1693979781963-604aa67291dbe-a3d41679-76159aaa' to complete...done.
Deleted certificate [wild-xcloudyx-cert].