本文档介绍如何设置 Chrome Enterprise Premium 安全网关,以确保对私有 Web 应用的访问安全。
Chrome 企业进阶版安全网关充当正向代理,可强制执行零信任访问框架,并提供精细的情境感知控制,以确定哪些用户可以访问您的专用 Web 应用。
如何确保对专用 Web 应用的访问安全
通过建立安全隧道并强制执行情境感知访问政策,安全网关可确保专用应用保持私密状态,并免受公共互联网的侵扰。客户端浏览器配置会将这些应用的流量定向到安全网关代理端点。然后,安全网关会应用相关的访问权限政策,并在允许的情况下将请求路由到目标应用。
安全网关可以保护托管在以下环境中的专用 Web 应用:
Google Cloud 项目:安全网关可直接访问在 Google Cloud VPC 网络中运行的应用。
非Google Cloud (本地数据中心或其他云):您必须先在 Google Cloud 上的私有 VPC 网络与非Google Cloud 网络之间建立连接。这通常使用 Cloud VPN 或 Cloud Interconnect 完成。然后,安全网关使用该连接将流量发送到您的专用 VPC 网络,后者再将流量路由到非Google Cloud 环境。
准备工作
在设置安全网关之前,请确认您已具备以下条件:
- Chrome 企业进阶版许可
- 使用管理员账号访问 Google 管理控制台
- 已分配结算账号且已启用以下 API 的 Google Cloud 项目: BeyondCorp API
为设置相关事宜的管理员授予以下 Identity and Access Management (IAM) 角色:项目级:Cloud BeyondCorp 管理员 (
beyondcorp.admin
)。对于非Google Cloud 环境中的私有应用,需要在Google Cloud 环境与应用所在的非Google Cloud 环境之间建立 Cloud VPN 或 Cloud Interconnect 连接。如需详细了解如何设置网络连接,请参阅以下资源:
设置 shell 环境
为了简化设置流程并与安全网关 API 进行交互,请在工作 shell 中定义以下环境变量。
常规参数
API="beyondcorp.googleapis.com" API_VERSION=v1 PROJECT_ID=MY_PROJECT_ID
替换以下内容:
- MY_PROJECT_ID:创建安全网关的项目的 ID。
安全网关参数
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 企业进阶版安全网关是建立与应用的安全连接的基本构建块。它会分配专用项目和网络,从而提供隔离和安全性。
如需创建安全网关,请完成以下步骤。
使用以下示例创建一个名为
securityGateway.json
的文件。{ "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME", }
通过调用
Create
API 创建安全的网关资源。curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -X POST \ -d @securityGateway.json \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
配置专用 Web 应用
在安全网关中定义特定应用资源之前,您必须配置必要的权限和网络设置,以实现连接和适当的路由。
向服务账号授予权限
为了使安全网关能够成功将流量发送到您的 VPC 网络,需要向其委托的服务账号授予某些 IAM 权限。这样一来,安全网关便可访问您的私有应用,无论这些应用是托管在 Google Cloud VPC 中,还是托管在通过 Cloud VPN 或 Cloud Interconnect 连接的非Google Cloud 环境中。
确定委托服务账号电子邮件地址。此电子邮件地址位于安全网关资源的
delegatingServiceAccount
字段中。{ "name": "projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}", "createTime": "2024-10-28T20:46:50.949740776Z", "updateTime": "2024-10-29T18:41:18.520661431Z", "state": "RUNNING", "delegatingServiceAccount": "security-gateway@my-gateway-service-account.iam.gserviceaccount.com" }
为服务账号和目标 VPC 项目设置环境变量。
DELEGATING_SERVICE_ACCOUNT="security-gateway@my-gateway-service-account.iam.gserviceaccount.com" # Replace with actual value
向您的专用 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 范围(34.158.8.0/21
和 136.124.16.0/20
)的入站 TCP 流量。
非Google Cloud 环境中应用的防火墙规则
如果您的私有 Web 应用位于本地数据中心或其他云服务提供商的网络中,并且使用 Cloud VPN 或 Cloud Interconnect 连接到您的 Google CloudVPC,请在本地防火墙或其他云环境中的等效网络安全控制措施(例如安全组和网络 ACL)中配置防火墙规则。这允许来自安全网关 IP 范围的入站 TCP 流量。
配置从非Google Cloud 环境到安全网关的路由
为了在保护非Google Cloud 环境(例如本地或其他云)中托管的私有应用时实现双向通信,您的外部网络必须创建返回路径,指向以下安全网关 IP 地址:34.158.8.0/21
和 136.124.16.0/20
。
验证您的专用网络是否可以通过 Cloud VPN 或 Cloud Interconnect 访问安全网关 IP 范围:
动态路由:如果您使用动态路由(例如将边界网关协议 [BGP] 与 Cloud Router 结合使用),请验证 Cloud Router 是否在Google Cloud 中明确向本地 BGP 设备通告安全网关 IP 范围。虽然 BGP 可以动态交换许多路由,但安全网关 IP 地址范围需要明确通告。
静态路由:如果您使用静态路由,则必须在本地网络设备(例如路由器或防火墙)上手动为每个安全网关 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 应用的访问权限,您必须通过创建应用资源在安全网关框架内建立该应用。此资源定义了安全网关如何识别应用的流量(基于主机名)以及将该流量路由到何处。
运行以下命令,设置所需的环境变量:
APPLICATION_ID=MY_APPLICATION_ID APP_DISPLAY_NAME="MY_APP_DISPLAY_NAME"
替换以下内容:
- MY_APPLICATION_ID:应用资源的唯一 ID。
- MY_APP_DISPLAY_NAME:要显示的简单易懂的名称。
使用以下示例创建一个名为
application.json
的 JSON 文件。{ "display_name": "MY_APP_DISPLAY_NAME", "endpoint_matchers": [ {"hostname": "MY_HOST_NAME"} ], "upstreams": [{ "network": { "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME" } }] }
将 MY_HOST_NAME 替换为用户访问的主机名。 例如
private.local
。主机名不得超过 253 个字符,并且必须遵循以下格式之一:- 有效的 IPv4 地址
- 有效的 IPv6 地址
- 有效的 DNS 名称
- 星号 (*)
- 星号 (*) 后跟有效的 DNS 名称
将 MY_PRIVATE_NETWORK_RESOURCE_NAME 替换为 VPC 网络的完整资源名称,您的应用托管在该 VPC 网络中,或者该 VPC 网络连接到您的非Google Cloud 环境。网络名称应采用
projects/{project}/global/networks/{network}
格式可选:指定出站流量区域。
在某些网络配置中,您可能需要控制安全网关流量退出到私有应用的Google Cloud 区域。例如,如果您通过 Cloud VPN 或 Cloud Interconnect 使用静态路由,则适用此限制。对于这些配置,您可以为应用的上游配置添加出口政策。此出站政策指示安全网关将来自指定 Google Cloud区域的应用流量路由到您的专用网络。
以下是一个包含
egress_policy
的 JSON 文件示例。{ "display_name": "MY_APP_DISPLAY_NAME", "endpoint_matchers": [ {"hostname": "MY_HOST_NAME"} ], "upstreams": [{ "network": { "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME" }, "egress_policy": { "regions": [ "us-central1" ] } }] }
将
us-central1
替换为与您的区域性静态路由设置一致的 Google Cloud 区域(例如europe-west1
或asia-northeast1
)。如果您没有特定的区域静态路由要求,可以从配置中省略出站政策。通过调用
Create
API 创建应用资源。curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -X POST \ -d @application.json \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
配置 Google Chrome 代理模式
如需通过安全网关路由应用资源的流量,请在 Google 管理控制台的 Chrome 设置中应用 PAC 文件来配置 Chrome。
创建或更新 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 文件。
上传文件,以便公开下载。例如,您可以将文件上传到 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}: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_ID}: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 进阶版扩展程序是安全网关不可或缺的一部分,有助于进行身份验证。为安全网关的所有用户安装扩展程序。如需了解如何部署扩展程序,请参阅查看和配置应用和扩展程序。
- 前往 Google 管理控制台。
- 依次点击 Chrome 浏览器 -> 应用和扩展程序。
- 点击用户和浏览器标签页。
- 如需添加 Chrome 扩展程序,请点击 + 按钮。
- 搜索
ekajlcmdfcigmdbphhifahdfjbkciflj
,然后强制安装到组织部门或群组中的所有用户。 点击已安装的扩展程序,然后前往扩展程序政策字段,并提供以下 JSON 值:
{ "securityGateway": { "Value": { "authentication": {}, "context": { "resource": "projects/MY_PROJECT_ID/locations/global/securityGateways/MY_SECURITY_GATEWAY_ID" } } } }
最终用户体验
设置完成后,访问受保护的 SaaS 应用的最终用户将根据应用于该应用的访问权限政策获得或被拒绝访问权限。
在 Chrome 中访问应用
Chrome 企业进阶版扩展程序是必需的,用于将流量定向到安全网关。该扩展程序负责处理用户与安全网关之间的身份验证。该扩展程序通过网域政策自动安装。
当用户访问您配置的 SaaS 应用时,其流量会通过安全网关,该网关会检查用户是否满足访问政策。如果用户通过访问政策检查,则会被授予应用访问权限。
当授权政策拒绝浏览器访问应用时,用户会收到 Access denied
消息。