使用标记创建政策

本页面介绍了如何将资源管理器标记附加到安全 Web 代理政策。Resource Manager 标记是可以附加到各种 Google Cloud 资源(例如虚拟机 [VM] 实例)的标签。您可以使用标记,通过现有的组织标签在整个网络中强制实施条件性访问控制。

通过使用这些标记,您可以执行以下操作:

  • 细分工作负载:您可以唯一标识不同的环境(例如 productiondevelopment)和服务类型(例如 frontenddatabase)。

  • 集中式访问权限控制:您可以根据这些标记制定安全 Web 代理政策。例如,您可以创建一条政策规则,规定:“只有源自具有 tag segment=production 标记的资源的流量才能访问一组特定的网址。”

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

准备工作

创建具有空政策的安全 Web 代理实例

如需创建安全 Web 代理实例,您必须先创建空的安全政策,然后创建使用该政策的 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. 路由模式部分中,选择显式选项。

  6. 对于区域,选择您要在其中创建 Web 代理的区域,例如 us-central1

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

  8. 对于子网,选择您之前在初始设置步骤中创建的 VPC 子网

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

    您可以输入安全 Web 代理 IP 地址范围内的 IP 地址,该范围位于您在上一步中创建的子网中。如果您未输入 IP 地址,安全 Web 代理实例会自动从所选子网中选择一个 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
    addresses: [GATEWAY_IP_ADDRESS]
    scope: samplescope
    

    替换以下内容:

    • GATEWAY_NAME:此安全 Web 代理实例的名称

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

    • CERTIFICATE_URLS:SSL 证书网址列表

    • SUBNETWORK:您之前在初始设置步骤中创建的 VPC 子网

    • GATEWAY_IP_ADDRESS:可选列表,包含您之前在初始设置步骤中创建的代理子网内 Secure Web Proxy 实例的 IP 地址

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

  3. 使用 gcloud network-services gateways import 命令创建安全 Web 代理实例:

    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

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

  • 安全 Web 代理实例已成功部署,并且正在主动接收流量。

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

创建和附加 Resource Manager 标记

  1. 创建安全标记键和值

    示例:如需为受限环境创建标记,请按照以下步骤操作:

    1. 使用 gcloud resource-manager tags keys create 命令创建标记键 (access-level),并将用途设置为 GCE_FIREWALL

    2. 从创建命令的输出中检索标记键 ID,或使用 gcloud resource-manager tags keys list 命令检索标记键 ID。 您需要此 ID 才能将标记值与此特定标记键相关联。

    3. 使用 gcloud resource-manager tags values create 命令创建标记值 (restricted),并将标记键 ID 指定为父级。

    # Create the tag key
    # The output provides a unique ID, such as "tagKeys/1234567890"
    
    gcloud resource-manager tags keys create "access-level" \
        --parent="organizations/1234567890" \
        --purpose="GCE_FIREWALL" \
        --purpose-values="execution_env=ANS"
    
    # Create the tag value and connect it to the key
    # The "--parent" flag identifies to which key this value belongs
    
    gcloud resource-manager tags values create "restricted" \
        --parent="tagKeys/1234567890"
    
  2. 将标记附加到虚拟机实例

    附加这些标记会将虚拟机实例的传出流量与特定标记身份相关联,从而使代理能够识别工作负载并强制执行安全政策规则。

    示例:假设您有一个名为 internal-tool 的虚拟机实例。您可以使用 gcloud resource-manager tags bindings create 命令restricted 标记值附加到 internal-tool。 通过分配此标记,您的代理可以识别源自 internal-tool 虚拟机实例的流量。

    # Attach the "restricted" tag to a specific VM instance
    
    
    gcloud resource-manager tags bindings create \
        --parent="//[compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/internal-tool](https://compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/internal-tool)" \
        --tag-value="tagValues/987654321"
    

创建安全 Web 代理规则

控制台

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

    前往“SWP 政策”页面

  2. 点击您的政策名称,例如 myswppolicy

  3. 点击 添加规则

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

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

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

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

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

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

      • 已启用:在安全 Web 代理实例上强制执行该规则。
      • 已停用:不在安全 Web 代理实例上强制执行相应规则。
    6. 会话匹配部分中,指定您在上一部分中创建的代码的唯一 ID。例如:

      sessionMatcher: "source.matchTag('TAG_VALUE') && host() == 'example.com'"
      

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

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

    8. 点击添加规则

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 文件中:

    sessionMatcher: "source.matchTag('TAG_VALUE') && host() == 'example.com'"
    

    TAG_VALUE 替换为您要允许的标记。确保该标记遵循数字资源标识符格式;例如,tagValues/567890123456

  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
    

测试政策配置

您可以再次测试连接,以验证依赖于资源管理器标记进行身份验证的安全 Web 代理政策是否按预期运行。

如需测试连接,请从与相应 TAG_VALUE 标记相关联的任何虚拟机运行 curl 命令。

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

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

如果一切正常,您会收到 200 OK403 Forbidden 状态代码。这些响应确认了以下关键结果:

  • 基于标记的成功200 OK 状态代码用于验证附加了正确 Resource Manager 标记的虚拟机的流量是否与政策规则匹配,以及是否允许通过代理。经过验证的匹配项可成功建立连接。

  • 基于标记的拒绝403 Forbidden 状态代码用于验证政策是否正确拒绝了来自没有指定标记或标记不正确的虚拟机的流量。此强制执行证明,基于标记的细分和强制执行功能可按预期运行。

后续步骤