对 SaaS 应用的安全访问

本页将指导您完成通过 Chrome 企业进阶版安全网关保护 SaaS 应用的过程。

安全网关通过使用感知情境的访问控制功能来强制执行零信任访问框架,从而对 SaaS 应用提供精确的控制。

对 SaaS 应用的安全访问功能的运作方式

下面简要介绍了安全网关如何保护您的 SaaS 应用:

  1. 客户端浏览器设置会将应用流量路由到安全网关代理。
  2. 安全网关会检查情境感知访问权限政策,以授权客户端(用户和设备)访问。
  3. 如果允许,网关会使用分配给该网关和区域的唯一来源 IP 地址将流量转发到应用。 Google Cloud 您可以使用这些专用源 IP 地址来实现 IP 许可名单规则。

准备工作

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

设置 shell 环境

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

  • 常规参数

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=MY_PROJECT_ID
    APPLICATION_NAME=MY_APPLICATION_NAME
    HOST_NAME=MY_HOST_NAME
    

    替换以下内容:

    • MY_PROJECT_ID:创建安全网关的项目 ID。
    • MY_APPLICATION_NAME:您的 SaaS 应用的名称。例如 github。名称不得超过 63 个字符,可以包含小写字母、数字和连字符。第一个字符应为字母,最后一个字符可以是字母或数字。
    • MY_HOST_NAME:SaaS 应用的主机名。例如 github.com。主机名最多可包含 253 个字符,并且必须采用以下格式之一:

      • 有效的 IPv4 地址
      • 有效的 IPv6 地址
      • 有效的 DNS 名称
      • 星号 (*)
      • 星号 (*) 后跟有效的 DNS 名称
  • 安全网关参数

    SECURITY_GATEWAY_ID=MY_SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME=MY_SECURITY_GATEWAY_DISPLAY_NAME
    

    替换以下内容:

    • MY_SECURITY_GATEWAY_ID:您要创建的安全网关的 ID。ID 最多可包含 63 个字符,可以包含小写字母、数字和连字符。第一个字符应为字母,最后一个字符可以是字母或数字。
    • MY_SECURITY_GATEWAY_DISPLAY_NAME:安全网关的直观易懂的名称。名称不得超过 63 个字符,可以包含任何可打印字符。

创建安全网关

安全网关是建立与应用的安全连接的基本构建块。它会分配专用项目和网络,从而提供隔离和安全性。

如需创建安全网关,请完成以下步骤。

  1. 使用以下示例创建名为 securityGateway.json 的文件。

    {
       "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME",
       "hubs": { "us-central1": {} }
    }
    

    在此示例中,display_name 是安全网关的人类可读显示名称,hubs 表示启用与目标应用的出站连接所需的区域性资源。您可以指定以下区域:

    • 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
  2. 通过调用 Create API 创建安全网关资源。

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d "{ \"name\": \"APPLICATION_NAME\", \"endpoint_matchers\": [{hostname: \"HOST_NAME\"}] }" \
    "https://API/API_VERSION/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications?application_id=APPLICATION_NAME"
    

配置 SaaS 应用

创建安全网关后,您可以配置 SaaS 应用以使用安全网关进行安全访问。

  1. 获取安全网关(含集线器)分配的 IP 地址。

    curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H
    "Content-Type: application/json" \
    "https://API/API_VERSION/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
    

    以下是包含集线器的安全网关的 GET 响应示例。在此示例中,集线器是在 us-central1us-east1 区域中创建的,并且 SaaS 应用应允许响应中返回的所有 IP 地址。

    {
     "securityGateways": [
       {
         "name": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID",
         "createTime": "CREATE_TIME",
         "updateTime": "UPDATE_TIME",
         "displayName": "My security gateway",
         "state": "RUNNING",
         "hubs": {
           "us-central1": {
             "internetGateway": {
               "assignedIps": [
                 "IP_ADDRESS_1",
                 "IP_ADDRESS_2",
                 "IP_ADDRESS_3",
                 "IP_ADDRESS_4",
                 "IP_ADDRESS_5"
               ]
             }
           },
           "us-east1": {
             "internetGateway": {
               "assignedIps": [
                 "IP_ADDRESS_1",
                 "IP_ADDRESS_2",
                 "IP_ADDRESS_3",
                 "IP_ADDRESS_4",
                 "IP_ADDRESS_5"
               ]
             }
           }
         }
       }
     ]
    }
    
  2. 将 IP 地址添加到 SaaS 应用的 IP 许可名单。例如,对于 GitHub 应用,您可以按照以下指南操作:管理组织的允许 IP 地址

创建应用资源

以下信息将引导您完成安全网关应用资源的设置和配置流程。

在 Google Cloud中创建安全网关应用资源

Google Cloud 应用资源是安全网关资源的子资源。通过调用 Create API 创建应用资源。

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d "{ \"name\": \"APPLICATION_NAME\", \"endpoint_matchers\": [{hostname: \"HOST_NAME\"}] }" \
"https://API/API_VERSION/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications?application_id=APPLICATION_NAME"

配置 Google Chrome 代理模式

如需将应用资源的流量路由到安全网关,请在 Google 管理控制台中的 Chrome 设置中应用 PAC 文件,以配置 Chrome。

更新或创建 PAC 文件

  1. 如果您有代理自动配置 (PAC) 文件,请将应用的网域添加到 sites,如以下代码块所示,然后将该文件另存为 .js 文件。

    如果您没有 PAC 文件,请使用以下示例创建 pac_config.js 文件。

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["HOST_NAME"]; // add URLs to match all of your CAG app domains
    
     or (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }
    
  2. 上传文件,以便其可供公开下载。例如,您可以将文件上传到 Cloud Storage,并向所有用户授予存储桶的 Storage Object User 角色,以便他们可以公开下载该文件。

  3. 如需验证上传的文件始终是最新版本,您可以将 Cache-Control 标头设置为 no-cache,以调整其缓存行为。此设置可防止浏览器和中间服务器存储文件的副本,以便 Chrome 始终下载最新版本。

    如需详细了解 Cache-Control 及其对浏览器缓存的影响,请参阅 Cache-Control 标头

  4. 复制上传文件的公开网址。

更新代理模式设置

  1. 前往 Google 管理控制台
  2. 依次点击设备 -> Chrome -> 设置
  3. 选择一个组织部门或群组,然后点击代理模式
  4. 在“代理模式”页面中,选择始终使用以下指定的代理自动配置,然后输入 Cloud Storage 中的 PAC 文件的网址。

配置访问权限政策

如需应用访问权限政策,您可以选择以下两种方式:

  • 安全网关资源:在安全网关一级应用政策,以控制对所有关联应用的访问权限。
  • 单个应用:如需更精细地进行控制,您可以将访问权限政策应用于单个应用。

以下步骤演示了如何在应用级别应用政策。

  1. 创建一个名为 setIamPolicy.json 的 JSON 格式文件,并添加以下内容。

    {
     "policy": {
       object (POLICY)
     }
    }
    

    POLICY 替换为 IAM 允许政策。政策中的 etag 应与有效政策中的 etag 相同,您可以通过调用 getIamPolicy 方法获取该值。

  2. 如需允许特定群组使用安全网关,请向该群组授予 roles/beyondcorp.securityGatewayUser 角色。

    {
     "policy": {
       "version": 3,
       "bindings": [
         {
           "role": "roles/beyondcorp.securityGatewayUser",
           "members": [
                   "group:"
           ]
         }
       ],
       "etag": "AA1jlb"
     }
    }
    

    如需了解政策绑定中的更多标识符(例如 serviceAccountusergroupprincipalprincipalSet),请参阅 IAM 主账号

  3. 通过调用 setIamPolicy API,对 JSON 文件中指定的安全网关强制执行访问权限政策。

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://API/API_VERSION/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_NAME:setIamPolicy"
    

您还可以将访问权限级别作为条件来设置访问权限政策,如下例所示。

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
                "group:"
        ],
        "condition": {
                "expression": "'accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels",
                "title": "Source IP must be in US"
        }
      }
    ],
    "etag": "A1jlb"
  }
}'

安装 Chrome Enterprise Premium 扩展程序

Chrome Enterprise 进阶版扩展程序是安全网关不可或缺的一部分,有助于进行身份验证。为安全网关的所有用户安装该扩展程序。

  1. 前往 Google 管理控制台
  2. 依次点击 Chrome 浏览器 -> 应用和扩展程序
  3. 点击用户和浏览器标签页。
  4. 如需添加 Chrome 扩展程序,请点击 + 按钮。
  5. 搜索 ekajlcmdfcigmdbphhifahdfjbkciflj,然后将其强制安装到组织部门或群组中的所有用户。
  6. 点击已安装的扩展程序,然后前往扩展程序政策字段,并提供以下 JSON 值:

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

最终用户体验

设置完成后,系统会根据应用应用的访问权限政策,授予或拒绝访问受保护 SaaS 应用的最终用户访问权限。

在 Chrome 中访问应用

必须安装 Chrome 企业进阶版扩展程序,才能将流量引导至安全网关。系统会通过网域政策自动安装该扩展程序。

当用户访问您配置的 SaaS 应用时,其流量会通过安全网关,网关会检查用户是否符合访问政策。如果用户通过访问权限政策检查,则会获得对应用的访问权限。

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

后续步骤