参考架构
在以下参考架构中,共享 VPC 在服务项目 ph-fm-svc-project
(基础模型服务项目)中部署了 Gemini 模型,服务政策属性允许从 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。
点击 Add Vertex AI API(添加 Vertex AI API)。
可选:选择 VPC 可访问服务
VPC 可访问服务设置限制了可从服务边界内的网络端点访问的一组服务。在此参考架构中,我们将保留所有服务的默认设置。
可选:选择访问权限级别
如果您在前面的部分创建了公司 CIDR 访问权限级别,请执行以下操作以允许从边界外访问受保护的资源:
点击访问权限级别。
点击选择访问权限级别框。
您也可以在创建边界后添加访问权限级别。
选择与访问权限级别对应的复选框。(在此参考架构中,此值为
corp-public-block
。)
入站和出站政策
在此参考架构中,无需在入站流量政策或出站流量政策窗格中指定任何设置。
创建边界
完成上述配置步骤后,点击创建边界以创建边界。
配置 AWS 和 Google API 之间的网络连接
配置适用于 Google API 的 Private Service Connect
使用 Private Service Connect 访问 Google API 是使用专用 Google 访问通道或 Google API 的公共域名的替代方案。在这种情况下,提供方是 Google。
使用 Private Service Connect 可以执行以下操作:
- 创建一个或多个内部 IP 地址,以访问适用于不同应用场景的 Google API。
- 访问 Google API 时,将本地流量定向到特定 IP 地址和区域。
- 创建用于解析 Google API 的自定义端点 DNS 名称。
在参考架构中,一个名为 restricted
且具有 IP 地址 10.10.10.3,
的 Private Service Connect Google API 端点与目标 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 解析(替换默认完全限定域名 REGION-aiplatform.googleapis.com
),调用对Google Cloud 中托管的 Gemini 模型的 API 调用。
您可以使用 Rest、gRPC 或 SDK 调用 Vertex AI API。如需使用 Private Service Connect 客户全限定域名,请使用以下代码在 Jupyter Notebook 中更新 API_ENDPOINT:
使用 Python 版 Vertex AI SDK 的说明
安装 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
初始化 Python 版 Vertex AI SDK:
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 发出以下 c网址 请求:
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。
- 详细了解如何使用 Python 版 Vertex AI SDK。