首页 > 其他分享 >【Google Cloud】VPC Service Controls 的试运行模式

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

时间:2024-12-14 21:32:00浏览次数:8  
标签:Google 边界 Service googleapis Controls 访问 VPC 日志 type

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

什么是 VPC Service Controls

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

详情说明如下另请参见

试运行模式

试运行模式(试运行配置) 是指在 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角色。

访问级别

通过访问级别设置,使用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 范围都不匹配。

理解与应对

再次查看日志后发现,第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”

详细确认 之二

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

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

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

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

理解和应对

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

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

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

#属性项目设定值
1来源ID其他项目的日志同步服务账号
2来源所有源
3目标项目本项目
4目标服务BigQuery API (所有方法)

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

结语

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

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

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

标签:Google,边界,Service,googleapis,Controls,访问,VPC,日志,type
From: https://blog.csdn.net/weixin_52179956/article/details/144476038

相关文章

  • httpd.service: Failed at step EXEC spawning usrsbinhttpd: Permission denied
    httpd.service:FailedatstepEXECspawningusrsbinhttpd:Permissiondenied‍apache编译安装之后,通过apachectlstart可以正常启动,注册为systemd服务时启动不了:[root@localhosthttpd-2.4.62]#systemctlstarthttpd.serviceJobforhttpd.servicefailedbecause......
  • httpd.service: Failed at step EXEC spawning usrsbinhttpd: Permission denied
    httpd.service:FailedatstepEXECspawningusrsbinhttpd:Permissiondenied‍apache编译安装之后,通过apachectlstart可以正常启动,注册为systemd服务时启动不了:[root@localhosthttpd-2.4.62]#systemctlstarthttpd.serviceJobforhttpd.servicefailedbecause......
  • Google在架包分析-巴西4
    包信息之前在应用榜找的几个包都是一家的,一样的方案没啥好分析的。这次就换游戏榜里面找了个包,直接看图标找很好找。逆向分析安装运行,刚开始还是进的A面小游戏,然后我说来抓个包看下,重新打开了一下app,结果直接就B面了,给我整不会了。。。现在的上架方案都这么随意进b面......
  • httpd.service: Failed at step EXEC spawning usrsbinhttpd: Permission denied
    httpd.service:FailedatstepEXECspawningusrsbinhttpd:Permissiondenied‍apache编译安装之后,通过apachectlstart可以正常启动,注册为systemd服务时启动不了:[root@localhosthttpd-2.4.62]#systemctlstarthttpd.serviceJobforhttpd.servicefailedbecause......
  • Ungoogled Chromium127编译指南 Windows篇 - 链接工具修复(十三)
    1.引言在完成Rust编译器包装器的修复后,我们遇到了编译过程最后阶段的链接问题。在Windows环境下,链接器无法正确找到llvm-pdbutil.exe和undname.exe这两个重要工具。本文将详细介绍如何解决这个问题。2.问题分析2.1错误表现链接阶段报错找不到必要的工具:llvm-pdbutil.e......
  • Google Chrome谷歌浏览器离线/绿色版本安装与彻底卸载
    一、离线安装1.下载官方最新安装包安装直接下载链接Windows32位最新稳定版:https://dl.google.com/tag/s/installdataindex/update2/installers/ChromeStandaloneSetup.exeWindows64位最新稳定版:https://dl.google.com/tag/s/installdataindex/update2/installers/Chrom......
  • Google Kickstart2022 Round G Problem C 快乐子数组
    有点思路,但还需要细想思路一眼上去,应该是写单调队列,但是不是像写滑动窗口一样写设前缀和为pre,如果一个区间\([l,r]\)满足条件,那么\(pre[l-1]<min(pre[l],pre[l+1],.....,pre[r]\)根据这一点,我们每次枚举到i,只需要统计左端有多少个相对应的j使得pre[j]<pre[i]即可,这时就可以......
  • 首发实测,Google最快AI来了!深度解析Gemini 2.0 Flash
    引言年末各家大模型产品之战再度升级,12月11日,Google在官网博客发布了其新一代AI模型Gemini2.0系列的首款模型——Gemini2.0Flash实验版本。正如模型名称Flash描述的那样,该模型具有低延迟和高性能的特性,Google更是计划使其成为Google相关产品规模化应用的核心引擎。通过......
  • Win10提示systemserviceexception蓝屏代码怎么办?
    在使用电脑的过程中,不少朋友都遇到过蓝屏的现象,像小编就遇到了systemserviceexception蓝屏终止代码,那么遇到这种蓝屏代码应该要怎么办呢?下面就和小编一起来看看有什么解决方法吧。Win10提示systemserviceexception蓝屏代码的解决方法方法一1、使用Windows键+R......
  • builder.Services.AddMvc
    在.NET中,builder.Services.AddMvc是一个用于在ASP.NETCore应用程序中添加MVC框架服务的方法。当你在构建服务容器时调用这个方法,它会将MVC框架所需的服务添加到服务容器中。以下是一些关键点:添加MVC服务:AddMvc方法会将MVC框架所需的所有服务添加到服务容器中,包括路由、模型......