Google Cloud VPC服务控制与入站策略问题咨询
GCP VPC Service Controls Dry Run模式下NO_MATCHING_ACCESS_LEVEL错误排查
环境配置
- Access Policy:名称为
accessPolicies/XXXXX,作用域为GCP文件夹 - Access Level:名称为
accessLevels/Access_Level_Restriction,筛选条件为授权公网IP - VPC Service Perimeter(Dry Run模式):名称为
servicePerimeters/vpc_perimeter,保护资源包含文件夹内所有GCP项目及对应VPC;限制所有服务,未配置VPC可访问服务与Access Levels;入站策略允许来自Access_Level_Restriction访问级别的任意身份访问所有项目与服务,出站策略允许任意身份访问所有项目与服务 - 已启用VPC SC/WIF功能
遇到的问题
通过Workforce Identity Federation (WIF)或Cloud Identity连接时,可正常访问Compute Engine列出project_id项目中的实例,但使用日志过滤语句:
log_id("cloudaudit.googleapis.com/policy") AND severity="error" AND protoPayload.metadata.dryRun="true"
收到Dry Run模式下的VPC Service Controls错误:
(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: XXXXXXX
错误详情显示违规原因为NO_MATCHING_ACCESS_LEVEL
咨询问题
- 为何IP已在入站策略中授权仍出现该错误?
- 已通过入站策略配置访问级别,是否仍需在服务边界中显式添加访问级别?
解答
问题1解答
核心原因是Dry Run模式下不同请求类型的校验逻辑差异,以及WIF/Cloud Identity的IP校验特性:
- 你能正常访问Compute Engine实例列表属于数据平面请求,Dry Run模式下这类请求不会触发严格的VPC SC校验;但日志过滤语句对应的是控制平面的政策类请求(
cloudaudit.googleapis.com/policy日志关联IAM政策变更、权限校验等控制操作),这类请求在Dry Run模式下会被完整校验。 - 另外,使用WIF/Cloud Identity身份时,GCP会优先校验身份会话创建时的来源IP,而非当前请求的公网IP。如果你的身份会话不是从授权IP段发起创建的,哪怕当前请求IP在授权列表内,也会触发
NO_MATCHING_ACCESS_LEVEL错误。
问题2解答
需要在服务边界中显式添加访问级别,原因如下:
- 服务边界的
accessLevels字段是"可用访问级别白名单",只有被添加到这里的访问级别,才能被入站/出站策略引用。入站策略的作用是从"可用白名单"中挑选允许通过的访问级别,未加入白名单的访问级别,即使在入站策略中配置,也不会被VPC SC识别生效。 - 两者是依赖关系:先把访问级别加入服务边界的可用列表,入站策略的配置才能生效。
内容的提问来源于stack exchange,提问作者Jinja_dude
相关产品推荐
相关产品推荐

