启用 TLS 检查

本页面介绍如何为安全 Web 代理实例启用传输层安全协议 (TLS) 检查。安全 Web 代理提供 TLS 检查服务,让您可以拦截 TLS 流量、检查加密请求并强制执行安全政策。如需详细了解 TLS 检查,请参阅 TLS 检查概览

准备工作

在为安全 Web 代理实例配置 TLS 检查之前,请完成以下部分中的任务。

启用 Certificate Authority Service

安全 Web 代理使用 Certificate Authority Service 生成用于 TLS 检查的证书。

如需启用 CA Service,请使用以下命令:

  gcloud services enable privateca.googleapis.com
  

创建 CA 池

证书授权机构 (CA) 池 是包含多个 CA 的集合,它具有通用证书颁发政策和 Identity and Access Management (IAM) 政策。CA 池能够轮替 信任链,而不中断或停止其负载。

您必须先创建 CA 池,然后才能使用 CA Service 创建 CA。本部分将引导您了解完成此任务所需的权限,然后介绍如何创建 CA 池。

如需生成证书,TLS 检查会为每个项目使用单独的 服务账号,该账号名为 service-[PROJECT_NUMBER]@gcp-sa-networksecurity.. 请确保您已向此服务帐号授予使用 CA 池的权限。如果此访问权限被撤消,则 TLS 检查将停止工作。

如需使用 CA 池项目的 PROJECT_ID 检索 PROJECT_NUMBER,请使用以下命令:

gcloud projects describe PROJECT_ID
    --format="value(projectNumber)"

如需创建池,请使用 gcloud privateca pools create 命令,并 指定从属池 ID、层级、项目 ID 和位置。

gcloud privateca pools create SUBORDINATE_POOL_ID \
    --tier=TIER \
    --project=PROJECT_ID \
    --location=REGION

替换以下内容:

  • SUBORDINATE_POOL_ID:CA 池的名称
  • TIER:CA 池的层级,可以是 devopsenterprise。我们建议您在 devops 层级中创建 CA 池,因为无需跟踪单独颁发的证书。
  • PROJECT_ID:CA 池项目的 ID
  • REGION:要在其中创建 CA 池的区域

配置本地中间 CA 签名

如需启用 LOCAL_INTERMEDIATE_CA_SIGNING 证书颁发 模式, 您必须将 isCa 的值设置为 true

  1. 使用以下配置创建 ca-issuance-policy.yaml 文件:

    issuancePolicy:
      baselineValues:
        caOptions:
          isCa: true
        keyUsage:
          baseKeyUsage:
            certSign: true
            crlSign: true
          extendedKeyUsage:
            serverAuth: true
    
  2. 创建 CA 池时,请指定颁发政策文件。

    gcloud privateca pools create SUBORDINATE_POOL_ID \
        --tier=TIER \
        --project=PROJECT_ID \
        --location=REGION \
        --issuance-policy-file=ca-issuance-policy.yaml
    

    替换以下内容:

    • SUBORDINATE_POOL_ID:CA 池的名称
    • TIER:CA 池的层级,可以是 devopsenterprise。我们建议您在 devops 层级中创建 CA 池,因为无需跟踪单独颁发的证书。
    • PROJECT_ID:CA 池项目的 ID
    • REGION:要在其中创建 CA 池的区域

创建从属 CA 池

如果您有多个证书颁发场景,则可以为每个 场景创建一个从属 CA。您可以在 CA 池中创建从属 CA, 并且 根 CA 会对该 CA 池中的所有 CA 进行签名。这些证书用于对为 TLS 检查生成的服务器证书进行签名。

如需创建从属 CA 池,请使用以下方法之一。

使用存储在 Certificate Authority Service 中的现有根 CA 创建从属 CA 池

如需生成从属 CA,请执行以下操作:

  1. 创建 CA 池
  2. 在 CA 池中创建从属 CA

使用外部持有的现有根 CA 创建从属 CA 池

如需生成从属 CA,请执行以下操作:

  1. 创建 CA 池
  2. 创建由外部根 CA 签名的从属 CA

创建根 CA

如果根 CA 不存在,则可以在 CA Service 中创建一个。

如需创建根 CA,请执行以下操作:

  1. 创建根 CA
  2. 使用存储在 CA Service 中的现有根 CA 创建从属 CA 池

创建服务帐号

服务账号有助于为 TLS 检查提供 必要的权限,而不会损害用户账号或安全 Web 代理实例本身的 安全性。

如果您没有服务帐号,则必须创建一个服务账号,然后向该服务帐号授予所需的权限。

  1. 创建服务帐号。

    gcloud beta services identity create \
        --service=networksecurity.googleapis.com \
        --project=PROJECT_ID
    

    作为响应,Google Cloud CLI 会创建一个名为 service-[PROJECT_NUMBER]@gcp-sa-networksecurity. 的服务帐号。

    如需使用 CA 池项目的 PROJECT_ID 检索 PROJECT_NUMBER,请使用以下命令:

    gcloud projects describe PROJECT_ID
        --format="value(projectNumber)"
    
  2. 对于您创建的服务帐号,授予使用 CA 池生成证书的权限。

    gcloud privateca pools add-iam-policy-binding CA_POOL \
        --member='serviceAccount:SERVICE_ACCOUNT' \
        --role='roles/privateca.certificateManager' \
        --location='REGION'
    

为 TLS 检查配置安全 Web 代理

只有在完成 准备工作部分中列出的前提条件任务后,您才能继续执行本部分中的任务。

如需配置 TLS 检查,请完成以下部分中的任务。

创建 TLS 检查政策

控制台

  1. 在 Google Cloud 控制台中,前往 TLS 检查政策 页面。

    前往 TLS 检查政策

  2. 在项目选择器菜单中,选择您的项目。

  3. 点击创建 TLS 检查政策

  4. 名称 字段中,输入政策的名称。

  5. 可选:在说明 字段中,输入政策的说明。

  6. 区域 列表中,选择要在其中创建政策的区域。

  7. CA 池 列表中,选择要在其中创建证书的 CA 池。

    如果您尚未配置 CA 池,请点击 新建池 ,然后按照 创建 CA 池部分中的说明进行操作。

  8. 点击创建

gcloud

  1. 创建 TLS_INSPECTION_FILE.yaml 文件。将 TLS_INSPECTION_FILE 替换为所需的文件名。

  2. 将以下代码添加到 YAML 文件中以配置所需的 TlsInspectionPolicy:

    name: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME
    caPool: projects/PROJECT_ID/locations/REGION/caPools/CA_POOL
    certificateIssuanceMode: CERTIFICATE_ISSUANCE_MODE
    

    替换以下内容:

    • PROJECT_ID:项目的 ID
    • REGION:要在其中创建政策的区域
    • TLS_INSPECTION_NAME:安全 Web 代理 TLS 检查政策的名称
    • CA_POOL:创建证书的 CA 池的名称。CA 池必须位于同一区域。
    • CERTIFICATE_ISSUANCE_MODE:证书颁发的可选模式。您可以指定以下值之一:
      • CERTIFICATE_ISSUANCE_MODE_UNSPECIFIED:使用此选项可将安全 Web 代理的 certificateIssuanceMode 设置为其默认值 DIRECT_LEAF_PROVISIONING
      • LOCAL_INTERMEDIATE_CA_SIGNING:设置此值可将安全 Web 代理配置为使用中间 CA 签名证书颁发模式
      • DIRECT_LEAF_PROVISIONING:设置此值可将安全 Web 代理配置为对每个网域使用直接叶 CA 预配

导入 TLS 检查政策

导入您在上一步中创建的 TLS 检查政策:

gcloud network-security tls-inspection-policies import TLS_INSPECTION_NAME \
    --source=TLS_INSPECTION_FILE.yaml \
    --location=REGION

将 TLS 检查政策添加到安全政策

控制台

创建 Web 代理政策

  1. 在 Google Cloud 控制台中,前往 SWP 政策 页面。

    前往 SWP 政策

  2. 点击 创建政策

  3. 输入要创建的政策的名称, 例如 myswppolicy

  4. 输入政策的说明,例如 My new swp policy

  5. 区域列表中,选择要在其中 创建安全 Web 代理政策的区域。

  6. 如需配置 TLS 检查,请选择配置 TLS 检查

  7. TLS 检查政策 列表中,选择您创建的 TLS 检查政策。

  8. 如果要为政策创建规则,请点击 继续,然后点击 添加规则。如需了解详情,请参阅 创建安全 Web 代理规则

  9. 点击创建

创建安全 Web 代理规则

  1. 在 Google Cloud 控制台中,前往 SWP 政策 页面。

    前往 SWP 政策

  2. 在项目选择器菜单中,选择您的组织 ID 或包含政策的文件夹。

  3. 点击您的政策名称。

  4. 点击 添加规则

  5. 填充规则字段:

    1. 名称
    2. 说明
    3. 状态
    4. 优先级:规则的数字评估顺序。这些规则按照从最高到最低的优先级进行评估,其中 0 是最高优先级。
    5. 操作 部分中,指定是允许(允许 )还是拒绝(拒绝 )与规则匹配的连接。
    6. 会话匹配 部分中,指定会话匹配条件。如需详细了解 SessionMatcher的语法,请参阅 CEL 匹配器语言参考文档
    7. 如需启用 TLS 检查,请选择启用 TLS 检查
    8. 应用匹配 部分中,指定请求匹配条件。如果您未启用该规则以进行 TLS 检查,则请求只能匹配 HTTP 流量。
    9. 点击创建
  6. 点击添加规则 以添加其他规则。

  7. 点击创建 以创建该政策。

设置 Web 代理

  1. 在 Google Cloud 控制台中,前往 Web 代理 页面。

    前往 Web 代理

  2. 点击 创建安全 Web 代理

  3. 输入要创建的 Web 代理的名称, 例如 myswp

  4. 输入 Web 代理的说明,例如 My new swp

  5. 区域列表中,选择要在其中 创建 Web 代理的区域。

  6. 网络 列表中,选择要在其中 创建 Web 代理的网络。

  7. 子网 列表中,选择要在其中 创建 Web 代理的子网。

  8. 可选:输入安全 Web 代理 IP 地址。您可以输入在上一步中创建的子网中的安全 Web 代理 IP 地址范围内的 IP 地址。如果您未输入 IP 地址,则安全 Web 代理 实例会自动从所选 子网中选择 IP 地址。

  9. 证书 列表中,选择要用于创建 Web 代理的证书 。

  10. 政策 列表中,选择您创建的 要与 Web 代理关联的政策。

  11. 点击创建

Cloud Shell

  1. 创建文件 policy.yaml

      description: basic Secure Web Proxy policy
      name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1
      tlsInspectionPolicy: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME
    
  2. 创建安全 Web 代理政策:

      gcloud network-security gateway-security-policies import policy1 \
          --source=policy.yaml --location=REGION
    
  3. 创建文件 rule.yaml

      name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1/rules/allow-example-com
      description: Allow example.com
      enabled: true
      priority: 1
      basicProfile: ALLOW
      sessionMatcher: host() == 'example.com'
      applicationMatcher: request.path.contains('index.html')
      tlsInspectionEnabled: true
    
  4. 创建安全政策规则。

      gcloud network-security gateway-security-policies rules import allow-example-com \
          --source=rule.yaml \
          --location=REGION \
          --gateway-security-policy=policy1
    
  5. 如需将 TLS 检查政策附加到现有 安全政策,请创建文件 POLICY_FILE.yaml。将 POLICY_FILE 替换为您的文件名。

      description: My Secure Web Proxy policy
      name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
      tlsInspectionPolicy: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME
    

接下来怎么做?