要在私有云环境中安全调用 Gemini API,核心在于切断公网路径,确保请求全程通过 Google 内部骨干网传输,同时阻止跨项目的未授权访问。否则,请求可能被拦截,或导致敏感数据直接暴露。因此,你需要将以下几个关键环节逐一配置到位:创建 VPC Service Controls 服务边界、配置基于 VPC CIDR 的访问级别、启用 Private Google Access 并创建 Private Endpoint,最后授予最小化的 IAM 权限。

创建 VPC Service Controls 服务边界
服务边界是整个防护体系的首道防线。简言之,边界是安全防护的起点,没有这道“墙”,后续策略形同虚设。
操作步骤:打开 Google Cloud Console,进入 VPC Service Controls 页面。点击“创建服务边界”,输入唯一名称(如 【gemini-prod-boundary】)和描述,注意避免使用中文或空格。在“受保护资源”中,勾选当前项目;如果调用 Gemini 的项目与模型部署的项目不同,则两个项目都必须勾选——遗漏任何一个,该环境中的调用都会失败。接着,在“受保护的服务”列表中,仅勾选 Vertex AI(服务标识为 aiplatform.googleapis.com),不要选择 Generative Language API 或其他无关服务。最后点击创建,等待 2 到 5 分钟,状态变为“已激活”即可。注意,此过程中任何调用都会被拒绝。
配置基于 VPC CIDR 的访问级别
边界本身不会放行任何流量,你需要显式定义哪些私有网段可以穿透边界调用 Gemini。
方法一:基于 IP 地址范围控制。进入刚创建的边界,找到“访问级别”标签页,点击“创建访问级别”。选择条件类型为“基于 IP 地址”,在“IP 地址范围”中填入目标 VPC 的完整 CIDR,例如 【10.128.0.0/16】。如果只允许特定子网,填写 10.128.10.0/24 即可,不要使用 10.128.10.0/255.255.255.0 格式。保存后,在边界设置的“受限访问策略”中绑定该访问级别。
方法二:复用已有的访问级别。如果之前已创建过覆盖目标网段的访问级别,直接在边界策略下拉菜单中选中即可,无需重复创建。但需注意:确认该级别未被其他边界误用,否则策略冲突会导致调用静默失败,排查困难。
启用 Private Google Access 并创建 Private Endpoint
这一步是整个链路中“物理上”决定流量路径的关键。如果跳过此步,即使边界和访问级别都已配置,请求仍会尝试走公网,进而被拦截。
第一步:启用 Private Google Access。进入目标 VPC 的子网详情页,找到“Private Google Access”开关,设置为“开启”。注意,此操作需针对每个包含调用方实例的子网单独执行,无法批量设置。
第二步:创建 Private Endpoint。进入 Vertex AI 控制台,依次点击 “Models” → “Endpoints” → “Create endpoint”。填写端点名称(如 gemini-private-ep),选择区域时必须与调用方所在的 VPC 区域一致。最关键的一步:在“Network configuration”中,勾选 Private endpoint,然后从下拉菜单中选择目标 VPC 网络。点击创建,等待状态变为“Ready”即完成。此时,系统会提供一个私有调用地址,例如 https://us-central1-aiplatform.googleapis.com/v1/projects/xxx/locations/us-central1/endpoints/xxx:predict。
授予服务账号最小必要 IAM 权限
权限不足是调用时返回 403 最常见的原因。必须精确授予,不要为了省事直接赋予项目所有者角色。
进入“IAM 和管理” → “IAM”,点击右上角的“添加”。在“成员”栏填入服务账号邮箱(格式类似 vertex-app@your-project.iam.gserviceaccount.com)。在“角色”栏展开“Vertex AI”,选择 Vertex AI User(roles/aiplatform.user)。切勿选择 Admin 或 Owner,否则违背最小权限原则。保存后,等待约 60 秒,IAM 策略即可生效。
验证私有调用是否生效
理论上配置完成还不够,必须动手验证。注意:验证需从 VPC 内部发起,并使用私有 Endpoint 地址,否则无法确认策略是否真正生效。
首先,在已启用 Private Google Access 的子网中,启动一台 Compute Engine 实例。然后安装 curl,执行以下请求:
curl -X POST
"https://us-central1-aiplatform.googleapis.com/v1/projects/YOUR_PROJECT_ID/locations/us-central1/endpoints/YOUR_ENDPOINT_ID:predict"
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
-H "Content-Type: application/json"
--data '{"instances": [{"content": "hello"}]}'
如果返回 200 且包含有效响应体,说明私有调用链路已打通。若返回 403 或连接超时,则需要逐一检查边界状态、访问级别绑定以及 Private Endpoint 关联的网络是否匹配。很多问题往往隐藏在这些细节之中。
