目录
概述
本文介绍并示范如何利用 Google Cloud VPC Servcie Controls 创建用户访问 GCS 等服务的白名单,规范用户访问时必须使用的账号、IP、地区等,提升数据和业务的安全性。
VPC Service Controls 可帮助您降低 Google Cloud 服务(如 Cloud Storage 和 BigQuery)中发生数据渗漏的风险。您可以使用 VPC Service Controls 创建边界(Perimeter),该边界可保护您明确指定的服务的资源和数据。
边界的访问条件配置(Access Level)可以包括以下元组
● 特定用或服务账号
● IP 网段(公网 IP)
● 国家区域
● 设备状态(需要购买 BeyondCorp Enterprise Premium 账号)
● 其它已定义好的 Access Level
而且,边界可以包含 GCP 内部的项目和 VPC,也可以包含通过 VPN 或者专线相连的外部网络环境,如下图所示。
相关的网络配置可以参考官方文档。
需要注意的是,VPC Service Control 工作的前提是用户必须在 GCP 上创建了组织(Organization)。
配置 IAM 权限
为了完成 VPC Service Control 的相关配置,用户必须有 Access Context Manager 的编辑操作权限。可以用 CLI 命令在 Terminal 或者 Cloud Shell 中对用户赋予相关的角色及权限。同时必须满足用户本身已经拥有组织(Organization)的 IAM 编辑权限。
创建相关权限需要在组织(Organization)层级操作,所以需要或者组织 ID。可以用下面方法在控制台获取。
首先,点击顶部的“项目”下拉列表框。
然后在列表中找到对应的组织,并记录下其数字 ID 。
运行以下命令,注意将组织 ID 和用户名替换成您自己的。
ORG_ID_NUMBER=908296251056 |
创建边界(Perimeter)
边界相当于 GCP 上一个安全区的界限。安全区内是需要做访问保护的资源,比如 Project,VPC network,以及云服务如 GCS 等等。
创建边界需要在组织(Organization)层级操作,所以仍然需要用上面已经配置好权限的组织管理员账号登录控制台。之后在导航栏输入“ VPC Service Controls”,点击进入到其对应的配置页面。如果看到类似以下界面,说明您的项目目前没有创建任何边界,可以点击“ SWITCH TO ORGANIZATION SCOPE ”查看组织下面的边界信息。
接下来,在“ Select an access policy ”下拉列表中选择“ default policy ”(如果没有这个选项,则需要先创建一个 Policy)。然后点击“ NEW PERIMETER ”。
在下面的边界配置中,按照下图示意进行配置,不过要注意把 Perimeter Title 替换成您自己的。
1)Detail 配置。
2)Resource 配置。这里可以点击“ ADD RESOURCES ”添加 GCS 桶所在的项目。
3)Service 配置。这里点击“ ADD SERVICES ”添加 Google Cloud Storage API 。
最后点击“ CREATE PERIMETER ”提交配置。过几分钟后页面刷新可以看到新建的边界出现在列表中。
此时可以测试边界的效果。因为没有创建任何允许访问规则,所以任何访问都默认会被拒绝,包括管理员的访问,比如用如下命令。
PROJECT_ID=eugene-lab-general |
其结果如下,可以看到访问被决绝,并提示是由于 VPC Service Controls 的策略原因。
创建管理员 Access Level(Optional)
目前创建针对特定用户的 Access Level 不能在控制台操作,而需要使用命令行操作。
首先查询我们正在使用的 default policy 的 ID,使用如下命令。
gcloud access-context-manager policies list --organization $ORG_ID_NUMBER |
在得到的输出中,找到如下图红圈中的数字串,即为 default policy 的 ID。
用下面命令,先创建一个用户访问白名单列表,其中加入要允许访问的管理员用户账号。注意这里也可以加入服务账号或者非管理员账号,另外也可以加入其它访问条件如 IP 段等,实现更灵活的配置。然后运行下方的 gcloud 命令创建一个访问规则(Access Level)。注意 policy 的值为上面查到的边界所在的 default policy 的 ID。
cat > access_conditions.yaml << ENDOFFILE |
现在添加上面为管理员创建的访问规则(Access Level)到边界(Perimeter)。在控制台 VPC Service Controls 页面,点击之前创建好的边界。
然后点击“ EDIT PERIMETER ”按钮。在“ Access Levels ”一栏中,选择右边的下拉列表,选中刚刚为管理员创建的访问规则。
现在,可以测试管理员访问的效果。运行如下命令。
gcloud storage buckets create gs://admin-new-bucket-1 --project=$PROJECT_ID --location=$BUCKET_LOCATION |
可以看到结果创建成功,说明访问规则配置有效。
用管理员账号在控制台也可以看到新建的桶。
现在,换成一个非管理员用尝试创建新桶,结果失败,与预期相符。
gcloud storage buckets create gs://eugene-new-bucket-1 --project=$PROJECT_ID --location=$BUCKET_LOCATION |
结果如下,仍然被拒绝访问。
同时,用非管理员登录控制台查看桶列表,也看不到任何桶,说明控制台也拒绝了对 GCS 相关信息的查询。
创建基于 IP 白名单的 Access Level
需要注意的是,基于 IP 白名单的 Access Level 只能支持公网 IPv4 和 IPv6 地址段。如果需要限制私网地址访问,请参考最后一章。
在 Cloud Shell 中运行以下命令获取本地公网 IP。
curl ifconfig.me |
结果类似 34.145.5.187。
点击左边导航栏的 Access Context Manager 菜单项。然后点击“ CREATE ACCESS LEVEL ”按钮。
在配置填写中,参考下面的配置。注意将访问规则(Access Level)的名称以及 IP 段替换成您自己的。
创建完成后,从导航栏跳转到“ VPC Service Controls ”页面,配置之前创建好的边界。并在其 Access Levels 栏目中添加上面为这个用户创建的访问规则。
点击“ SAVE ”,保存生效。
现在,再次用非管理员用户创建新桶,结果成功,符合预期。
配置私有网络访问边界内资源
配置允许 Google Cloud 虚机访问
如果要允许 Google Cloud 上的虚机访问边界内资源,可以通过将虚机所在的 VPC 添加到边界资源中,则 VPC 和其内的虚机都在边界内,可以与边界内受保护的服务如 GCS 等进行访问,如下图所示。
但是,在将 VPC 添加到服务边界内部时需要注意以下几点,特别是如果您的项目使用了 Shared VPC。
● 如果宿主项目不受边界保护,您可以在宿主项目中添加 VPC 网络,以根据同一访问权限政策分隔边界。
● 同一宿主项目中的 VPC 网络必须存在于同一访问权限政策中。
● 您可以将 VPC 网络及其宿主项目添加到同一边界。
● VPC 网络及其宿主项目不得位于不同的边界中。
● 您无法将 VPC 网络添加到多个边界。
● 您不能在边界网桥中使用 VPC 网络。
具体信息可以参考官方文档
配置允许自建数据中心服务器访问
如果要允许自建数据中心的虚机或者物理服务器访问边界内的 GCP 服务,需要首先在自建数据中心网络和 GCP VPC 网络之间建立 VPN 或者专线连接,如下图所示。
在 VPN 或者专线连通之后,自建数据中心网络被 VPC Service Controls 视为 GCP 侧相应 VPC 的延伸,其访问边界内服务的权限与该 VPC 一致。因此,为了允许自建数据中心的某个网段(比如 192.168.0.1/24)内的服务器能访问边界内的 GCP 服务,需要做以下配置。
1. 在自建数据中心侧的路由器上配置自建网段 192.168.0.1/24 通过 BGP 宣告到 GCP 侧的对应网络路由器 169.254.1.1。并确保其它自建数据中心网段不对该路由器宣告。
2. 向 VPC 网络添加自定义静态路由,以便将目的地为 199.36.153.4/30 的流量定向到 default-internet-gateway 作为 Next Hop。即使 default-internet-gateway 用作 Next Hop,流量也会通过 Google 的网络私密地路由到相应 API 或服务。
3. Cloud Router 路由器配置为通过 VPN 隧道通告 199.36.153.4/30 IP 地址范围。流向 Google API 的流量会经由隧道路由到 VPC 网络。
4. VPC 侧和自建数据中心侧的 DNS 配置将 *.googleapis.com(也可以仅配置受边界保护的服务,比如storage.googleapis.com)请求用 CNAME 映射到解析为 199.36.153.4/30 的 restricted.googleapis.com
5. 在 VPC 配置中打开该 VPC 对应子网的 Private Google Access 开关
6. 将该 VPC 添加到边界的 VPC 资源中
配置好之后,自建数据中心的服务器可以通过 VPN 或者专线,以及 Private Google Access,来访问边界内受保护的 GCP 资源。
文章信息
相关推荐
