对专用 Web 应用的安全访问

本文档介绍了如何设置 Chrome 企业进阶版安全网关,以确保对私有 Web 应用的访问安全。

Chrome 企业进阶版安全网关充当正向代理,可强制执行零信任访问框架,并对哪些人可以访问您的私有 Web 应用进行精细的情境感知控制。

如何安全访问专用 Web 应用

通过建立安全隧道并强制执行情境感知访问权限政策,安全网关可确保专用应用的私密性,并防止其暴露于公共互联网。客户端浏览器配置会将这些应用的流量定向到安全网关代理端点。然后,安全网关会应用相关的访问政策,并在允许的情况下将请求路由到目标应用。

安全网关可帮助保护托管在以下环境中的专用 Web 应用:

  • Google Cloud 项目:安全网关可以直接访问在 Google Cloud VPC 网络中运行的应用。

  • 非Google Cloud (本地数据中心或其他云):您必须先在Google Cloud 上的私有 VPC 网络与非Google Cloud 网络之间建立连接。这通常通过 Cloud VPN 或 Cloud Interconnect 完成。然后,安全网关会使用该连接将流量发送到您的专用 VPC 网络,后者会将其路由到非Google Cloud 环境。

所需的角色

请让管理员授予以下角色:

详细了解 Identity and Access Management (IAM) 角色

准备工作

在设置安全网关之前,请确认您已具备以下条件:

设置 shell 环境

为了简化设置流程并与安全网关 API 进行交互,请在工作 shell 中定义以下环境变量。

  • 常规参数
    PROJECT_ID=PROJECT_ID
          

    替换以下内容:

    • PROJECT_ID:创建安全网关的项目的 ID。
  • 安全网关参数
    SECURITY_GATEWAY_ID=SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="SECURITY_GATEWAY_DISPLAY_NAME"
          

    替换以下内容:

    • SECURITY_GATEWAY_ID:要创建的安全网关的 ID。ID 最多可包含 63 个字符,并且可以包含小写字母、数字和连字符。第一个字符必须是字母,最后一个字符可以是字母或数字。
    • SECURITY_GATEWAY_DISPLAY_NAME:安全网关的人类可读名称。名称不得超过 63 个字符,并且可以包含可打印的字符。

创建安全网关

Chrome 企业进阶版安全网关是建立与应用的安全连接的基本构建块。

控制台

如需创建安全网关,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往安全网关页面。
    前往安全网关
  2. 选择要创建安全网关的项目。
  3. 如需创建安全网关,请点击创建新网关,然后等待网关创建过程完成。您可以在 Google Cloud 控制台的通知部分跟踪进度。

gcloud

如需使用 gcloud 创建安全网关,请运行以下命令:

gcloud beyondcorp security-gateways create SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --display-name="SECURITY_GATEWAY_DISPLAY_NAME" \
    --service-discovery={}
      

REST

如需使用 REST API 创建安全网关,请运行以下命令:

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d '{ "display_name": "SECURITY_GATEWAY_DISPLAY_NAME", "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways?security_gateway_id=SECURITY_GATEWAY_ID"
      

配置专用 Web 应用

在安全网关中定义特定应用资源之前,您必须配置必要的权限和网络设置,以实现连接和适当的路由。

向服务账号授予权限

为了成功将流量发送到您的 VPC 网络,安全网关需要其委托的服务账号获得某些 IAM 权限。这样做可让安全网关访问您的私有应用,无论这些应用是托管在 Google Cloud VPC 中,还是托管在通过 Cloud VPN 或 Cloud Interconnect 连接的非Google Cloud 环境中。

如需向服务账号授予权限,请执行以下操作:

  1. 获取安全网关的详细信息,以确定委托服务账号电子邮件地址。电子邮件地址位于响应的 delegatingServiceAccount 字段中。

    gcloud

    gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
        --project=PROJECT_ID \
        --location=global
                   

    REST

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
                   
  2. 为服务账号和目标 VPC 项目设置环境变量。如需获取服务账号电子邮件地址,您可以使用以下命令:
    DELEGATING_SERVICE_ACCOUNT=`gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID --project=PROJECT_ID --location=global --format="value(delegatingServiceAccount)"`
          
  3. 向您的私有 VPC 项目中的委托服务账号授予 roles/beyondcorp.upstreamAccess IAM 角色。
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
        --role=roles/beyondcorp.upstreamAccess \
        --member=serviceAccount:DELEGATING_SERVICE_ACCOUNT
        
    PRIVATE_VPC_PROJECT_ID 替换为部署私有 Web 应用或配置 Cloud VPN/Interconnect 的 VPC 网络的项目 ID。

授予角色后,请等待大约两分钟,让 Identity and Access Management 政策生效。

配置网络路由和防火墙规则

如需允许来自安全网关的流量到达您的专用 Web 应用,请配置防火墙规则、网络路由和 DNS 设置。

Google Cloud中应用的防火墙规则

如果您的私有 Web 应用托管在 Google Cloud VPC 网络中,例如在 Compute Engine 虚拟机上、具有内部 IP 的 Google Kubernetes Engine 服务上,或者在内部 TCP/UDP 负载均衡器后面,请配置Google Cloud VPC 防火墙规则。这允许来自安全网关 IP 范围 136.124.16.0/20 的入站 TCP 流量。

gcloud

如需使用 gcloud 创建防火墙规则,请运行以下命令:

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
   --project=PRIVATE_VPC_PROJECT_ID \
   --network=NETWORK_NAME \
   --allow=tcp \
   --source-ranges=136.124.16.0/20
      

替换以下内容:

  • FIREWALL_RULE_NAME:防火墙规则的名称。
  • PRIVATE_VPC_PROJECT_ID:托管您的 VPC 网络的项目的 ID。
  • NETWORK_NAME:托管应用的 VPC 网络的名称。

非Google Cloud 环境中应用的防火墙规则

如果您的私有 Web 应用位于本地数据中心或其他云提供商的网络中,并且使用 Cloud VPN 或 Cloud Interconnect 连接到您的 Google CloudVPC,请在本地防火墙或其他云环境中的等效网络安全控制措施(例如安全组和网络 ACL)中配置防火墙规则。这允许来自安全网关 IP 范围 136.124.16.0/20 的入站 TCP 流量。

配置从非Google Cloud 环境到安全网关的路由

为了便于在非Google Cloud 环境(例如本地或其他云)中托管的私有应用进行双向通信,您的外部网络必须创建一条返回路径,指向以下安全网关 IP 范围:136.124.16.0/20

验证您的专用网络是否可以通过 Cloud VPN 或 Cloud Interconnect 访问安全网关 IP 范围:

  • 动态路由:如果您使用动态路由(例如将边界网关协议 [BGP] 与 Cloud Router 结合使用),请验证 Cloud Router 是否 Google Cloud 明确向本地 BGP 设备通告安全网关 IP 范围。虽然 BGP 会动态交换许多路由,但安全网关 IP 范围需要明确通告。

    gcloud

    如需检查来源范围是否已通告,请运行以下命令:

    gcloud compute routers list-bgp-routes ROUTER_NAME \
    --peer=PEER_NAME \
    --region=REGION \
    --project=PROJECT_ID \
    --route-direction=OUTBOUND \
    --address-family=IPV4 \
    --destination-range=136.124.16.0/20
          

    替换以下内容:

    • ROUTER_NAME:Cloud Router 的名称。
    • PEER_NAME:您的 BGP 对等体的名称。
    • REGION:路由器所在的区域。
    • PROJECT_ID:包含路由器的项目的 ID。
  • 静态路由:如果您使用静态路由,则必须在本地网络设备(例如路由器或防火墙)上手动为每个安全网关 IP 范围添加路由。这些静态路由必须指定,发往安全网关 IP 范围的流量必须通过 Cloud VPN 或 Cloud Interconnect 连接发送。

    使用静态路由时,Cloud VPN 必须位于以下受支持的区域之一:

    • africa-south1
    • asia-east1
    • asia-south1
    • asia-south2
    • asia-southeast1
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west8
    • europe-west9
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-west1

用于安全网关专用主机名解析的 DNS 配置

为了让安全网关解析专用应用主机名,您的Google Cloud VPC 网络必须能够使用 Cloud DNS 解析主机名。具体的 Cloud DNS 配置取决于您的专用 DNS 记录的权威托管位置:

  • Google Cloud 中使用 Cloud DNS 专用可用区的应用:如果您的专用应用托管在 Google Cloud 中,并且其 DNS 记录在与您的 VPC 网络相关联的 Cloud DNS 专用可用区中进行管理,请验证这些可用区是否已正确配置且可访问。安全网关使用 VPC 现有的 Cloud DNS 解析功能。

  • 位于非Google Cloud 环境中或使用外部 DNS 服务器的应用:如果您的私有应用位于非Google Cloud环境(本地或其他云)中,或者其 DNS 记录由 VPC 的 Cloud DNS 专用区域之外的 DNS 服务器管理,您必须配置 Cloud DNS 以转发对这些私有网域的查询。这通常需要在 VPC 内创建 Cloud DNS 转发可用区。这些可用区会将针对指定专用网域的 DNS 查询定向到您的权威专用 DNS 服务器,例如本地或其他云。

如需详细了解 DNS 配置,请参阅创建转发可用区

创建应用资源

如需提供对专用 Web 应用的访问权限,您必须通过创建应用资源在安全网关框架内建立应用。此资源定义了安全网关如何识别应用的流量(基于主机名)以及将该流量路由到何处。

  1. 运行以下命令,设置所需的环境变量:
       APPLICATION_ID=APPLICATION_ID
       APP_DISPLAY_NAME="APP_DISPLAY_NAME"
       HOST_NAME=HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=PRIVATE_NETWORK_RESOURCE_NAME
       
    替换以下内容:
    • APPLICATION_ID:应用资源的唯一 ID。
    • APP_DISPLAY_NAME:要显示的简单易懂的名称。
    • HOST_NAME:用户访问的主主机名(例如 private.local)。
    • PRIVATE_NETWORK_RESOURCE_NAME:VPC 网络的完整资源名称(例如 projects/my-project/global/networks/my-network)。
  2. 创建应用资源。

    控制台

    如需使用 Google Cloud 控制台创建应用资源,请执行以下操作:

    1. 在 Google Cloud 控制台中,前往安全网关页面。
      前往安全网关
    2. 如需添加应用,请点击添加应用
    3. 选择应用类型:专用应用
    4. 输入申请详细信息:
      • 应用名称:输入一个名称,例如 GitHub
      • 网域匹配器:输入以逗号分隔列表的网域模式,以通过安全网关进行路由。以 domain:port 格式添加端口。允许使用通配符 (*)。例如:github.com:443
    5. 配置 VPC 网络:
      • 位于当前项目中:如果您的 VPC 网络位于当前项目中,请从下拉菜单中选择该 VPC 网络。
      • 在其他项目中:如果您的 VPC 网络位于其他 Google Cloud 项目中,请指定 VPC 网络的完整资源名称,例如 projects/my-project/global/networks/my-network
    6. 可选:定义出站政策:从下拉菜单中选择一个或多个 Google Cloud 区域。
    7. 可选:定义访问权限政策:选择 Access Context Manager 访问权限政策。在本指南中,您可以跳过此步骤。
    8. 如需创建应用资源,请点击创建

    gcloud

    如需使用 gcloud 创建应用资源,请运行以下命令:

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME"
            

    如需指定出站流量区域(例如,在使用静态路由时),请添加 --egress-regions 标志:

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME",egressPolicy=regions=us-central1
            

    us-central1 替换为与您的区域静态路由设置一致的 Google Cloud 区域(例如 europe-west1asia-northeast1)。如果您没有特定的区域静态路由要求,可以从配置中省略出站政策。

    REST

    如需使用该 API 创建应用资源,请完成以下步骤:

    1. 创建一个名为 application.json 的文件。

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      如需指定出站流量区域(例如,在使用静态路由时),请向上游配置添加 egress_policy

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      us-central1 替换为与您的区域静态路由设置一致的 Google Cloud 区域(例如 europe-west1asia-northeast1)。如果您没有特定的区域静态路由要求,可以从配置中省略出站政策。

    2. 调用 Create API 方法。

      curl \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -X POST \
          -d @application.json \
          "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications?application_id=APPLICATION_ID"
                

配置访问权限政策

您可以应用访问权限政策,以在应用级控制访问权限。如果未配置任何访问权限政策,则默认情况下会拒绝访问相应应用。

控制台

为多个应用创建政策

如需配置访问权限政策,请执行以下操作:

  1. 如需创建适用于与安全网关关联的多个应用的政策,请前往政策页面。
    前往“政策”
  2. 如需向应用添加访问权限政策,请点击创建政策
  3. 从下拉列表中,选择您希望政策应用到的应用。
  4. 向政策添加主账号:

    主账号可以是用户、群组、网域或服务账号。系统会根据您分配的访问权限级别向这些主账号授予或拒绝访问权限。

    1. 如需添加主账号,请点击添加主账号
    2. 主账号字段中,输入用户、群组、服务账号的电子邮件地址或网域名。
    3. 访问权限级别下拉菜单中,选择一个或多个预定义的情境感知访问权限级别。只有当主账号满足所选访问权限级别的条件时,系统才会授予其访问权限。

    如需添加更多主账号,请再次点击添加主账号,然后重复执行上述子步骤。

    您可以在 Access Context Manager 中创建和管理访问权限级别。

  5. 如需将政策应用于应用,请点击创建政策

修改应用级访问权限政策

  1. 如需修改单个应用的政策,请前往应用页面。
    前往“应用”
  2. 如需查找要修改的应用,请执行以下操作:
    1. 应用列表中,搜索要修改的应用。
    2. 如需查看应用详情,请点击更多操作菜单 (),然后选择查看详情
  3. 如需修改申请,请点击修改
  4. 向政策添加主账号:

    主账号可以是用户、群组、网域或服务账号。系统会根据您分配的访问权限级别向这些主账号授予或拒绝访问权限。

    1. 如需添加主账号,请点击添加主账号
    2. 主账号字段中,输入用户、群组、服务账号的电子邮件地址或网域名。
    3. 访问权限级别下拉列表中,选择一个或多个预定义的情境感知访问权限级别。只有当主账号满足所选访问权限级别的条件时,系统才会授予其访问权限。

    如需添加更多主账号,请再次点击添加主账号,然后重复执行上述子步骤。

    您可以在 Access Context Manager 中创建和管理访问权限级别。

  5. 如需将政策应用于应用,请点击保存

gcloud

添加服务发现网关级绑定

在授予用户应用访问权限之前,请确保用户在安全网关级别拥有服务发现权限。

gcloud beyondcorp security-gateways add-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

替换以下内容:

  • SECURITY_GATEWAY_ID:安全网关的 ID
  • PROJECT_ID:配置了安全网关的项目的 ID
  • MEMBER:您要向其分配 Service Discovery 角色的用户、群组或服务账号。如需了解详情,请参阅 IAM 主账号

添加应用级绑定

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

替换以下内容:

  • APPLICATION_ID:应用资源的 ID
  • SECURITY_GATEWAY_ID:安全网关的 ID
  • PROJECT_ID:配置了安全网关的项目的 ID
  • MEMBER:您要向其分配 Service Discovery 角色的用户、群组或服务账号。如需了解详情,请参阅 IAM 主账号

添加条件绑定

您还可以添加带有条件的绑定。条件用于指定要求,例如用户的 IP 地址来自特定位置。(访问权限级别可以在组织级访问权限政策或范围限定的访问权限政策中定义。)

以下示例命令仅在源 IP 地址位于指定访问权限级别内时授予访问权限:

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

移除服务发现网关级绑定

在安全网关级别撤消用户的服务发现权限。

gcloud beyondcorp security-gateways remove-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

替换以下内容:

  • SECURITY_GATEWAY_ID:安全网关的 ID
  • PROJECT_ID:配置了安全网关的项目的 ID
  • MEMBER:您要从中移除“服务发现”角色的用户、群组或服务账号。如需了解详情,请参阅 IAM 主账号

移除应用级绑定

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

替换以下内容:

  • APPLICATION_ID:应用资源的 ID
  • SECURITY_GATEWAY_ID:安全网关的 ID
  • PROJECT_ID:配置了安全网关的项目的 ID
  • MEMBER:您要移除“服务发现”角色的用户、群组或服务账号。如需了解详情,请参阅 IAM 主账号

移除条件绑定

您还可以移除具有条件的绑定。条件用于指定要求,例如用户的 IP 地址来自特定位置。(访问权限级别可以在组织级访问权限政策或范围限定的访问权限政策中定义。)

以下示例命令会移除具有指定访问权限级别的条件绑定:

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

REST

安全地更新访问权限政策

setIamPolicy 命令会将整个现有政策替换为您提供的政策。为避免意外移除现有权限,我们建议您使用以下“读取-修改-写入”模式。此模式有助于防止意外移除现有权限。

  1. 读取:将当前访问政策保存到文件。
  2. 修改:在本地修改政策文件,以添加或更改权限。
  3. 写入:应用更新后的政策文件。

设置服务发现网关级政策

如需授予服务发现权限,您必须在安全网关上设置访问权限政策,而不是在单个应用上设置。这遵循相同的“读取-修改-写入”模式。

检索当前政策并将其保存到名为 gateway_policy.json 的文件中。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:getIamPolicy" > gateway_policy.json
  

接下来,在文本编辑器中打开 gateway_policy.json 文件,并向 roles/beyondcorp.serviceDiscoveryUser 角色的 members 列表中添加所需的主账号,类似于应用级修改。

gateway_policy.json 文件类似于以下示例:

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.serviceDiscoveryUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
  

您还可以在政策绑定中添加其他类型的成员,例如 serviceAccountusergroupprincipalprincipalSet。如需了解详情,请参阅 IAM 主账号

应用更新后的政策:

jq '{policy: .}' gateway_policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:setIamPolicy"
  

设置应用级访问权限政策

获取当前政策

检索当前政策。如果多位管理员同时进行更改,etag 字段可防止发生冲突的更新。

以下命令会检索政策并将其保存到名为 policy.json 的文件中。

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:getIamPolicy" > policy.json
  

替换以下内容:

  • PROJECT_ID:配置了安全网关的项目的 ID
  • SECURITY_GATEWAY_ID:安全网关的 ID
  • APPLICATION_ID:应用资源的 ID

该命令会创建一个包含当前政策的 policy.json 文件。

修改政策文件

如需向群组授予使用安全网关的权限,请执行以下操作:

  1. 通过文本编辑器打开 policy.json 文件。
  2. 将该群组添加到 roles/beyondcorp.securityGatewayUser 角色的 members 列表中。

policy.json 文件类似于以下示例:

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
      

如需添加其他组,请向 members 数组添加新条目。在前面的条目后添加一个逗号。 以下示例添加了 new-group@example.com

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:existing-group@example.com",
        "group:new-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
    

您还可以在政策绑定中添加其他类型的成员,例如 serviceAccountusergroupprincipalprincipalSet。如需了解详情,请参阅 IAM 主账号

应用更新后的政策

修改并保存 policy.json 文件后,使用 setIamPolicy 命令将其应用到资源。此命令使用文件中的 etag 来确保您更新的是正确的版本。

jq '{policy: .}' policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:setIamPolicy"
  

替换以下内容:

  • PROJECT_ID:配置了安全网关的项目的 ID
  • SECURITY_GATEWAY_ID:安全网关的 ID
  • APPLICATION_ID:应用资源的 ID

添加条件访问权限政策

您还可以设置带条件的访问权限政策。条件用于指定要求,例如用户的 IP 地址来自特定位置。(访问权限级别可以在组织级访问权限政策或范围限定的访问权限政策中定义。)

以下示例政策仅在来源 IP 地址位于指定访问权限级别内时授予访问权限:

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:group@example.com"
      ],
      "condition": {
        "expression": "request.auth.access_levels.contains('accessPolicies/1234567890/accessLevels/in_us')",
        "title": "Source IP must be in US"
      }
    }
  ],
  "etag": "BwXN8_d-bOM="
}
  

如需应用此政策,请按照前面所述的步骤操作。

利用情境感知访问权限增强安全性

为了进一步增强安全性,并确保只有受管理的 Google Chrome 实例可以通过安全网关访问您的 Web 应用,我们建议您添加情境感知访问权限 (CAA) 规则。此规则用于验证用户的 Chrome 个人资料是否受管理,从而防止非受管浏览器或恶意浏览器可能造成的滥用。

注意:此功能需要安装和设置端点验证扩展程序

您可以通过向 Access Context Manager 自定义访问权限级别添加条件来实现此目的。以下是一个您可以调整的条件示例:

  device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED
  

如需详细了解如何配置、检查和管理此状态,请参阅 Chrome 浏览器属性

安装 Chrome 企业进阶版扩展程序

Chrome 企业进阶版扩展程序是安全网关不可或缺的一部分,可帮助进行身份验证。为安全网关的所有用户安装扩展程序。如需了解如何部署扩展程序,请参阅查看和配置应用和扩展程序。如需安装 Chrome 企业进阶版扩展程序,请执行以下操作:

  1. 前往 Google 管理控制台
  2. 依次点击 Chrome 浏览器 > 应用和扩展程序
  3. 点击用户和浏览器标签页。
  4. 如需添加 Chrome 扩展程序,请点击 + 按钮,然后选择按 ID 添加 Chrome 应用或扩展程序
  5. 使用以下 ID 搜索安全企业浏览器扩展程序,然后将组织部门或群组中所有用户的安装政策设置为强制安装

    ekajlcmdfcigmdbphhifahdfjbkciflj
  6. 点击已安装的扩展程序,然后在扩展程序政策字段中输入以下 JSON 值:

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" },
          "serviceDiscovery": { "routes": {} }
        }
      }
    }

    请替换以下内容:

    • PROJECT_ID:配置了安全网关的项目的 ID
    • SECURITY_GATEWAY_ID:安全网关的 ID

  7. 如需保存配置,请点击保存

旧版 PAC 文件设置

启用后,服务发现功能可让 Chrome 浏览器客户端自动检测流量并通过安全网关将流量路由到您配置的应用,从而无需使用 PAC 文件进行手动路由配置。

如果您的安全网关未启用服务发现,则表示您使用的是旧版设置。您需要配置 PAC 文件,以控制 Chrome 浏览器客户端上的路由。

如需检查您是否采用的是旧版设置,请使用以下命令查看服务发现是否已启用:

gcloud

gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global | grep -i "serviceDiscovery"
      

REST

curl --silent \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" | grep -i "serviceDiscovery"
      

如果该命令未返回任何输出,则表示您的网关使用的是旧版设置。对于使用旧版设置的网关,路由通过使用托管的 PAC 文件来处理。

第 1 步:创建并托管 PAC 文件

  1. 创建一个名为 pac_config.js 的文件,其中包含以下 JavaScript 代码,并将 HOST_NAME 替换为您的应用网域(例如 myapp.example.com):

    function FindProxyForURL(url, host) {
      const PROXY = "HTTPS via.prod.securegateway.goog:443";
      const sites = ["HOST_NAME"];
    
      for (const site of sites) {
        if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
          return PROXY;
        }
      }
      return 'DIRECT';
    }
  2. 将 PAC 文件上传到托管服务(例如 Cloud Storage 存储桶)。

    • 确保文件可公开下载。
    • 将 HTTP 标头 Cache-Control 设置为 no-cache,以便浏览器始终获取最新的路由规则。
  3. 复制已上传 PAC 文件的公开网址。

第 2 步:在 Google 管理控制台中应用 PAC 文件

  1. 前往 Google 管理控制台
  2. 依次前往设备 > Chrome > 设置
  3. 选择您的组织部门或群组,然后点击代理模式
  4. 代理模式下,选择始终使用以下指定的代理自动配置
  5. 在提供的字段中输入托管 PAC 文件的公开网址。
  6. 点击保存

第 3 步:配置 Chrome 企业进阶版扩展程序

扩展程序需要处理身份验证。此扩展政策与标准配置不同,因为它排除了 serviceDiscovery 块。

  1. Google 管理控制台中,依次点击 Chrome 浏览器 > 应用和扩展程序
  2. 前往用户和浏览器标签页,确保已添加并强制执行安全企业浏览器扩展程序 (ekajlcmdfcigmdbphhifahdfjbkciflj)。
  3. 点击相应扩展程序,然后在扩展程序政策字段中输入以下 JSON 值:

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": {
            "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
          }
        }
      }
    }
  4. 点击保存

过渡到服务发现设置

如需将旧版安全网关从 PAC 文件设置过渡到较新的服务发现设置,您必须手动启用该功能并更新配置。

  1. 在安全网关上启用服务发现:更新现有网关以启用服务发现。

    gcloud

    gcloud beyondcorp security-gateways update SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --service-discovery={}
          

    REST

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{ "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID?updateMask=service_discovery"
          
  2. 设置网关级访问权限政策:在网关级向用户授予 roles/beyondcorp.serviceDiscoveryUser 角色,以便他们可以使用服务发现。按照添加服务发现网关级绑定部分中的说明操作。

  3. 更新 Chrome 企业进阶版扩展程序配置:按照安装 Chrome 企业进阶版扩展程序部分中的说明更新扩展程序政策。新的 JSON 配置必须包含 "serviceDiscovery": { "routes": {} } 块。

  4. 移除旧版 PAC 文件:服务发现功能处于有效状态后,不再需要旧版 PAC 文件。

    1. Google 管理控制台中,依次前往设备 > Chrome > 设置 > 用户和浏览器设置 > 网络
    2. 找到代理模式设置。
    3. 移除代理自动配置 (PAC) 网址,或将设置从始终使用以下指定的代理自动配置切换到适合您网络的模式,例如允许用户配置
    4. 点击保存

最终用户体验

设置完成后,访问受保护的 SaaS 应用的最终用户将根据应用于该应用的访问权限政策获得或被拒绝访问权限。

在 Chrome 中访问应用

Chrome 企业进阶版扩展程序是必需的,用于将流量定向到安全网关。该扩展程序负责处理用户与安全网关之间的身份验证。该扩展程序通过网域政策自动安装。

当用户访问您配置的 SaaS 应用时,其流量会通过安全网关,安全网关会检查用户是否满足访问政策。如果用户通过访问权限政策检查,则会被授予应用访问权限。

当授权政策拒绝浏览器访问应用时,用户会收到 Access denied 消息。

后续步骤