【Google Cloud】VPC Service Controls 的试运行模式

本文介绍了 VPC 服务控制的试运行模式。

什么是 VPC Service Controls

VPC Service Controls 是 Google Cloud(以前称为 GCP)的一项安全功能。它通过设置一个被称为 边界 的逻辑围栏,防止从内部到外部和从外部到内部的双向意外访问,从而增强对 Google 云各种服务 API 的安全保护。

详情说明如下另请参见

  • VPC Service Controls 解说

试运行模式

试运行模式(试运行配置) 是指在 Google Cloud 上对资源和服务进行评估时,虚拟地应用设定的边界以检查其影响的一种模式。

如果不经过评估就直接应用这些边界,可能会因为潜在的问题而引发意外的访问拒绝等问题。

因此,在使用 VPC Service Controls 功能时,通过试运行模式对边界设置进行适当的评估,然后再将其应用于实际环境,是一种更为稳妥的做法。

  • 参考:服务边界的试运行模式

试运行模式的工作原理

设置为试运行模式的边界是虚拟应用的,因此实际访问并不会被阻止。

然而,在 Cloud Logging 中会记录这些日志。因此,管理员可以通过查看记录的日志来识别并解决潜在的问题,从而将边界设置调整到正确的状态。

  • 参考:试运行模式的优势

试运行模式

概要

构成

在此部分中,我们将通过一个案例来解释如何通过干运行模式(dry run mode)对边界设置进行评估。

假设存在一个用于存储验证项目日志的 BigQuery 数据集,在这种情况下,我们将评估边界设置是否允许来自特定 IP 地址的访问。

设定项目

上述配置使用以下服务

#服务设置目的
1VPC 服务控制边界(Perimeter)周边根据访问条件保护 BigQuery API
2访问上下文管理器访问级别(访问条件)定义上下文(此处为访问源的 IP 地址)

Access Context Manager 访问上下文管理器

访问上下文管理器是 BeyondCorp Enterprise 零信任安全组件之一。它可以定义背景信息(上下文),如设备信息、账户信息和连接状态,这些信息可以与 VPC 服务控件关联。

  • 参考:访问上下文管理器概述
  • 参考:访问级别

设置

权限

要进行以下设置操作,需要按照官方文档为 principal 分配IAM角色。

  • 参考:通过IAM进行访问控制

访问级别

通过访问级别设置,使用Access Context Manager根据特定的IP地址来控制对边界内的BigQuery的访问。

访问级别设置示例

配置方法可参考如下所述的官方文档:

  • 参考:创建基本访问权限级别

边界(试运行模式)

接下来,我们将从 VPC Service Controls 中以干运行模式设置边界。

请按照以下图片所示,在选择试运行模式标签的情况下,点击新建边界

在这里插入图片描述

边界(试运行模式)配置示例

配置方法参考如下所述的官方文档:

  • 参考:创建服务边界

实例解说

评估过程

在完成试运行模式下的边界设置后,我们将按照以下流程对设置进行评估:

  1. 检查是否存在错误日志;
  2. 查看日志中的 metadata.violationReason 字段,以确定错误的原因并进一步核实详细信息;
  3. 再次确认日志、边界设置和访问级别,以定位可疑部分并进行修正。

实例1

日志检查

首先,我们将通过日志确认是否存在错误。

访问 BigQuery 后,我们将在 Cloud Logging 的日志浏览器中执行以下查询,以检查错误日志。

如果如图所示记录了错误日志,则我们将进一步确定其原因。

  • 参考:确定被阻止的请求

错误原因的确认

以下是实际的错误日志。(项目ID等值已做部分处理)

从第46行的 metadata.violationReason(错误原因)可以看出,其记录的内容为 NO_MATCHING_ACCESS_LEVEL

{"protoPayload": {"@type": "type.googleapis.com/google.cloud.audit.AuditLog","status": {"code": 7,"message": "(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: 9eFMI2pfYddKGBxQtFGub4I66MZpMSBV0li3aN0EkyYmGOiL6T0-Sg","details": [{"@type": "type.googleapis.com/google.rpc.PreconditionFailure","violations": [{"type": "VPC_SERVICE_CONTROLS","description": "9eFMI2pfYddKGBxQtFGub4I66MZpMSBV0li3aN0EkyYmGOiL6T0-Sg"}]}]},"authenticationInfo": {"principalEmail": "yu...i@g-...p"},"requestMetadata": {"callerIp": "2.3.4.5","requestAttributes": {},"destinationAttributes": {}},"serviceName": "bigquery.googleapis.com","methodName": "bigquery.datasets.get","resourceName": "projects/111111111111","metadata": {"securityPolicyInfo": {"organizationId": "333333333333","servicePerimeterName": "accessPolicies/596827900003/servicePerimeters/test"},"@type": "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata","vpcServiceControlsUniqueId": "9eFMI2pfYddKGBxQtFGub4I66MZpMSBV0li3aN0EkyYmGOiL6T0-Sg","ingressViolations": [{"targetResource": "projects/111111111111","servicePerimeter": "accessPolicies/596827900003/servicePerimeters/test","targetResourcePermissions": ["bigquery.datasets.get"]}],"violationReason": "NO_MATCHING_ACCESS_LEVEL","dryRun": true,"intermediateServices": ["bigquery.googleapis.com"],"deviceState": "Unknown","resourceNames": ["projects/111111111111/datasets/logdestination"]}},"insertId": "4fwkn7d1pqp","resource": {"type": "audited_resource","labels": {"project_id": "yutakei-test-prj","method": "bigquery.datasets.get","service": "bigquery.googleapis.com"}},"timestamp": "2024-01-30T13:05:14.094591814Z","severity": "ERROR","logName": "projects/yutakei-test-prj/logs/cloudaudit.googleapis.com%2Fpolicy","receiveTimestamp": "2024-01-30T13:05:14.915645252Z"
}

详细确认

根据以下官方指南,NO_MATCHING_ACCESS_LEVEL 是这样描述的。

如果 IP 地址、设备要求或用户身份与分配给边界的任何入站流量规则或访问权限级别都不匹配,就会出现此问题。

例如,与审核记录的 callerIp 字段对应的 IP 地址与服务边界的访问权限级别中定义的任何 CIDR 范围都不匹配。

  • 参考:调试被 VPC Service Controls 阻止的请求

理解与应对

再次查看日志后发现,第23行的 callerIp(呼叫源IP地址)为 2.3.4.5

因此,可以认为这个错误是由“访问级别中定义的IP地址与呼叫源IP地址不匹配”导致的(即访问级别的设置有误)。所以,我们将对相应的设置进行修正以解决此问题。

实例2

日志检查

我们将再次检查是否有错误。这次记录的错误与之前的不同。

错误原因的确认

以下是实际的错误日志内容(项目ID等值已做部分处理):

虽然metadata.violationReason仍为NO_MATCHING_ACCESS_LEVEL(访问级别不匹配),但其他字段中显示出不同的特征。

{"protoPayload": {"@type": "type.googleapis.com/google.cloud.audit.AuditLog","status": {"code": 7,"message": "(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: RmvvqAujYKJhXMxPzN-bkSzBmHGRHuIXUXvLuvR8Gbh_ZZYCtEFOlQ","details": [{"@type": "type.googleapis.com/google.rpc.PreconditionFailure","violations": [{"type": "VPC_SERVICE_CONTROLS","description": "RmvvqAujYKJhXMxPzN-bkSzBmHGRHuIXUXvLuvR8Gbh_ZZYCtEFOlQ"}]}]},"authenticationInfo": {"principalEmail": "service-222222222222@gcp-sa-logging.iam.gserviceaccount.com"},"requestMetadata": {"callerIp": "private","requestAttributes": {},"destinationAttributes": {}},"serviceName": "bigquery.googleapis.com","methodName": "google.cloud.bigquery.v2.TableDataService.InsertAll","resourceName": "projects/111111111111","metadata": {"@type": "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata","ingressViolations": [{"servicePerimeter": "accessPolicies/596827900003/servicePerimeters/test","targetResource": "projects/111111111111"}],"dryRun": true,"resourceNames": ["test-prj","projects/222222222222"],"securityPolicyInfo": {"servicePerimeterName": "accessPolicies/596827900003/servicePerimeters/test","organizationId": "333333333333"},"vpcServiceControlsUniqueId": "RmvvqAujYKJhXMxPzN-bkSzBmHGRHuIXUXvLuvR8Gbh_ZZYCtEFOlQ","violationReason": "NO_MATCHING_ACCESS_LEVEL","deviceState": "Unknown"}},"insertId": "3vwwvwd2hpq","resource": {"type": "audited_resource","labels": {"service": "bigquery.googleapis.com","method": "google.cloud.bigquery.v2.TableDataService.InsertAll","project_id": "yutakei-test-prj"}},"timestamp": "2024-02-20T13:09:17.367737498Z","severity": "ERROR","logName": "projects/test-prj/logs/cloudaudit.googleapis.com%2Fpolicy","receiveTimestamp": "2024-02-20T13:09:18.644856847Z"
}

详细确认 之一

检查第20行的 principalEmail(调用方账户的邮箱),我们发现这是一个 服务账号,而不是一个普通的 Google 账号。

服务账号的邮件地址格式为 “项目ID前缀+@+服务名称后缀”

由此可以推测出, projects/2222222222222 中的某个日志同步功能,正在访问 projects/111111111111 的 BigQuery API”

  • 参考:写入ID(日志同步的服务账号)

详细确认 之二

VPC 服务控制中包含有故障排查工具。

通过在第47行的 vpcServiceControlsUniqueId(每个违规行为所附带的唯一标识符)中记录的ID,输入到VPC服务控制的故障排查工具中,可以实现对错误原因的可视化分析。

  • 参考:访问VPC服务控制中的故障排查工具

也可通过故障排除工具进行分析。

根据其他项目的设置,可以推测这些项目已经配置了日志sink,正在向本项目的BigQuery API导出日志数据。

理解和应对

根据以往的结果,在评估过程中发现最初的构架是不充分的,因此我们将根据实际情况调整边界设定。

通过添加上行(内向)策略的规则并保存设置,可以实现这一点。

这样,在入站方向上,其他项目的服务账户就能够访问本项目边界内的 BigQuery API。

  • 参考:上行(内向)规则参考文档
#属性项目设定值
1来源ID其他项目的日志同步服务账号
2来源所有源
3目标项目本项目
4目标服务BigQuery API (所有方法)

服务改进后,所有的错误日志都消除了

结语

VPC 服务控制在增强安全性的同时,也可能在不知不觉中引入潜在的缺陷,从而影响服务。

在应用之前,建议使用干运行模式来评估设置,并提前确认其对实际服务的影响。

希望本文能为 VPC 服务控制的正确使用提供一些帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/490147.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NAT网络地址转化技术

1.什么是NAT NAT技术是一种将自己内网的多个私有IP地址转换为一个公网IP进行访问互联网的一项技术,这个技术主要是用来解决IPv4地址不够的问题。 2.NAT技术的具体例子 如果我们用手机使用流量浏览一个网站,那么第一步手机会对这个域名进行DNS解析&#…

图形几何之美系列:铺装算法效果赏析

你知道怎么设置地砖排布吗?或者墙砖排布 有一块布料,怎么填充好看的纹理? 可以用铺装算法,使得设计和艺术变得更有创造力 轮廓铺装:地板铺装、墙砖铺砖、吊顶铺装、图案填充。 图案变得更具艺术感~电视机&#xff1f…

Tomcat项目本地部署

前言: 除了在idea中将项目启动之外,也可以将项目部署在本地tomcat或者云服务器上,本片文章主要介绍了怎样将项目部署在本地tomcat 下面介绍如何使用Tomcat部署本地项目: 1、本篇文章使用的项目案例为一个聚合项目,ha…

Django结合websocket实现分组的多人聊天

其他地方和上一篇大致相同,上一篇地址点击进入, 改动点1:在setting.py中最后再添加如下配置: # 多人聊天 CHANNEL_LAYERS {"default":{"BACKEND": "channels.layers.InMemoryChannelLayer"} }因此完整的se…

网络工程师常用软件之配置对比软件

老王说网络:网络资源共享汇总 https://docs.qq.com/sheet/DWXZiSGxiaVhxYU1F ☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝ 我们经常在项目或者运维中对设备的config进行变更&am…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架,与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis,包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …

面向对象编程(下半)

面向对象编程(下半) 继承 面向对象的三大特征: 封装,继承,多态 继承的作用?能解决什么样的实际问题? 生活中的继承:将一方所拥有的东西给予另一方。父母的财富 类之间的继承:属性…

Python 给 Excel 写入数据的四种方法

Python 在数据处理领域应用广泛,其中与 Excel 文件的交互是常见需求之一。 本文将介绍四种使用 Python 给 Excel 文件写入数据的方法,并结合生活中的例子进行解释,帮助新手小白快速上手。 1. 使用 openpyxl 库 openpyxl 是一个用于读写 Exc…

Vue3项目的创建与使用

Vue 有 Vue2 和 Vue3 ,因为 Vue2 已经停止维护,所以我是直接从 Vue3 开始学习的。 Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML 、 CSS 和 JavaScript 构建,并提 供了一套声明式的、组件化的编程模型,帮…

2024 年最新前端ES-Module模块化、webpack打包工具详细教程(更新中)

模块化概述 什么是模块?模块是一个封装了特定功能的代码块,可以独立开发、测试和维护。模块通过导出(export)和导入(import)与其他模块通信,保持内部细节的封装。 前端 JavaScript 模块化是指…

第十三周Scrum Meeting记录

组长: 张楷 副组长:王骏 小组成员:林佳欣 王文秋 李昌豪 陈俊泽 赵浩然 项目链接:https://github.com/ctrlshiftm129/Tuanzi 文章目录 个人工作记录燃尽图组会照片代码签入记录本周总结 个人工作记录 成员工作内容张楷完成了从…

Linux 磁盘满了怎么办?快速排查和清理方法

当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤: 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…

中科网威-anysec安全网关 arping 远程命令执行漏洞复现(CNVD-2024-46119)

0x01 产品简介 深圳市中科网威科技有限公司成立于深圳市南山科技园信息产业化基地(也有说法称总部位于深圳市福田国际电子商务产业园),是深圳市高新技术企业、双软企业。公司致力于VPN防火墙、流量监控、网络行为管理、ANYSEC安全网关、IT运维设备等前沿网络设备的研发、生…

什么是PCB的CAF效应?

导电阳极丝(CAF)现象及其影响 在高科技电子产品制造中,尤其是在对环境适应性要求极高的汽车电子和军工领域,产品的耐高温和高湿性能显得尤为重要。 随着电子产品向更高集成度发展,电路板上的孔间距不断缩小&#xff…

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

【数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现顺序查找的算法。 相关知识 为了完成本关任务,你需要掌握:1.根据输入数据建立顺序表,2.顺序表的输出,…

UOB大华银行|校招网申综合能力SHL测评题库英语版本真题分析

大华银行有限公司(大华银行)是亚洲银行业的翘楚,大华银行总部位于新加坡,并在中国、印度尼西亚、马来西亚、泰国及越南设立了全资法人银行,在全球拥有约500 间分行及办事处,分布在亚太、欧洲与北美的19 个国…

[C#与C++交互] 跨进程通信NamedPipes

目录 1、前言 2、什么是命名管道? 3、实现步骤 4、示例代码 4.1 C 服务器代码 4.2 C# 客户端代码 5、运行步骤 6、注意事项 7、应用场景 8、优缺点 9、总结 1、前言 在 C# 和 C 应用程序之间进行数据交换时,命名管道(Named Pipes…

《宇宙机器人》提示错误弹窗“找不到d3dx9_43.dll”是什么原因?“d3dx9_43.dll缺失”怎么解决?

电脑游戏运行时常见问题解析:《宇宙机器人》提示“找不到d3dx9_43.dll”的解决之道 TGA2024落幕,年度最佳游戏——《宇宙机器人》,作为一名在软件开发领域深耕多年的从业者,我深知电脑游戏在运行过程中可能会遇到的各种挑战&…

Hive-4.0.1数据库搭建(可选配置用户名密码远程连接)

1.官网下载tar包上传到服务器并解压&#xff08;我这里解压到了hive目录): 2.进入到conf目录&#xff0c;并复制模板配置文件进行修改&#xff1a; cd /apache-hive-4.0.1-bin/conf cp hive-default.xml.template hive-site.xml3.编写内容如下&#xff1a; <property>&…