对 SaaS 应用的安全访问

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

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

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

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

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

所需的角色

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

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

准备工作

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

限制

Chrome 企业进阶版安全网关存在以下限制:

  • IPv6 连接:Chrome 企业进阶版安全网关不支持使用 IPv6 连接的 SaaS 应用。
  • 作为 SaaS 应用的身份提供方:如果最终用户通过安全网关进行的身份验证依赖于同一 IdP,则不得将身份提供方配置为受安全网关保护的 SaaS 应用。

设置 shell 环境

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

  • 常规参数

    PROJECT_ID=PROJECT_ID
    APPLICATION_ID=APPLICATION_ID
    APPLICATION_DISPLAY_NAME="APPLICATION_DISPLAY_NAME"
    HOST_NAME=HOST_NAME

    替换以下内容:

    • PROJECT_ID:创建安全网关的项目的 ID。
    • APPLICATION_ID:您的应用的 ID,例如 github。名称最多可包含 63 个字符,并且可以包含小写字母、数字和连字符。第一个字符必须是字母,最后一个字符可以是字母或数字。
    • APPLICATION_DISPLAY_NAME:要显示的直观易懂的名称。
    • HOST_NAME:应用的 hostname。例如 github.com。主机名不得超过 253 个字符,并且必须遵循以下格式之一:

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

    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. 如需创建安全网关,请点击创建新网关,然后等待网关创建过程完成。
  4. 您可以在 Google Cloud 控制台的“通知”部分中跟踪进度。
  5. 在创建 SaaS 应用资源之前,我们建议您先创建 SaaS 出站流量 hubhubs 标志表示启用出站连接到目标应用所需的区域级资源。您可以为每个区域配置一个 Hub,每个 Hub 提供两个 IP 地址。一个安全网关最多可包含 20 个 hub。您可以指定以下区域:
    • 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
  6. 在 Google Cloud 控制台中,前往 SaaS 出站流量中心页面。
    前往“SaaS 出站流量 hub”
  7. 选择要为其创建 SaaS 出站流量 hub 的项目。
  8. 如需添加 SaaS 出站流量 hub,请点击添加 SaaS 出站流量 hub
  9. 从下拉列表中,选择要添加出站流量枢纽的区域。如需添加出站流量 hub,请点击添加 SaaS 出站流量 hub 以添加多个 hub。完成后,点击“保存”以创建出站枢纽。

gcloud

如需创建安全网关资源,请运行以下命令。对于 --hubs 标志,请从以下列表中指定一个或多个区域。

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

hubs 标志用于设置启用出站连接到目标应用所需的区域资源。每个区域可以有一个 hub,每个 hub 提供两个 IP 地址。一个安全网关最多可包含 20 个 hub。您可以指定以下区域:

  • 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

REST

如需创建安全网关资源,请调用 Create API 方法,并在请求正文中提供网关详细信息。对于 hubs 标志,请从以下列表中指定一个或多个区域。

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

hubs 标志表示启用出站连接到目标应用所需的区域级资源。每个区域可以有一个 hub,每个 hub 提供两个 IP 地址。一个安全网关最多可包含 20 个 hub。您可以指定以下区域:

  • 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 应用,以使用该安全网关进行安全访问。

控制台

如需配置 SaaS 出站枢纽,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 SaaS 出站流量中心页面。
    前往“SaaS 出站流量 hub”
  2. SaaS 出站流量 hub 页面上,找到列出 hub 的表格。对于您打算使用的每个区域,请复制静态专用出站 IP 列中列出的所有 IP 地址。每个区域提供两个 IP 地址。
  3. 将 IP 地址添加到 SaaS 应用的 IP 许可名单中。例如,对于 GitHub 应用,您可以按照以下指南操作:管理组织的允许 IP 地址

gcloud

如需配置 SaaS 出站枢纽,请执行以下操作:

  1. 获取安全网关为每个 Hub 分配的 IP 地址。为区域分配两个 IP 地址。
  2. gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
        --project=PROJECT_ID \
        --location=global
            

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

    createTime: 'CREATE_TIME'
    displayName: My secure 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'
        
  3. 将 IP 地址添加到 SaaS 应用的 IP 许可名单中。例如,对于 GitHub 应用,您可以按照以下指南操作:管理组织的允许 IP 地址

REST

如需配置 SaaS 出站枢纽,请执行以下操作:

  1. 获取安全网关为每个 Hub 分配的 IP 地址。为区域分配两个 IP 地址。
  2. 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"
            

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

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

创建应用资源

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

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

Google Cloud 应用资源是安全网关资源的子资源。使用 Google Cloud 控制台或调用 Create API 来创建应用资源。

控制台

如需创建 SaaS 应用,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往安全网关页面。
    前往安全网关
  2. 如需创建申请,请点击添加申请
  3. 选择应用类型:公开应用
  4. 如果尚未为此安全网关配置 SaaS 出站流量中心,系统会提示您创建。公开应用需要至少一个 SaaS 出站流量 hub。如需配置 SaaS 出站流量 hub,请点击前往 SaaS 出站流量 hub,然后添加一个或多个区域。
  5. 拥有一个或多个出站枢纽后,点击下一步
  6. 输入申请详细信息:
    • 应用名称:输入一个名称,例如 GitHub
    • 网域匹配器:输入以逗号分隔列表的网域模式,以通过安全网关进行路由。以 domain:port 格式添加端口。允许使用通配符 (*)。例如:github.com:443
  7. 如需配置 SaaS 应用,请点击继续
  8. 将 SaaS 应用配置为允许来自安全网关的流量:
    1. 请仔细记下或复制您所用区域列出的所有 IP 地址。这些 IP 地址专属于您的安全网关。
    2. 登录 SaaS 应用的管理控制台。
    3. 前往用于管理 IP 许可名单的网络设置或安全设置。
    4. 将获取的所有 IP 地址添加到应用的 IP 许可名单中。
  9. 如需添加应用,请点击继续
  10. 可选:定义访问权限政策:选择 Access Context Manager 访问权限政策。在本指南中,您可以跳过此步骤。
  11. 如需创建并保存设置,然后创建应用,请点击创建

gcloud

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

gcloud 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,ports=443"
      

REST

如需使用 REST API 创建 SaaS 应用,请运行以下命令:

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\", ports: 443}] }" \
    "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

安全地更新访问权限政策

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

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

设置服务发现网关级政策

在授予用户应用访问权限之前,请确保用户在安全网关级别拥有服务发现权限。您需要按照相同的“读取-修改-写入”模式设置访问政策。

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

gcloud beta beyondcorp security-gateways get-iam-policy SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global > 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 主账号

应用更新后的政策:

gcloud beta beyondcorp security-gateways set-iam-policy SECURITY_GATEWAY_ID gateway_policy.json \
    --project=PROJECT_ID \
    --location=global
  

设置应用级访问权限政策

获取当前政策

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

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

gcloud beta beyondcorp security-gateways applications get-iam-policy APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global > policy.json
      

替换以下内容:

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

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

修改政策文件

在文本编辑器中打开 policy.json 文件。如需授予某个群组使用安全网关的权限,请将该群组添加到 roles/beyondcorp.sgApplicationUser 角色的 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 来确保您更新的是正确的版本。

gcloud beta beyondcorp security-gateways applications set-iam-policy APPLICATION_ID policy.json \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global
    

替换以下内容:

  • APPLICATION_ID:应用资源的 ID
  • SECURITY_GATEWAY_ID:安全网关的 ID
  • PROJECT_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="
  }

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

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. 在安全网关上启用服务发现:更新现有网关以启用服务发现。

    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 消息。

后续步骤