参考架构
在以下参考架构中,我们在服务项目 ph-fm-svc-project
(基础模型服务项目)中部署了包含 Gemini 模型的共享 VPC,其服务政策属性允许从 AWS 对 Vertex AI API 进行专用访问:
- 单个 VPC Service Controls 边界
- 项目定义的用户身份
可选:创建访问权限级别
如果您的最终用户需要通过 Google Cloud 控制台访问 Vertex AI,请按照本部分中的说明创建 VPC Service Controls 访问权限级别。不过,如果对 API 的程序化访问来自专用来源(例如通过专用 Google 访问通道或 Cloud Workstations 进行的本地访问),则不需要访问权限级别。
在此参考架构中,我们使用公司 CIDR 范围 corp-public-block
,以允许公司员工流量访问 Google Cloud 控制台。
Access Context Manager 允许 Google Cloud 组织管理员为Google Cloud中的项目和资源定义基于属性的精细访问权限控制。
访问权限级别说明了请求得以执行所需满足的要求。例如:
- 设备类型和操作系统(需要 Chrome 企业进阶版许可)
- IP 地址
- 用户身份
如果组织是首次使用 Access Context Manager,则管理员必须定义访问权限政策,这是访问权限级别和服务边界的容器。
在 Google Cloud 控制台顶部的项目选择器中,点击全部标签页,然后选择您的组织。
按照创建基本访问权限级别页面中的说明创建基本访问权限级别。指定以下选项:
- 在在以下条件中创建条件下,选择基本模式。
- 在访问权限级别标题字段中,输入
corp-public-block
。 - 在条件部分中,对于满足条件时返回选项,请选择 TRUE。
- 在 IP 子网下,选择公共 IP。
- 对于 IP 地址范围,请指定需要访问 VPC Service Controls 边界的外部 CIDR 范围。
构建 VPC Service Controls 服务边界
创建服务边界时,您可以通过指定受保护的项目来允许从边界外访问受保护的服务。将 VPC Service Controls 与共享 VPC 搭配使用时,您需要创建一个包含宿主项目和服务项目的大型边界。(如果您仅在边界内选择服务项目,则属于服务项目的网络端点似乎位于边界之外,因为子网仅与宿主项目相关联。)
选择新边界的配置类型
在本部分中,您将以试运行模式创建 VPC Service Controls 服务边界。在试运行模式下,边界会记录违规行为,虽然看起来已实施边界,但实际上并不会阻止对受限服务的访问。建议的最佳实践是在切换到实施模式之前使用试运行模式。
在 Google Cloud 控制台导航菜单中,点击安全,然后点击 VPC Service Controls。
在 VPC Service Controls 页面上,点击试运行模式。
点击新建边界。
在新建 VPC 服务边界标签页的边界名称框中,为边界输入一个名称。否则,请接受默认值。
边界名称的最大长度为 50 个字符,必须以字母开头,并且只能包含 ASCII 拉丁字母(a-z、A-Z)、数字 (0-9) 或下划线 (_)。边界名称区分大小写,并且在访问政策中必须是唯一的。
选择要保护的资源
点击要保护的资源。
如需添加您要在边界内保护的项目或 VPC 网络,请执行以下操作:
点击添加资源。
如需将项目添加到边界中,请在添加资源窗格中,点击添加项目。
如需选择项目,请在添加项目对话框中选中相应项目的复选框。在此参考架构中,我们选择以下项目:
infra-host-project
aiml-host-project
ph-fm-svc-project
点击添加所选资源。添加的项目会显示在项目部分中。
选择受限服务
在此参考架构中,受限 API 的范围有限,仅启用 Gemini 所需的必要 API。不过,作为最佳实践,我们建议您在创建边界时对所有服务施加限制,以降低Google Cloud 服务发生数据渗漏的风险。
如需选择要在边界内保护的服务,请执行以下操作:
点击受限的服务。
在受限的服务窗格中,点击添加服务。
在指定要限制的服务对话框中,选择 Vertex AI API。
点击添加 Vertex AI API。
可选:选择 VPC 可访问服务
VPC 可访问服务设置限制了可从服务边界内的网络端点访问的服务集合。在此参考架构中,我们保留了所有服务的默认设置。
可选:选择访问权限级别
如果您在前面的部分中创建了公司 CIDR 访问权限级别,请执行以下操作,以允许从边界外访问受保护的资源:
点击访问权限级别。
点击选择访问权限级别框。
您也可以在创建边界后添加访问权限级别。
选中与相应访问权限级别对应的复选框。(在此参考架构中,此值为
corp-public-block
。)
入站和出站流量政策
在此参考架构中,无需在入站流量政策或出站流量政策窗格中指定任何设置。
创建边界
完成上述配置步骤后,点击创建边界来创建边界。
配置 AWS 与 Google API 之间的网络连接
配置适用于 Google API 的 Private Service Connect
用于访问 Google API 的 Private Service Connect 是使用专用 Google 访问通道或 Google API 的公共域名的替代方案。在这种情况下,提供方是 Google。
使用 Private Service Connect 可以执行以下操作:
- 创建一个或多个内部 IP 地址,以访问适用于不同应用场景的 Google API。
- 访问 Google API 时,将本地流量定向到特定 IP 地址和区域。
- 创建用于解析 Google API 的自定义端点 DNS 名称。
在参考架构中,部署了一个名为 restricted
的 Private Service Connect Google API 端点,其 IP 地址为 10.10.10.3,
,并与目标 VPC-SC 一起使用,用作虚拟 IP (VIP) 来访问 VPC-SC 边界中配置的受限服务。不支持使用 VIP 访问非受限服务。如需了解详情,请参阅关于访问 Vertex AI API | Google Cloud。
配置 AWS VPC 网络
Amazon Web Services (AWS) 和 Google Cloud之间的网络连接是通过高可用性虚拟专用网(高可用性 VPN)隧道建立的。这种安全连接有助于在两个云环境之间进行专用通信。不过,为了在 AWS 和 Google Cloud中的资源之间实现无缝路由和通信,我们采用了边界网关协议 (BGP)。
在 Google Cloud 环境中,需要自定义路由通告。此自定义路由专门向 AWS 网络通告 Private Service Connect Google API IP 地址。通过通告此 IP 地址,AWS 可以建立通往 Google API 的直接路由,从而绕过公共互联网并提高性能。
在参考架构中,部署的 Sagemaker 实例与使用 Google Cloud建立 VPN 的 AWS VPC 相关联。边界网关协议 (BGP) 用于在 AWS 和 Google Cloud 网络之间的高可用性 VPN 中通告路由。因此,Google Cloud 和 AWS 可以通过 VPN 路由双向流量。如需详细了解如何设置高可用性 VPN 连接,请参阅在 Google Cloud 和 AWS 之间创建高可用性 VPN 连接。
配置 Route 53 更新
在 AWS Route 53 中创建一个名为 p.googleapis.com
的专用托管可用区,并添加完全限定域名 REGION-aiplatform-restricted.p.googleapis.com
,其中包含 IP 地址 10.10.10.3
(Private Service Connect Googleapis IP)作为 DNS A 记录。当 Jupyter Notebook SDK 对 Vertex AI API 执行 DNS 查找以访问 Gemini 时,Route 53 会返回 Private Service Connect Google API IP 地址。Jupyter Notebook 使用从 Route 53 获取的 IP 地址来建立与通过高可用性 VPN 路由到 Google Cloud的 Private Service Connect Google API 端点的连接。
配置 SageMaker 更新
此参考架构使用 Amazon SageMaker Notebook 实例来访问 Vertex AI API。不过,您也可以使用支持 VPC 的其他计算服务(例如 Amazon EC2 或 AWS Lambda)实现相同的设置。
如需对请求进行身份验证,您可以使用 Google Cloud 服务账号密钥,也可以使用工作负载身份联合。如需了解如何设置工作负载身份联合,请参阅本地或其他云服务提供商。
Jupyter Notebook 实例通过对自定义 Private Service Connect Google API 完全限定域名 REGION-aiplatform-restricted.p.googleapis.com
执行 DNS 解析来调用Google Cloud 中托管的 Gemini 模型,从而替换默认的完全限定域名 (REGION-aiplatform.googleapis.com
)。
可以使用 REST、gRPC 或 SDK 调用 Vertex AI API。如需使用 Private Service Connect 客户完全限定域名,请在 Jupyter 笔记本中将 API_ENDPOINT 更新为以下内容:
有关使用 Vertex AI SDK for Python 的说明
安装 SDK:
pip install --upgrade google-cloud-aiplatform
导入依赖项:
from google.cloud import aiplatform from vertexai.generative_models import GenerativeModel, Part, SafetySetting import vertexai import base64
初始化以下环境变量:
PROJECT_ID="ph-fm-svc-projects" # Google Cloud Project ID LOCATION_ID="us-central1" # Enter Vertex AI Gemini region such a s us-central1 API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint MODEL_ID="gemini-2.0-flash-001" # Gemini Model ID
初始化 Vertex AI SDK for Python:
vertexai.init(project=PROJECT_ID,api_endpoint=API_ENDPOINT, api_transport="rest")
向 Vertex AI Gemini API 发出以下请求:
import base64 from vertexai.generative_models import GenerativeModel, Part, SafetySetting def generate(model_id, prompt): model = GenerativeModel( model_id, ) responses = model.generate_content( [prompt], generation_config=generation_config, safety_settings=safety_settings, stream=True, ) for response in responses: print(response.text, end="") generation_config = { "max_output_tokens": 8192, "temperature": 1, "top_p": 0.95, } safety_settings = [ SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold=SafetySetting.HarmBlockThreshold.OFF ), SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold=SafetySetting.HarmBlockThreshold.OFF ), SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold=SafetySetting.HarmBlockThreshold.OFF ), SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_HARASSMENT, threshold=SafetySetting.HarmBlockThreshold.OFF ), ] prompt = "which weighs more: 1kg feathers or 1kg stones" generate(MODEL_ID,prompt)
此时,您可以从 Jupyter 笔记本对 Gemini 进行 API 调用,以访问托管在 Google Cloud中的 Gemini。如果调用成功,则输出如下所示:
They weigh the same. Both weigh 1 kilogram.
有关使用 Vertex AI REST API 的说明
在本部分中,您将设置一些将在整个过程中使用的重要变量。这些变量用于存储项目信息,例如资源位置、特定的 Gemini 模型以及要使用的 Private Service Connect 端点。
在 Jupyter 笔记本中打开一个终端窗口。
初始化以下环境变量:
export PROJECT_ID="ph-fm-svc-projects" export LOCATION_ID="us-central1" export API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" export MODEL_ID="gemini-2.0-flash-001"
使用文本编辑器(例如
vim
或nano
)创建一个名为request.json
的新文件,其中包含以下格式化的 Vertex AI Gemini API 请求:{ "contents": [ { "role": "user", "parts": [ { "text": "which weighs more: 1kg feathers or 1kg stones" } ] } ], "generationConfig": { "temperature": 1, "maxOutputTokens": 8192, "topP": 0.95, "seed": 0 }, "safetySettings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "OFF" }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "OFF" }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "OFF" }, { "category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF" } ] }
向 Vertex AI Gemini API 发出以下 cURL 请求:
curl -v \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://$API_ENDPOINT/v1/projects/$PROJECT_ID/locations/$LOCATION_ID/publishers/google/models/$MODEL_ID:streamGenerateContent" -d '@request.json'
在试运行模式下验证边界
在此参考架构中,服务边界以试运行模式配置,可让您在不强制执行的情况下测试访问权限政策的效果。这意味着,您可以了解政策在有效状态下会对环境产生哪些影响,但不会有中断合法流量的风险。
在试运行模式下验证边界后,将其切换到实施模式。
后续步骤
- 了解如何使用
p.googleapis.com
DNS 名称。 - 如需了解如何在试运行模式下验证边界,请观看 VPC Service Controls 试运行日志记录视频。
- 了解如何使用 Vertex AI REST API。
- 详细了解如何使用 Vertex AI SDK for Python。