You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Google Cloud VPC服务控制放行指定IP(Artifact Registry边界)

问题描述

在GCP上配置VPC Service Controls以放行特定IP(49.36.189.5/32)访问Artifact Registry API,已创建包含该IP段的访问级别,且确认VPC Service Controls与防火墙规则配置正确,但请求仍被拦截,错误提示:Request is prohibited by organization's policy.,审计日志显示violationReason: NO_MATCHING_ACCESS_LEVEL。

配置详情:

  • 目标资源:Artifact Registry API
  • 访问级别规则:允许49.36.189.5/32访问
  • 入站/出站规则:无

审计日志关键信息:

{
  "requestMetadata": { "callerIp": "49.36.189.5" },
  "serviceName": "artifactregistry.googleapis.com",
  "methodName": "artifactregistry.googleapis.com/DockerRead",
  "metadata": {
    "violationReason": "NO_MATCHING_ACCESS_LEVEL",
    "servicePerimeterName": "accessPolicies/.../servicePerimeters/artifact_registry"
  }
}
可能的原因分析
  1. 访问级别未关联到目标服务边界:仅创建访问级别但未将其添加到对应服务边界的入站策略中,导致VPC SC无法识别该规则。
  2. 访问级别IP规则配置错误:IP段格式错误(如掩码不正确、IP地址拼写错误),或选择了错误的条件类型(如误选VPC网络而非IP地址)。
  3. 服务边界模式或规则冲突:服务边界处于严格强制模式,且存在其他优先级更高的拦截规则;或访问级别要求同时满足IP和身份验证条件,但请求未提供有效凭证。
  4. 请求身份验证缺失:Artifact Registry的Docker拉取等操作可能需要身份验证,即使IP在允许列表中,匿名请求仍会被VPC SC拦截(部分访问级别隐含身份验证要求)。
排查与修复步骤

1. 确认访问级别与服务边界的关联

  • 进入VPC Service Controls控制台,找到目标服务边界artifact_registry
  • 检查入站策略(Ingress policies),确认已将创建的IP访问级别添加到允许列表中
  • 若未添加,补充关联并等待配置生效(通常需要5-10分钟)

2. 验证访问级别IP规则的准确性

  • 打开访问级别配置页面,检查IP范围是否为49.36.189.5/32,确认无拼写或掩码错误
  • 确认规则类型为IP地址(IP address),而非VPC网络或其他类型
  • 测试将IP范围临时扩大(如49.36.189.0/24),验证是否能正常访问,排查IP段匹配问题

3. 检查服务边界模式与附加规则

  • 确认服务边界处于强制模式(Enforced)(若为报告模式则仅记录拦截,不实际阻止)
  • 检查服务边界是否有其他入站规则,例如是否存在拒绝所有流量的规则优先级高于IP允许规则
  • 查看服务边界是否包含所有相关资源:确认Artifact Registry所在的项目已被纳入该服务边界

4. 验证请求的身份凭证

  • 对于Artifact Registry的Docker拉取操作,确保请求携带了有效的GCP身份凭证(如使用gcloud auth configure-docker配置的凭证)
  • 检查访问级别是否添加了身份验证条件(如要求特定用户/组),若有需确保请求符合身份要求
  • 测试使用已授权的服务账号发起请求,验证是否能绕过拦截

5. 排查组织策略冲突

  • 使用gcloud命令列出组织策略,检查是否存在影响VPC Service Controls的约束:
    gcloud org-policies list --organization=YOUR_ORG_ID
    
  • 重点检查constraints/vpcaccess.restrictVpcPeering、constraints/compute.restrictExternalIp等可能与VPC SC交互的策略

6. 验证请求源IP的真实性

  • 虽然审计日志显示callerIp为目标IP,但可通过在请求端执行curl https://ipinfo.io/ip确认实际出口IP
  • 若请求经过代理或CDN,需确保代理的出口IP也被添加到访问级别中

内容的提问来源于stack exchange,提问作者user7448575

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:37:03