本教程介绍如何使用 Certificate Manager 通过 Certificate Authority Service 部署全球 Google 管理的证书。
以下全球负载平衡器支持使用 Certificate Authority Service 的 Google 管理的证书:
- 全球外部应用负载均衡器
- 传统应用负载均衡器
- 全局外部代理网络负载均衡器
如果您想部署到跨区域负载平衡器或区域级负载平衡器,请参阅以下内容:
目标
本教程介绍如何完成以下任务:
- 使用 Certificate Manager 通过 CA Service 创建 Google 管理的证书。
- 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine, Certificate Manager, Certificate Authority APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine, Certificate Manager, Certificate Authority APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init - 启用 CA Service API。
- 创建 CA 池。您必须在此 CA 池中创建并启用至少一个 CA。
在按照本教程的步骤操作之前,您需要记下以下信息:
- 您使用 Certificate Authority Service 创建的证书不受公开信任。如需签发公开可信的证书,请创建具有 DNS 授权或负载平衡器授权的证书。
如果目标 CA 池上生效了证书签发政策,则证书配置可能会因以下任何原因而失败:
- 证书颁发政策已阻止所请求的证书。在这种情况下,由于证书尚未签发,因此您不会收到账单。
- 该政策已对证书应用了 Certificate Manager 不支持的更改。在这种情况下,即使证书与 Certificate Manager 不完全兼容,您仍需付费,因为证书已签发。
您可以配置全球 Google 管理的 TLS 证书,使其由任何区域中的 CA 池颁发。
所需的角色
请确保您拥有以下角色,以便完成本教程中的任务:
Certificate Manager Owner (
roles/certificatemanager.owner)创建和管理 Certificate Manager 资源所需的角色。
Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin) 或 Compute Network Admin (roles/compute.networkAdmin)创建和管理 HTTPS 目标代理时需要此权限。
CA Service Admin (
roles/privateca.admin)在 CA Service 中执行操作所需的权限。
详情请参阅以下内容:
- Certificate Manager 的角色和权限。
- Compute Engine 的 Compute Engine IAM 角色和权限。
- 使用 IAM 进行访问权限控制,以用于 CA Service。
创建负载均衡器
本教程假定您已创建并配置负载平衡器的后端、健康检查、后端服务和网址映射。如果您已创建外部应用负载平衡器,请记下网址映射的名称,因为您需要在本教程的后续步骤中使用该名称。
如果您尚未创建负载均衡器,请参阅以下页面来创建负载均衡器:
如需创建全球外部应用负载均衡器,请参阅设置具有虚拟机实例组后端的全球外部应用负载均衡器。
如需创建传统应用负载平衡器,请参阅设置具有代管式实例组后端的传统应用负载平衡器。
如需创建全球外部代理网络负载平衡器(SSL 代理),请参阅设置具有虚拟机实例组后端的全球外部代理网络负载平衡器(SSL 代理)。
如需创建传统代理网络负载平衡器(SSL 代理),请参阅设置具有虚拟机实例组后端的传统代理网络负载平衡器(SSL 代理)。
配置 CA Service 与 Certificate Manager 的集成
如需将 CA 服务与 Certificate Manager 集成,请按照以下步骤操作:
在目标 Google Cloud 项目中,创建 Certificate Manager 服务账号:
gcloud beta services identity create --service=certificatemanager.googleapis.com \ --project=PROJECT_ID将
PROJECT_ID替换为目标Google Cloud 项目的 ID。该命令会返回所创建的服务身份的名称。请参阅以下示例:
service-520498234@gcp-sa-certificatemanager.iam.gserviceaccount.com
在目标 CA 池中向 Certificate Manager 服务账号授予 CA Service Certificate Requester 角色 (
roles/privateca.certificateRequester):gcloud privateca pools add-iam-policy-binding CA_POOL \ --location LOCATION \ --member "serviceAccount:SERVICE_ACCOUNT" \ --role roles/privateca.certificateRequester替换以下内容:
CA_POOL:目标 CA 池的 ID。LOCATION:目标 Google Cloud 位置。SERVICE_ACCOUNT:您在第 1 步中创建的服务账号的全名。
为 CA 池创建证书颁发配置资源:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面上的签发配置标签页。
点击创建。系统随即会显示创建证书颁发配置页面。
在名称字段中,输入证书颁发配置的唯一名称。
可选:在说明字段中,输入签发配置的说明。
在位置部分,选择全球。
可选:在期限字段中,以天为单位指定所签发证书的期限。该值必须介于 21 天到 30 天之间(含 21 天和 30 天)。
可选:在轮替窗口百分比中,指定证书续订流程开始时证书生命周期的百分比。如需查找有效值的范围,请参阅生命周期和轮替窗口百分比。
可选:从密钥算法列表中,选择生成私钥时要使用的密钥算法。
在 CA 池列表中,选择要分配给此证书签发配置资源的 CA 池的名称。
在标签字段中,指定要与证书关联的标签。如需添加标签,请点击 添加标签,并为标签指定键和值。
点击创建。
gcloud
gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \ --ca-pool=CA_POOL替换以下内容:
ISSUANCE_CONFIG_NAME:证书签发配置资源的名称。CA_POOL:您要分配给此证书签发配置资源的 CA 池的完整资源路径和名称。
如需详细了解证书颁发配置资源,请参阅管理证书颁发配置资源。
创建由 CA Service 实例颁发的 Google 管理的证书
如需创建由 CA Service 实例颁发的 Google 管理的证书,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在证书标签页上,点击添加证书。
在证书名称字段中,输入证书的唯一名称。
可选:在说明字段中,输入证书的说明。通过说明,您可以识别证书。
在位置部分,选择全球。
对于范围,选择默认。
在证书类型部分,选择创建 Google 管理的证书。
对于证书授权机构类型,请选择专用。
在域名字段中,指定证书的域名列表(以英文逗号分隔)。每个域名都必须是完全限定域名,例如
myorg.example.com。对于选择证书签发配置,请选择引用目标 CA 池的证书签发配置资源名称。
在标签字段中,指定要与证书关联的标签。如需添加标签,请点击 添加标签,并为标签指定键和值。
点击创建。
新证书会显示在证书列表中。
gcloud
如需使用 Certificate Authority Service 创建全球 Google 管理的证书,请使用带有 issuance-config 标志的 certificate-manager certificates create 命令:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains="DOMAIN_NAMES" \
--issuance-config=ISSUANCE_CONFIG_NAME
替换以下内容:
CERTIFICATE_NAME:证书的名称。DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如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 池的证书颁发配置资源的名称。
验证证书的状态
在将证书部署到负载均衡器之前,请验证证书是否处于有效状态。证书状态可能需要几分钟才能更改为 ACTIVE。
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在证书标签页上,查看证书的状态列。
gcloud
如需验证证书的状态,请运行以下命令:
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/issuanceConfigs/myissuanceConfig state: ACTIVE name: projects/myproject/locations/global/certificates/mycertificate pemCertificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- sanDnsnames: - myorg.example.com updateTime: '2021-10-20T12:19:55.083385630Z'
如需了解更多问题排查步骤,请参阅 Certificate Manager 问题排查。
将证书部署到负载均衡器
如需部署 Google 管理的全球证书,请使用证书映射。
创建证书映射
创建引用与证书关联的证书映射条目的证书映射:
gcloud
如需创建证书映射,请使用 gcloud certificate-manager maps create 命令:
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
将 CERTIFICATE_MAP_NAME 替换为目标证书映射的名称。
Terraform
如需创建证书映射,您可以使用 google_certificate_manager_certificate_map 资源。
创建证书映射条目
创建证书映射条目,并将其与您的证书和证书映射相关联:
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。
Terraform
如需创建包含根域名的证书映射条目,请使用 google_certificate_manager_certificate_map_entry 资源。
如需创建包含通配符网域的证书映射条目,请使用 google_certificate_manager_certificate_map_entry 资源。
验证证书映射条目是否处于有效状态
在将相应的证书映射关联到目标代理之前,请验证证书映射条目是否处于活跃状态。
如需验证证书映射条目,请使用 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:网址映射的名称
如需将证书映射附加到现有目标 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) 证书,则代理会使用证书映射引用的证书,并忽略直接附加的 TLS (SSL) 证书。
对 CA Service 颁发的证书进行问题排查
如需了解问题排查步骤,请参阅与 CA Service 实例颁发的证书相关的问题。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除这些资源。
删除负载均衡器及其资源。
请参阅清理负载均衡设置。
从代理中删除或分离证书映射。
如需删除证书映射,请运行以下命令:
gcloud compute target-https-proxies delete PROXY_NAME
如果您想保留目标 HTTPS 代理,请从该代理中分离证书映射。
- 如果任何 TLS (SSL) 证书直接附加到代理,那么分离证书映射会导致代理恢复使用这些直接附加的 TLS (SSL) 证书。
- 如果没有直接附加到代理的 TLS (SSL) 证书,则无法从代理分离证书映射。您必须先将至少一个 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 托管的证书:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面。
在证书标签页上,选中相应证书的复选框。
点击删除。
在显示的对话框中,点击删除进行确认。
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME
将
CERTIFICATE_NAME替换为目标证书的名称。删除证书颁发配置资源:
控制台
在 Google Cloud 控制台中,前往 Certificate Manager 页面上的签发配置标签页。
选中要删除的签发配置资源对应的复选框。
点击删除。
在显示的对话框中,点击删除进行确认。
gcloud
gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME
将
ISSUANCE_CONFIG_NAME替换为目标证书签发配置资源的名称。删除 CA 池。
如需删除 CA 池,或停用证书颁发配置资源所引用的 CA 池中最后启用的 CA,请删除引用该 CA 池的所有证书颁发配置资源。如需了解详情,请参阅删除 CA 池。