使用服务账号创建政策

服务账号是一种特殊的非人类 Google 账号,应用、自动化流程或计算工作负载(例如 Compute Engine 实例)使用该账号进行已获授权的 API 调用。与用户账号不同,服务账号仅通过其唯一的电子邮件地址进行标识。

应用使用服务账号进行身份验证并获取对Google Cloud 资源的访问权限。当应用使用服务账号进行身份验证时,它会获得对该服务账号已被明确授予 Identity and Access Management 权限的资源的访问权限。这提供了一种安全、可审核且集中式的机器间授权方法。

对于 Secure Web Proxy,服务账号在授权和政策执行方面发挥着至关重要的作用。通过使用服务账号来标识工作负载的流量来源,您可以创建精细的 Secure Web Proxy 政策,以便根据应用的身份(而不仅仅是其 IP 地址)具体允许或拒绝 Web 流量。

本页面介绍如何执行以下操作:

准备工作

  • 完成初始设置步骤

  • 请组织管理员授予您对服务账号的访问权限

  • 验证您是否已安装 Google Cloud CLI 406.0.0 版或更高版本:

    gcloud version | head -n1
    

    如果您安装的是早期 gcloud CLI 版本,请更新版本:

    gcloud components update --version=406.0.0
    

创建具有空政策的 Secure Web Proxy 实例

如需创建 Secure Web Proxy 实例,您必须先创建空的安全政策,然后创建使用该政策的 Web 代理。

创建空安全政策

控制台

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

    前往“SWP 政策”页面

  2. 点击 创建政策

  3. 名称字段中,输入政策的名称,例如 myswppolicy

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

  5. 对于区域,选择您要在其中创建政策的区域,例如 us-central1

  6. 点击创建

Cloud Shell

  1. 使用您偏好的文本编辑器创建 policy.yaml 文件。

  2. 将以下内容添加到您创建的 policy.yaml 文件中:

    name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    description: POLICY_DESCRIPTION
    

    替换以下内容:

    • PROJECT_NAME:项目的名称

    • REGION:创建政策的区域,例如 us-central1

    • POLICY_NAME:政策的名称

    • POLICY_DESCRIPTION:政策的说明

  3. 使用 gcloud network-security gateway-security-policies import 命令导入安全政策:

    gcloud network-security gateway-security-policies import POLICY_NAME \
        --source=POLICY_FILE.yaml \
        --location=REGION
    

创建 Web 代理

控制台

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

    前往“Web 代理”

  2. 点击 创建安全 Web 代理

  3. 名称字段中,输入 Web 代理的名称,例如 myswp

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

  5. 路由模式部分,选择以下选项之一:

    • 显式:以显式代理模式部署 Secure Web Proxy 实例。
    • 下一个跃点:以下一个跃点模式部署 Secure Web Proxy 实例。
  6. 对于区域,选择您要在其中创建 Web 代理的区域,例如 us-central1

  7. 网络部分,选择要创建 Web 代理的网络。

  8. 对于子网,选择您在初始设置期间创建的 VPC 子网

  9. 可选:在 Web 代理 IP 地址字段中,输入 Secure Web Proxy IP 地址。

    您可以输入在您在上一步中创建的子网中存在的 Secure Web Proxy IP 地址范围内的 IP 地址。如果您未输入 IP 地址,Secure Web Proxy 实例会自动从所选子网中选择一个 IP 地址。

  10. 对于证书,请选择要用于创建 Web 代理的证书。

  11. 政策部分,选择您创建的要与 Web 代理相关联的政策。

  12. 点击创建

Cloud Shell

  1. 使用您偏好的文本编辑器创建 gateway.yaml 文件。

  2. 将以下内容添加到 gateway.yaml 文件中:

    name: projects/PROJECT_NAME/locations/REGION/gateways/GATEWAY_NAME
    type: SECURE_WEB_GATEWAY
    ports: [GATEWAY_PORT_NUMBERS]
    certificateUrls: [CERTIFICATE_URLS]
    gatewaySecurityPolicy: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
    network: projects/PROJECT_NAME/global/networks/NETWORK_NAME
    subnetwork: projects/PROJECT_NAME/regions/REGION/subnetworks/SUBNETWORK
    routingMode: ROUTING_MODE
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

    替换以下内容:

    • GATEWAY_NAME:此 Secure Web Proxy 实例的名称

    • GATEWAY_PORT_NUMBERS:相应网关的端口号列表,例如 [80,443]

    • CERTIFICATE_URLS:SSL 证书网址列表

    • SUBNETWORK:您在初始设置期间创建的 VPC 子网

    • ROUTING_MODE:指定所需的 Web 代理路由模式:

      • EXPLICIT_ROUTING_MODE:以显式代理模式部署 Secure Web Proxy 实例
      • NEXT_HOP_ROUTING_MODE:以下一跳模式部署 Secure Web Proxy 实例
    • GATEWAY_IP_ADDRESS:可选列表,其中包含您之前在初始设置步骤中创建的代理子网内 Secure Web Proxy 实例的 IP 地址

      如果您选择不列出 IP 地址,请省略该字段,以便让 Web 代理为您选择 IP 地址。

  3. 使用 gcloud network-services gateways import 命令创建 Secure Web Proxy 实例:

    gcloud network-services gateways import GATEWAY_NAME \
        --source=gateway.yaml \
        --location=REGION
    

测试连接性

如需测试连接,请从 Virtual Private Cloud (VPC) 网络中的任何虚拟机 (VM) 实例运行 curl 命令:

  curl -x https://GATEWAY_IP_ADDRESS:PORT_NUMBER https://www.example.com --proxy-insecure

如果一切正常,您的 Secure Web Proxy 实例会返回 403 Forbidden 状态代码。此错误确认了以下内容:

  • Secure Web Proxy 实例已成功部署,并且正在主动接收流量。

  • Secure Web Proxy 政策正在正确地强制执行默认安全状况,即拒绝所有流量,直到您在后续部分中定义特定的 allow 规则。

创建服务账号并授予 IAM 角色

  1. 创建服务账号:使用 gcloud iam service-accounts create 命令在您的 Google Cloud项目中创建名为 my-swp-sa 的服务账号。

    gcloud iam service-accounts create my-swp-sa \
        --display-name="Secure Web Proxy service account" \
        --description="Service account for Secure Web Proxy instances"
  2. 向服务账号授予 IAM 角色:使用 gcloud projects add-iam-policy-binding 命令向服务账号授予必要的 IAM 角色,以便该服务账号可以管理或使用 Google Cloud 项目中的资源。

    例如,如需允许服务账号使用网络资源,请向其授予 Compute Network User 角色 (roles/compute.networkUser)。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:my-swp-sa@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/compute.networkUser"

    PROJECT_ID 替换为您的Google Cloud 项目的 ID。

创建 Secure Web Proxy 规则

控制台

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

    前往“SWP 政策”页面

  2. 点击您之前创建的政策的名称,例如 myswppolicy

  3. 点击 添加规则

  4. 对于每条规则,请执行以下操作:

    1. 优先级字段中,输入规则的数字评估顺序。规则按照从最高到最低的优先级进行评估,其中 0 是最高优先级。

    2. 名称字段中,输入规则的名称。

    3. 说明字段中,输入规则的说明。

    4. 操作部分,选择以下选项之一:

      • 允许:允许与规则匹配的连接请求。
      • 拒绝:拒绝与规则匹配的连接请求。
    5. 对于状态字段,请选择以下规则强制执行选项之一:

      • 已启用:对 Secure Web Proxy 实例强制执行相应规则。
      • 已停用:不在 Secure Web Proxy 实例上强制执行相应规则。
    6. 会话匹配部分中,指定您之前创建的服务账号的电子邮件地址。例如:

        sessionMatcher: "source.matchServiceAccount(SERVICE_ACCOUNT) && host() == 'example.com'"
      

      如需详细了解 SessionMatcher 的语法,请参阅 CEL 匹配器语言参考文档

    7. 应用匹配部分中,指定请求的匹配条件。

    8. 点击添加规则

  5. 如需添加其他规则,请点击添加规则

Cloud Shell

  1. 使用您偏好的文本编辑器创建 rule.yaml 文件。

  2. 如需允许相应服务账号访问某个网址,请将以下内容添加到您创建的 rule.yaml 文件中:

    name: projects/PROJECT_NAME/locations/REGION/gatewaySecurityPolicies/POLICY_NAME/rules/RULE_NAME
    description: RULE_DESCRIPTION
    enabled: true
    priority: RULE_PRIORITY
    sessionMatcher: CEL_EXPRESSION
    basicProfile: ALLOW
    

    替换以下内容:

    • RULE_NAME:相应规则的名称
    • RULE_DESCRIPTION:规则的说明
    • RULE_PRIORITY:相应规则的优先级;数值越小,优先级越高
    • CEL_EXPRESSION:通用表达式语言 (CEL) 表达式。如需了解详情,请参阅 CEL 匹配器语言参考文档

    例如,如需允许从具有所需服务账号的资源访问 example.com,请将以下内容添加到为 sessionMatcher 创建的 YAML 文件中:

    ```yaml
    sessionMatcher: "source.matchServiceAccount('SERVICE_ACCOUNT') && host() == 'example.com'"
    ```
    

    SERVICE_ACCOUNT 替换为您要允许的服务账号。这必须是服务账号的电子邮件地址。

  3. 使用 gcloud network-security gateway-security-policies rules import 命令导入您创建的规则:

    gcloud network-security gateway-security-policies rules import RULE_NAME \
        --source=RULE_FILE.yaml \
        --location=REGION \
        --gateway-security-policy=POLICY_NAME
    

测试连接性

您可以再次测试连接性,以验证整个 Secure Web Proxy 配置(包括服务账号、安全政策规则和网关)是否按预期运行。

如需测试连接,请从附加了 SERVICE_ACCOUNT 的资源(例如虚拟机实例)运行 curl 命令:

curl -x https://IPv4_ADDRESS:443 http://example.com 
--proxy-insecure

IPv4_ADDRESS 替换为您的 Secure Web Proxy 实例的 IPv4 地址。

如果一切正常,您会收到 200 OK 状态代码。此状态代码确认了以下关键结果:

  • 授权成功:这证明了源自资源的流量已通过分配的服务账号正确识别,并且此身份成功匹配了您添加到安全政策中的 allow 规则。

  • 端到端功能:验证流量是否通过配置的路径(从资源 > 到 Secure Web Proxy 实例 > 通过安全政策 > 到达外部目标位置)正确流动。

后续步骤