使用 Certificate Authority Service 部署 Google 管理的区域级证书

本教程介绍如何使用 Certificate Manager 通过 Certificate Authority Service 将 Google 管理的区域级证书部署到 区域级外部应用负载平衡器或区域级内部应用负载平衡器。

如果要部署到全球外部负载平衡器或跨区域负载平衡器,请参阅以下内容:

目标

本教程介绍如何完成以下任务:

  • 使用 Certificate Manager 通过 CA Service 创建 Google 管理的证书。
  • 使用目标 HTTPS 代理将证书部署到受支持的负载均衡器。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是新手 Google Cloud, 请创建一个账号来评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. 安装 Google Cloud CLI。

  6. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  7. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. 安装 Google Cloud CLI。

  12. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  13. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  14. 启用 CA Service API
  15. 创建 CA 池。您必须在此 CA 池中创建并启用至少一个 CA。

在按照本教程中的步骤操作之前,您需要记下以下内容:

  • 您使用 Certificate Authority Service 创建的证书不受公开信任。如需颁发公开信任的证书,请创建具有 DNS 授权负载 均衡器授权的证书。
  • 如果目标 CA 池中生效了证书颁发 政策,则证书预配可能会因以下任何原因而失败:

    • 证书颁发政策已阻止请求的证书。 在这种情况下,由于证书尚未颁发,因此您无需付费。
    • 该政策已对证书应用了 Certificate Manager 不支持的更改。在这种情况下,即使证书与 Certificate Manager 不完全兼容,您也需要付费,因为证书已颁发。
  • 为确保兼容性,请将目标 CA 池的证书 颁发政策配置为允许 最终实体(叶)服务器 TLS 证书

  • 从区域 CA 池颁发的 Google 管理的 TLS 证书是全球性的,可以在任何区域中使用。

所需的角色

请确保您拥有以下角色,以便完成本教程中的任务:

  • 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 中执行操作时需要此角色。

详情请参阅以下内容:

创建负载均衡器

本教程假定您已创建并配置负载平衡器的后端、健康检查、后端服务和网址映射。请记下网址映射的名称,因为您在本教程后面会用到它。

配置 CA Service 与 Certificate Manager 的集成

如需将 CA Service 与 Certificate Manager 集成,请按以下步骤操作:

  1. 在目标 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
    
  2. 在目标 CA 池中,向 Certificate Manager 服务帐号授予 CA Service Certificate Requester role (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 步中创建的服务帐号的完整名称。
  3. 为您的 CA 池创建证书颁发配置资源:

    控制台

    1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面上的 Issuance configs (颁发配置)标签页。

      前往 Certificate Manager

    2. 点击创建 。系统会显示 Create a Certificate Issuance Config (创建证书颁发配置)页面。

    3. Name (名称)字段中,输入证书颁发配置的唯一名称。

    4. 可选:在 Description (说明)字段中,输入颁发配置的说明。

    5. 对于位置,选择地区级

      对于区域,选择与您的证书和 CA 池相同的区域。

    6. 可选:在 Lifetime (有效期)字段中,以天为单位指定颁发证书的有效期。该值必须介于 21 到 30 天(含)之间。

    7. 可选:在 Rotation window percentage(轮替时段百分比)字段中,指定证书续订过程开始时证书有效期的百分比。如需查找有效值的范围,请参阅有效期和轮替时段 百分比

    8. 可选:从 Key algorithm (密钥算法)列表中,选择生成私钥时要使用的密钥算法。

    9. CA pool (CA 池)列表中,选择要分配给此证书颁发配置资源的 CA 池的名称。

    10. Labels (标签)字段中,指定要与证书关联的标签。如需添加标签,请点击 添加标签,并为标签指定键和值。

    11. 点击创建

    gcloud

    gcloud certificate-manager issuance-configs create ISSUANCE_CONFIG_NAME \
        --ca-pool=CA_POOL \
        --location=LOCATION
    

    替换以下内容:

    • ISSUANCE_CONFIG_NAME:证书颁发配置资源的名称。
    • CA_POOL:您要分配给此证书颁发配置资源的 CA 池的完整资源路径和名称。
    • LOCATION:目标 Google Cloud 位置。您必须指定与 CA 池和证书相同的位置。

    如需详细了解证书颁发配置资源, 请参阅管理证书颁发配置资源

创建由 CA Service 实例颁发的 Google 管理的证书

如需创建由 CA Service 实例颁发的 Google 管理的证书,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往 Certificate Manager

  2. 证书 标签页上,点击添加证书

  3. Certificate name (证书名称)字段中,输入证书的唯一名称。

  4. 可选:在 Description (说明)字段中,输入证书的说明。通过说明,您可以识别证书。

  5. 对于位置,选择地区级

  6. 区域 列表中,选择您的区域。

  7. 对于证书类型,选择创建 Google 管理的证书

  8. 对于 Certificate Authority type(证书授权机构类型),选择 Private(专用)。

  9. Domain Names (域名)字段中,指定以英文逗号分隔的证书域名列表。每个域名都必须是完全限定域名,例如 myorg.example.com

  10. 对于 Select a certificate issuance config(选择证书颁发配置),选择引用目标 CA 池的 证书颁发配置资源的名称。

  11. Labels (标签)字段中,指定要与证书关联的标签。如需添加标签,请点击 添加标签,并为标签指定 键和值。

  12. 点击创建

    新证书会显示在证书列表中。

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" \
    --location="LOCATION"

替换以下内容:

  • CERTIFICATE_NAME:证书的名称。
  • DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com
  • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。
  • LOCATION:目标 Google Cloud 位置。您必须指定与 CA 池、证书颁发配置资源和 Google 管理的证书相同的位置。

API

如需创建证书,请按如下方式向 certificates.create 方法发出 POST 请求:

POST /v1/projects/PROJECT_ID/locations/LOCATION/certificates?certificate_id=CERTIFICATE_NAME"
{
 name: "/projects/example-project/locations/LOCATION/certificates/my-cert",
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "issuanceConfig": "ISSUANCE_CONFIG_NAME",
 },
}

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • LOCATION:目标 Google Cloud 位置。您必须指定与 CA 池、证书颁发配置资源和 Google 管理的证书相同的位置。
  • CERTIFICATE_NAME:证书的名称。
  • DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com
  • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。

验证证书的状态

在将证书部署到负载均衡器之前,请验证证书是否处于活跃状态。证书状态可能需要几分钟才能更改为 ACTIVE

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往 Certificate Manager

  2. 证书 标签页上,查看证书的 Status (状态)列。

gcloud

如需验证证书的状态,请运行以下命令:

gcloud certificate-manager certificates describe CERTIFICATE_NAME \
    --location=LOCATION

替换以下内容:

  • CERTIFICATE_NAME:证书的名称。
  • LOCATION:您创建 Google 管理的证书的目标 Google Cloud 位置。

输出类似于以下内容:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  domains:
  - myorg.example.com
  issuanceConfig: projects/myproject/locations/LOCATION/issuanceConfigs/myissuanceConfig
  state: ACTIVE
name: projects/myproject/locations/LOCATION/certificates/mycertificate
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  - myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

如需了解更多问题排查步骤,请参阅排查 Certificate Manager 问题

将 Google 管理的区域级证书部署到负载均衡器

如需部署 Google 管理的区域级证书,请将其直接附加到目标代理。

将证书直接附加到目标代理

您可以将证书附加到新的目标代理或现有目标代理。

如需将证书附加到新的目标代理,请使用 gcloud compute target-https-proxies create 命令

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-manager-certificates=CERTIFICATE_NAME \
    --url-map=URL_MAP \
    --region=LOCATION

替换以下内容:

  • PROXY_NAME:目标代理的名称。
  • CERTIFICATE_NAME:证书的名称。
  • URL_MAP:网址映射的名称。您在创建负载均衡器时创建了网址映射。
  • LOCATION:您要创建 HTTPS 目标 Google Cloud 位置的目标位置。

如需将证书附加到现有 HTTPS 目标代理,请使用 gcloud compute target-https-proxies update 命令。如果您 不知道现有目标代理的名称,请前往**目标代理** 页面并记下目标代理的名称。

gcloud compute target-https-proxies update PROXY_NAME \
    --region=LOCATION \
    --certificate-manager-certificates=CERTIFICATE_NAME

创建或更新目标代理后,请运行以下命令进行验证:

gcloud compute target-https-proxies list

排查 CA Service 颁发的证书的问题

如需查看问题排查步骤,请参阅 与 CA Service 实例颁发的证书相关的问题

清理

为避免因本教程中使用的资源 导致您的 Google Cloud 账号产生费用,请删除这些资源。

  1. 删除负载均衡器及其资源。

    请参阅清理负载均衡设置

  2. 删除 Google 管理的证书:

    控制台

    1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

      前往 Certificate Manager

    2. 证书 标签页上,选中证书的复选框。

    3. 点击删除

    4. 在显示的对话框中,点击删除 进行确认。

    gcloud

    gcloud certificate-manager certificates delete CERTIFICATE_NAME \
        --location=LOCATION
    

    替换以下内容:

    • CERTIFICATE_NAME:证书的名称。
    • LOCATION:目标 Google Cloud 位置。
  3. 删除证书颁发配置资源:

    控制台

    1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面上的 Issuance configs (颁发配置)标签页。

      前往 Certificate Manager

    2. 选中要删除的颁发配置资源的复选框。

    3. 点击删除

    4. 在显示的对话框中,点击删除 进行确认。

    gcloud

    gcloud certificate-manager issuance-configs delete ISSUANCE_CONFIG_NAME \
        --location=LOCATION
    

    替换以下内容:

    • ISSUANCE_CONFIG_NAME:引用目标 CA 池的证书颁发配置资源的名称。
    • LOCATION:目标 Google Cloud 位置。
  4. 删除 CA 池。

    如需删除 CA 池,或停用证书颁发配置引用的 CA 池中最后启用的 CA,请删除引用该 CA 池的所有证书颁发配置。如需了解详情,请参阅删除 CA 池

后续步骤