Set up Vector Search with Private Service Connect

Private Service Connect allows private consumption of servicesacross VPC networks that belong to different groups, teams, projects,and organizations. You can publish and consume services using IP addresses thatyou define and that are internal to your VPC network, and forVector Search endpoints to perform vector similarity searches.

Enabling Private Service Connect on a Vector Searchendpoint is suited for use cases that:

  1. Require low latency and a secure connection to Vector Searchserving backends.
  2. Have limited IP space for exclusive VPC peering reservation.
  3. Need to access the serving backends from multiple user VPC networks.

To learn more about setting up Private Service Connect, go toPrivate Service Connect Overview in theVirtual Private Cloud (VPC) documentation.

Create the index endpoint

You must enable Private Service Connect when you create your endpoint.This procedure is similar to creating other endpoints in Vertex AI.

REST

  • PROJECT: The ID of the service project where you arecreating Vertex AI resources.

  • REGION: The network region.

  • DISPLAY_NAME: A display name to give the endpoint.This name is used to create an ID for the endpoint and cannot be updated later.

  • VPC_PROJECTS: For Shared VPC setup,this is a comma-separated list of VPC host projects.For standalone VPC setup, this is the same asPROJECT.

PROJECT=PROJECT_IDVPC_PROJECT=VPC_PROJECT_IDREGION=us-central1VERTEX_ENDPOINT=REGION-aiplatform.googleapis.comcurl-H"Content-Type: application/json"\-H"Authorization: Bearer `gcloud auth print-access-token`"\https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/REGION/indexEndpoints\-d'{"displayName":"DISPLAY_NAME","privateServiceConnectConfig":{"enablePrivateServiceConnect":true,"projectAllowlist":["VPC_PROJECT_1","VPC_PROJECT_2","VPC_PROJECT_N"]}}

Console

To create your endpoint:

  1. Click the following button to go to Vector Search in the Google Cloud console. A list of your active indexes appears.

    Go to Vector Search

  2. Select theIndex endpoints tab. Your index endpoints appear.

  3. ClickCreate new endpoint. TheCreate a new index endpoint panel opens.

  4. InDisplay name, enter a display name for the index endpoint.This name is used to create an ID for the endpoint and cannot be updated later.

  5. Select a region from theRegion drop-down.

  6. UnderAccess, clickPrivate Service Connect (Preview).

  7. A text field appears where you can specify which VPCprojects to use. Add the IDs or numbers of the VPC projectsyou want to use.

  8. ClickCreate.

About index deployment options

Note: If yourDeployedIndex uses fewer than two replicas per shard,then it is excluded from theVertex AI Service Level Agreement.For yourDeployedIndex to be covered by the SLA, you must setminReplicaCountto at least 2 or greater, and must be adequately provisioned for workload size.To be adequately provisioned we recommend adding additional replicasif CPU/Memory usage consistency operates 60%.

You can deploy your index with automatic or manual service connectivity.

  • Deploy with Private Service Connect automation:Set up a service connection policy and deploy your indexes. Setting up aservice connection policy lets you deploy to a specific network withoutcreating a compute address and forwarding rule each time.
  • Deploy with manual connection: Deploy your index andmanually create a compute address and forwarding rule. You might choose thisoption if you need to use multiple IP addresses for the same service attachmentURI, although this is not a common use case.

Deploy with Private Service Connect automation

You can set up a service connection policy so that you don't have to manuallycreate a compute address and forwarding rule after each index deployment.

  1. First,create a service connection policy that specifies thenetwork, service class, and region to deploy indexes to. This is aone-time setup. If you've already done this, skip to the next procedure.
  2. Deploy the index.

Limitations

Automation allows only one IP address per project per network. If you need touse multiple IP addresses, seeManually deploy the index.

Create a service connection policy

You must be a network administrator to create a service connection policy forautomating index deployment.

To automate index deployment, follow these steps:

  1. Create your service connection policy.

    • PROJECT: The service project where you are creatingVertex AI resources.

    • VPC_PROJECT: The project where your client VPC is. Forsingle VPC setup, this is the same as $PROJECT. ForShared VPC setup, this is the VPC host project.

    • NETWORK_NAME: The name of the network to deploy to, in theformatprojects//global/networks/.

    • REGION: The network region.

    • PSC_SUBNETS: The Private Service Connectsubnets to use.

    gcloudnetwork-connectivityservice-connection-policiescreate<policy_name>\--project=<vpc_project>--network=<network_name># in the format projects/<project_id>/global/networks/<network_name> \--service-class=gcp-vertexai--region=<region>--subnets=<pscsubnets>
  2. View your service connection policy.

    gcloudnetwork-connectivityservice-connection-policieslist--project=<vpc_project>-–region=<region>

For more information about service connection policies, go toConfigure service connection policies.

Deploy the index

REST

  • PROJECT: The service project where you are creatingVertex AI resources.

  • VPC_PROJECT: The project where your client VPC is. ForShared VPC setup, this is the VPC host project.

  • DISPLAY_NAME: A display name to give the endpoint.This name is used to create an ID for the endpoint and cannot be updated later.

  • NETWORK_NAME: The name of the network to deploy to, in theformatprojects//global/networks/.

  • REGION: The network region.

  • PSC_SUBNETS: The Private Service Connect subnetto use.

PROJECT=PROJECTVPC_PROJECTS=VPC_PROJECTSREGION=REGIONcurl-XPOST-H"Authorization: Bearer$(gcloudauthprint-access-token)"-H"Content-Type: application/json; charset=utf-8""https://LOCATIONAL_ENDPOINT.googleapis.com/v1/projects/PROJECT_NUMBER/locations/REGION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex"-d'{  "deployedIndex": {    "id": "DEPLOYED_INDEX_ID",    "index": "projects/PROJECT/locations/us-central1/indexes/INDEX_ID ",    "displayName": "DISPLAY_NAME",    "psc_automation_configs": [      { "project_id": "PROJECT_1", "network": "NETWORK_NAME_1" },      { "project_id": "PROJECT_2", "network": "NETWORK_NAME_2" },      { "project_id": "PROJECT_N", "network": "NETWORK_NAME_N" }]    }}'

Console

To deploy your endpoint:

  1. Click the button following button to go to Vector Search in the Google Cloud console. A list of your active indexes appears.

    Go to Vector Search

  2. Click theDeploy button for the Private Service Connect-enabledVector Search endpoint you want to deploy. TheDeploy index slide-outpanel appears.

  3. InDisplay name, enter a display name for the deployed index.This name is used to create the ID and cannot be updated later.

  4. ClickEndpoint and choose the index endpoint you want to deploy to.

  5. Optionally, clickMachine type to manually choose the type of machine to deploy the index to. By default, the machine type is automatically selected based on indexshard size.

You now need to add Private Service Connect automation configurations. To do so:

  1. In thePSC automation configs section,clickAdd new config.

  2. Enter the name of the VPC project to connect with.

  3. Enter the network name of the VPC project to connect. It must bein the formatprojects/<project_number>/global/networks/<network_name>.

  4. Optionally, clickAdd new configand continue adding Private Service Connect automation configurations.

  5. ClickDeploy to finish.

Note: Deployment can take more than 30 minutes to complete.

Delete service connection policy

If you need to delete the service connection policy, run the following command:

gcloudnetwork-connectivityservice-connection-policiesdelete--project=<vpc_project>–-region=<region><policy_name>

For more information about service connection policies, go toConfigure service connection policies.

Deploy with manual connection

Deploy the index and create a forwarding rule in your VPC project.

Deploy the index

Now that the index is ready, in this step, you deploy the indexto the endpoint you created with Private Service Connect enabled.

gcloud

This example uses thegcloud ai index-endpoints deploy-indexcommand.

Before using any of the command data below, make the following replacements:

  • INDEX_ENDPOINT_ID: The ID of the index endpoint.
  • DEPLOYED_INDEX_ID: A user specified string to uniquely identify the deployed index.It must start with a letter and contain only letters, numbers or underscores.SeeDeployedIndex.id for format guidelines.
  • DEPLOYED_INDEX_ENDPOINT_NAME: Display name of the deployed index endpoint.
  • INDEX_ID: The ID of the index.
  • LOCATION: The region where you are using Vertex AI.
  • PROJECT_ID: Your Google Cloudproject ID.

Execute the following command:

Linux, macOS, or Cloud Shell

Note: Ensure you have initialized the Google Cloud CLI with authentication and a project by running eithergcloud init; orgcloud auth login andgcloud config set project.
gcloudaiindex-endpointsdeploy-indexINDEX_ENDPOINT_ID\--deployed-index-id=DEPLOYED_INDEX_ID\--display-name=DEPLOYED_INDEX_ENDPOINT_NAME\--index=INDEX_ID\--region=LOCATION\--project=PROJECT_ID

Windows (PowerShell)

Note: Ensure you have initialized the Google Cloud CLI with authentication and a project by running eithergcloud init; orgcloud auth login andgcloud config set project.
gcloudaiindex-endpointsdeploy-indexINDEX_ENDPOINT_ID`--deployed-index-id=DEPLOYED_INDEX_ID`--display-name=DEPLOYED_INDEX_ENDPOINT_NAME`--index=INDEX_ID`--region=LOCATION`--project=PROJECT_ID

Windows (cmd.exe)

Note: Ensure you have initialized the Google Cloud CLI with authentication and a project by running eithergcloud init; orgcloud auth login andgcloud config set project.
gcloudaiindex-endpointsdeploy-indexINDEX_ENDPOINT_ID^--deployed-index-id=DEPLOYED_INDEX_ID^--display-name=DEPLOYED_INDEX_ENDPOINT_NAME^--index=INDEX_ID^--region=LOCATION^--project=PROJECT_ID

REST

Before using any of the request data, make the following replacements:

  • INDEX_ENDPOINT_ID: The ID of the index endpoint.
  • DEPLOYED_INDEX_ID: A user specified string to uniquely identify the deployed index.It must start with a letter and contain only letters, numbers or underscores.SeeDeployedIndex.id for format guidelines.
  • DEPLOYED_INDEX_ENDPOINT_NAME: Display name of the deployed index endpoint.
  • INDEX_ID: The ID of the index.
  • LOCATION: The region where you are using Vertex AI.
  • PROJECT_ID: Your Google Cloudproject ID.
  • PROJECT_NUMBER: Your project's automatically generatedproject number.

HTTP method and URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex

Request JSON body:

{ "deployedIndex": {   "id": "DEPLOYED_INDEX_ID",   "index": "projects/PROJECT_ID/locations/LOCATION/indexes/INDEX_ID",   "displayName": "DEPLOYED_INDEX_ENDPOINT_NAME" }}

To send your request, expand one of these options:

curl (Linux, macOS, or Cloud Shell)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login , or by usingCloud Shell, which automatically logs you into thegcloud CLI . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex"

PowerShell (Windows)

Note: The following command assumes that you have logged in to thegcloud CLI with your user account by runninggcloud init orgcloud auth login . You can check the currently active account by runninggcloud auth list.

Save the request body in a file namedrequest.json, and execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID:deployIndex" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/indexEndpoints/INDEX_ENDPOINT_ID/operations/OPERATION_ID", "metadata": {   "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployIndexOperationMetadata",   "genericMetadata": {     "createTime": "2022-10-19T17:53:16.502088Z",     "updateTime": "2022-10-19T17:53:16.502088Z"   },   "deployedIndexId": "DEPLOYED_INDEX_ID" }}

Terraform

The following sample uses thevertex_ai_index_endpoint_deployed_index Terraform resource to create a deployed index endpoint.

To learn how to apply or remove a Terraform configuration, seeBasic Terraform commands.

provider"google"{region="us-central1"}resource"google_vertex_ai_index_endpoint_deployed_index""default"{depends_on=[google_vertex_ai_index_endpoint.default]index_endpoint=google_vertex_ai_index_endpoint.default.idindex=google_vertex_ai_index.default.iddeployed_index_id="deployed_index_for_psc"}resource"google_vertex_ai_index_endpoint""default"{display_name="sample-endpoint"description="A sample index endpoint with Private Service Connect enabled"region="us-central1"private_service_connect_config{enable_private_service_connect=trueproject_allowlist=[data.google_project.project.project_id,]}}data"google_project""project"{}# Cloud Storage bucket name must be uniqueresource"random_id""default"{byte_length=8}# Create a Cloud Storage bucketresource"google_storage_bucket""bucket"{name="vertex-ai-index-bucket-${random_id.default.hex}"location="us-central1"uniform_bucket_level_access=true}# Create index contentresource"google_storage_bucket_object""data"{name="contents/data.json"bucket=google_storage_bucket.bucket.namecontent=<<EOF{"id":"42", "embedding": [0.5, 1.0], "restricts": [{"namespace": "class", "allow": ["cat", "pet"]},{"namespace": "category", "allow": ["feline"]}]}{"id":"43", "embedding": [0.6, 1.0], "restricts": [{"namespace": "class", "allow": ["dog", "pet"]},{"namespace": "category", "allow": ["canine"]}]}EOF}resource"google_vertex_ai_index""default"{region="us-central1"display_name="sample-index-batch-update"description="A sample index for batch update"labels={foo="bar"}metadata{contents_delta_uri="gs://${google_storage_bucket.bucket.name}/contents"config{dimensions=2approximate_neighbors_count=150distance_measure_type="DOT_PRODUCT_DISTANCE"algorithm_config{tree_ah_config{leaf_node_embedding_count=500leaf_nodes_to_search_percent=7}}}}index_update_method="BATCH_UPDATE"timeouts{create="2h"update="1h"}}

Python

To learn how to install or update the Vertex AI SDK for Python, seeInstall the Vertex AI SDK for Python. For more information, see thePython API reference documentation.

defvector_search_deploy_index(project:str,location:str,index_name:str,index_endpoint_name:str,deployed_index_id:str,)->None:"""Deploy a vector search index to a vector search index endpoint.Args:project(str):Required.ProjectIDlocation(str):Required.Theregionnameindex_name(str):Required.Theindextoupdate.Afully-qualifiedindexresourcenameoraindexID.Example:"projects/123/locations/us-central1/indexes/my_index_id"or"my_index_id".index_endpoint_name(str):Required.Indexendpointtodeploytheindexto.deployed_index_id(str):Required.TheuserspecifiedIDoftheDeployedIndex."""#InitializetheVertexAIclientaiplatform.init(project=project,location=location)#Createtheindexinstancefromanexistingindexindex=aiplatform.MatchingEngineIndex(index_name=index_name)#Createtheindexendpointinstancefromanexistingendpoint.index_endpoint=aiplatform.MatchingEngineIndexEndpoint(index_endpoint_name=index_endpoint_name)#DeployIndextoEndpointindex_endpoint=index_endpoint.deploy_index(index=index,deployed_index_id=deployed_index_id)print(index_endpoint.deployed_indexes)

Console

Use these instructions to deploy your index.

  1. In the Vertex AI section of the Google Cloud console, go to theDeploy and Use section. SelectVector Search.

    Go to Vector Search. A list of your active indexes is displayed.

  2. Select the name of the index you want to deploy. The index details page opens.
  3. From the index details page, click Deploy to endpoint. The index deployment panel opens.
  4. Enter a display name - this name acts as an ID and can't be updated.
  5. From theEndpoint drop-down, select the endpoint you want to deploy this index to. Note: The endpoint is unavailable if the index is already deployed to it.
  6. Optional: In theMachine type field, select either standard or high-memory.
  7. Optional. SelectEnable autoscaling to automatically resize the number of nodes based on the demands of your workloads. The default number of replicas is 2 if autoscaling is disabled.
  8. ClickDeploy to deploy your index to the endpoint. Note: It takes around 30 minutes to be deployed.

Create a forwarding rule in the VPC project

After index deployment is done, the index endpoint returns a service attachmentURIinstead of an IP address. You need to create a compute address, as well asa forwarding rule in the VPC project targeting the service attachmentusing the created compute address. To create a compute address, use the following example:

gcloudcomputeaddressescreate${ADDRESS_NAME:?}\--region=${REGION:?}\--subnet=${SUBNET_NAME:?}\--project=${VPC_PROJECT:?}

To create a forwarding rule targeting the service attachment URI using the createdcompute address, use the following example:

SERVICE_ATTACHMENT_URI=`gcloudaiindex-endpointsdescribe{INDEX_ENDPOINT_ID}--format="value(deployedIndexes.privateEndpoints.serviceAttachment)"`gcloudcomputeforwarding-rulescreate${ENDPOINT_NAME:?}\--network=${NETWORK_NAME:?}\--address=${ADDRESS_NAME:?}\--target-service-attachment=${SERVICE_ATTACHMENT_URI:?}\--project=${VPC_PROJECT:?}\--region=${REGION:?}

(Optional) Create DNS record for the IP address

If you want to connect and load without memorizing the actual IP address, you cancreate a DNS record. This step is optional.

DNS_NAME_SUFFIX=matchingengine.vertexai.goog.# Don't forget the "." in the end.DNS_NAME=${INDEX_ENDPOINT_ID:?}.${REGION:?}.${DNS_NAME_SUFFIX:?}gclouddnsmanaged-zonescreate${DNS_ZONE_NAME:?}\--dns-name=${DNS_NAME_SUFFIX:?}\--visibility=private\--project=${VPC_PROJECT:?}\--region=${REGION:?}gclouddnsrecord-setscreate${DNS_NAME:?}\--rrdatas=${IP_ADDRESS:?}\--type=A--ttl=60\--zone=${DNS_ZONE_NAME:?}\--project=${VPC_PROJECT:?}\--region=${REGION:?}

Send queries to the index endpoint

Now that you've created an endpoint with Private Service Connectand created the index, you can begin running queries.

To query your index, seeQuery indexes to get nearest neighbors.

What's next

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-02-18 UTC.