对 SaaS 应用的安全访问

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

Chrome 企业进阶版安全网关充当前向代理,可强制执行零信任访问框架,并根据情境精细控制哪些用户可以访问您的 SaaS 应用。

如何保障对 SaaS 应用的访问安全

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

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

准备工作

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

限制

Chrome 企业进阶版安全网关存在以下限制:安全网关不支持仅允许 IPv6 连接的 SaaS 应用。

设置 shell 环境

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

  • 常规参数

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=MY_PROJECT_ID
    APPLICATION_ID=MY_APPLICATION_ID
    APPLICATION_DISPLAY_NAME="MY_APPLICATION_DISPLAY_NAME"
    HOST_NAME=MY_HOST_NAME

    替换以下内容:

    • MY_PROJECT_ID:创建安全网关的项目的 ID。
    • MY_APPLICATION_ID:您的应用的 ID,例如 github。名称最多可包含 63 个字符,并且可以包含小写字母、数字和连字符。第一个字符必须是字母,最后一个字符可以是字母或数字。
    • MY_APPLICATION_DISPLAY_NAME:要显示的直观易懂的名称。
    • MY_HOST_NAME:应用的 hostname。例如 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 个字符,并且只能包含可打印的字符。

创建安全网关

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

如需创建安全网关资源,请使用以下方法之一。

gcloud

运行以下命令。对于 --hubs 标志,请指定以下列表中的一个或多个区域。

gcloud beta beyondcorp security-gateways create ${SECURITY_GATEWAY_ID} \
  --project=${PROJECT_ID} \
  --location=global \
  --display-name="MY_SECURITY_GATEWAY_DISPLAY_NAME" \
  --hubs=us-central1
      

REST

在请求正文中包含网关详细信息的情况下,调用 Create API 方法。对于 hubs 对象,请指定以下列表中的一个或多个区域。

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d '{ "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME", "hubs": { "us-central1": {} } }' \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
      

hubs 表示启用出站连接到目标应用所需的区域资源。每个区域可以有一个 hub,每个 hub 提供两个 IP 地址。您可以指定以下区域:

  • 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

配置 SaaS 应用

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

  1. 获取安全网关为每个 Hub 分配的 IP 地址。为一个区域分配两个 IP 地址。

    gcloud

    gcloud beta 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://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
        

    以下是具有 hubs 的安全网关的 GET 响应示例。在此示例中,hubs 是在 us-central1us-east1 区域中创建的,并且响应中返回的所有 IP 地址都必须在 SaaS 应用中获得许可。

    gcloud

    createTime: 'CREATE_TIME'
    displayName: My security gateway
    hubs:
      us-central1:
        internetGateway:
          assignedIps:
          - IP_ADDRESS_1
          - IP_ADDRESS_2
      us-east1:
        internetGateway:
          assignedIps:
          - IP_ADDRESS_1
          - IP_ADDRESS_2
    name: projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}
    state: RUNNING
    updateTime: 'UPDATE_TIME'
        

    REST

    {
      "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",
                ]
              }
            },
            "us-east1": {
              "internetGateway": {
                "assignedIps": [
                  "IP_ADDRESS_1",
                  "IP_ADDRESS_2",
                ]
              }
            }
          }
        }
      ]
    }
        
  2. 将这些 IP 地址添加到 SaaS 应用的 IP 许可名单中。例如,对于 GitHub 应用,您可以按照以下指南操作:管理组织的允许 IP 地址

创建应用资源

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

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

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

gcloud

gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \
  --project=${PROJECT_ID} \
  --security-gateway=${SECURITY_GATEWAY_ID} \
  --location=global \
  --display-name="${APPLICATION_DISPLAY_NAME}" \
  --endpoint-matchers="hostname=${HOST_NAME}"
      

REST

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

配置 Google Chrome 代理模式

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

  1. 创建或更新 PAC 文件。

    • 如果您要创建第一个应用,请使用以下示例 PAC 文件创建 pac_config.js 文件。

    • 如果您要创建第二个或后续应用,请更新现有的 pac_config.js 文件,并将新应用的网域添加到网站数组中,如下面的 PAC 文件示例所示。

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["MY_HOST_NAME"];
    
     for (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }

    如果您使用的是并非专门针对安全网关的现有 PAC 文件,请通过将应用的网域添加到 sites 数组来合并 PAC 文件。

  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}:setIamPolicy"

    如需对应用强制执行访问权限政策,请使用以下命令:

    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 企业进阶版扩展程序

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

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

    {
     "securityGateway": {
       "Value": {
         "authentication": {},
         "context": { "resource": "projects/MY_PROJECT_ID/locations/global/securityGateways/MY_SECURITY_GATEWAY_ID" }
       }
     }
    }

最终用户体验

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

在 Chrome 中访问应用

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

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

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

后续步骤