使用服务账号创建政策

服务账号是一种特殊类型的账号,通常由应用或计算工作负载(例如 Compute Engine 实例)而非真人使用。此账号由其电子邮件地址(对该账号是唯一的)标识。

应用使用服务账号来执行已获授权的 API 调用(以服务账号本身的身份进行身份验证或者以 Google Workspace 或 Cloud Identity 用户的身份通过全网域授权功能进行身份验证)。 当应用是使用服务账号证明其身份时,它可以访问该服务账号有权访问的所有资源。

您可以使用服务账号来识别流量来源,并根据需要配置安全 Web 代理政策。

本指南介绍如何执行以下操作:

  • 创建一个包含空政策的安全 Web 代理实例。
  • 创建服务账号并将其附加到资源。
  • 使用服务账号创建安全 Web 代理政策。
  • 创建安全 Web 代理实例。
  • 测试来自虚拟机的连接。

准备工作

  • 完成初始设置步骤

  • 让组织管理员向服务账号授予访问权限

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

    gcloud version | head -n1
    

    如果您安装的 gcloud CLI 版本较低,请更新版本:

    gcloud components update --version=406.0.0
    

创建包含空政策的安全 Web 代理实例

如需创建安全 Web 代理实例,请先创建一个空安全政策,然后再创建 Web 代理。

创建空安全政策

控制台

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

    前往“SWP 政策”页面

  2. 点击 创建政策

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

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

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

  6. 点击创建

Cloud Shell

  1. 使用您偏好的文本编辑器创建 POLICY_FILE.yaml 文件。将 POLICY_FILE 替换为您要为政策文件使用的文件名。

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

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

    替换以下内容:

    • PROJECT_NAME:您的项目的名称
    • REGION:此政策适用的区域
    • POLICY_NAME:您要创建的政策的名称
    • POLICY_DESCRIPTION:您要创建的政策的说明
  3. 导入安全政策:

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

创建 Web 代理

控制台

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

    前往“Web 代理”页面

  2. 点击 创建安全 Web 代理

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

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

  5. 区域列表中,选择要创建网站代理的区域。

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

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

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

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

  10. 政策列表中,选择要与网站代理关联的政策。

  11. 点击创建

Cloud Shell

  1. 使用您偏好的文本编辑器创建 GATEWAY_FILE.yaml 文件。将 GATEWAY_FILE 替换为您要为网络代理文件使用的文件名。

  2. 将以下内容添加到您创建的 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/SUBNET_NAME
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

    替换以下内容:

    • GATEWAY_NAME:此实例的名称
    • GATEWAY_PORT_NUMBERS:此网关的端口号列表,例如 [80,443]
    • CERTIFICATE_URLS:SSL 证书网址列表
    • SUBNET_NAME:包含 GATEWAY_IP_ADDRESS 的子网的名称

    • GATEWAY_IP_ADDRESS:之前在初始设置步骤中创建的代理子网中安全 Web 代理实例的 IP 地址(可选)

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

  3. 创建安全 Web 代理实例:

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

测试连接性

如需测试连接性,请在虚拟私有云 (VPC) 网络中的任何虚拟机中使用 curl 命令:

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

系统会显示 403 Forbidden 错误,这是预期行为。

创建服务账号并将其附加到资源

如需创建和附加服务账号,请执行以下操作:

  1. 创建服务账号

  2. 将服务账号关联到资源

创建安全 Web 代理规则

如需创建安全 Web 代理规则,请执行以下操作:

  1. 使用您偏好的文本编辑器创建 RULE_FILE.yaml 文件。将 RULE_FILE 替换为您选择的文件名。

  2. 如需允许从所选服务账号访问网址,请将以下内容添加到 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 文件中:

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

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

  3. 导入您创建的规则:

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

测试连接性

如需测试连接,请使用带有附加 SERVICE_ACCOUNT 的资源中的 curl 命令:

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

IPv4_ADDRESS 替换为您的安全 Web 代理实例的 IPv4 地址。

后续步骤