安全网关通过使用感知情境的访问控制功能来强制执行零信任访问框架,从而对 SaaS 应用提供精确的控制。
对 SaaS 应用的安全访问功能的运作方式
下面简要介绍了安全网关如何保护您的 SaaS 应用:
- 客户端浏览器设置会将应用流量路由到安全网关代理。
- 安全网关会检查情境感知访问权限政策,以授权客户端(用户和设备)访问。
- 如果允许,网关会使用分配给该网关和区域的唯一来源 IP 地址将流量转发到应用。 Google Cloud 您可以使用这些专用源 IP 地址来实现 IP 许可名单规则。
准备工作
在设置安全网关之前,请确认您已具备以下条件:
- Chrome 企业进阶版许可
- 拥有 Google 管理控制台的管理员权限
- Google Cloud 已分配结算账号且启用了以下 API 的项目:
- 向设置相关内容的管理员授予以下 Identity and Access Management (IAM) 角色:项目级:Cloud BeyondCorp Admin (
beyondcorp.admin
)。 - 您要保护的 SaaS 应用。
应用必须支持
IP allowlisting
,才能强制执行 Google 基础架构的安全检查。
设置 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 个字符,可以包含任何可打印字符。
创建安全网关
安全网关是建立与应用的安全连接的基本构建块。它会分配专用项目和网络,从而提供隔离和安全性。
如需创建安全网关,请完成以下步骤。
使用以下示例创建名为
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
通过调用
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 应用以使用安全网关进行安全访问。
获取安全网关(含集线器)分配的 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-central1
和us-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" ] } } } } ] }
将 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 文件
如果您有代理自动配置 (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'; }
上传文件,以便其可供公开下载。例如,您可以将文件上传到 Cloud Storage,并向所有用户授予存储桶的 Storage Object User 角色,以便他们可以公开下载该文件。
如需验证上传的文件始终是最新版本,您可以将
Cache-Control
标头设置为no-cache
,以调整其缓存行为。此设置可防止浏览器和中间服务器存储文件的副本,以便 Chrome 始终下载最新版本。如需详细了解
Cache-Control
及其对浏览器缓存的影响,请参阅 Cache-Control 标头。复制上传文件的公开网址。
更新代理模式设置
- 前往 Google 管理控制台。
- 依次点击设备 -> Chrome -> 设置。
- 选择一个组织部门或群组,然后点击代理模式。
- 在“代理模式”页面中,选择始终使用以下指定的代理自动配置,然后输入 Cloud Storage 中的 PAC 文件的网址。
配置访问权限政策
如需应用访问权限政策,您可以选择以下两种方式:
- 安全网关资源:在安全网关一级应用政策,以控制对所有关联应用的访问权限。
- 单个应用:如需更精细地进行控制,您可以将访问权限政策应用于单个应用。
以下步骤演示了如何在应用级别应用政策。
创建一个名为
setIamPolicy.json
的 JSON 格式文件,并添加以下内容。{ "policy": { object (POLICY) } }
将 POLICY 替换为 IAM 允许政策。政策中的
etag
应与有效政策中的etag
相同,您可以通过调用getIamPolicy
方法获取该值。如需允许特定群组使用安全网关,请向该群组授予
roles/beyondcorp.securityGatewayUser
角色。{ "policy": { "version": 3, "bindings": [ { "role": "roles/beyondcorp.securityGatewayUser", "members": [ "group:
" ] } ], "etag": "AA1jlb" } } 如需了解政策绑定中的更多标识符(例如
serviceAccount
、user
、group
、principal
和principalSet
),请参阅 IAM 主账号。通过调用
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 进阶版扩展程序是安全网关不可或缺的一部分,有助于进行身份验证。为安全网关的所有用户安装该扩展程序。
- 前往 Google 管理控制台。
- 依次点击 Chrome 浏览器 -> 应用和扩展程序。
- 点击用户和浏览器标签页。
- 如需添加 Chrome 扩展程序,请点击 + 按钮。
- 搜索
ekajlcmdfcigmdbphhifahdfjbkciflj
,然后将其强制安装到组织部门或群组中的所有用户。 点击已安装的扩展程序,然后前往扩展程序政策字段,并提供以下 JSON 值:
{ "securityGateway": { "Value": { "authentication": {}, "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" } } } }
最终用户体验
设置完成后,系统会根据应用应用的访问权限政策,授予或拒绝访问受保护 SaaS 应用的最终用户访问权限。
在 Chrome 中访问应用
必须安装 Chrome 企业进阶版扩展程序,才能将流量引导至安全网关。系统会通过网域政策自动安装该扩展程序。
当用户访问您配置的 SaaS 应用时,其流量会通过安全网关,网关会检查用户是否符合访问政策。如果用户通过访问权限政策检查,则会获得对应用的访问权限。
如果授权政策拒绝浏览器访问应用,用户会收到 Access denied
消息。