Permite el acceso multinube a recursos protegidos desde un extremo privado fuera de un perímetro de Controles del servicio de VPC

Arquitectura de referencia

En la siguiente arquitectura de referencia, se implementa una VPC compartida con un modelo de Gemini en el proyecto de servicio, ph-fm-svc-project (proyecto de servicio del modelo fundamental) con los atributos de la política de servicio que permiten el acceso privado a la API de Vertex AI desde AWS:

  • Un solo perímetro de Controles del servicio de VPC
  • Identidad del usuario definida por el proyecto

Diagrama de arquitectura del uso de los Controles del servicio de VPC para crear un perímetro de servicio.

Opcional: Crea el nivel de acceso

Si tus usuarios finales necesitan acceder a Vertex AI a través de la consola de Google Cloud , sigue las instrucciones de esta sección para crear un nivel de acceso de los Controles del servicio de VPC. Sin embargo, si el acceso programático a las APIs proviene de fuentes privadas (como en las instalaciones con Acceso privado a Google o Cloud Workstations), no se requiere el nivel de acceso.

En esta arquitectura de referencia, usamos un rango de CIDR corporativo, corp-public-block, para permitir que el tráfico de los empleados corporativos acceda a la consola de Google Cloud .

Access Context Manager permite a los administradores de la organización definir un control de acceso detallado basado en atributos para proyectos y recursos enGoogle Cloud. Google Cloud

Los niveles de acceso describen los requisitos que se deben cumplir para que se respeten las solicitudes. Estos son algunos ejemplos:

  • Tipo de dispositivo y sistema operativo (requiere una licencia de Chrome Enterprise Premium)
  • Dirección IP
  • Identidad de usuario

Si es la primera vez que la organización usa Access Context Manager, los administradores deben definir una política de acceso, que es un contenedor para los niveles de acceso y los perímetros de servicio.

  1. En el selector de proyectos en la parte superior de la consola de Google Cloud , haz clic en la pestaña Todos y, luego, selecciona tu organización.

  2. Crea un nivel de acceso básico siguiendo las instrucciones de la página Crea un nivel de acceso básico. Especifica las siguientes opciones:

    1. En Crear condiciones en, elige Modo básico.
    2. En el campo Título del nivel de acceso ingresa corp-public-block.
    3. En la sección Condiciones, para la opción Cuando se cumpla la condición, devolver, elige VERDADERO.
    4. En Subredes de IP, elige IP pública.
    5. Para el rango de direcciones IP, especifica tu rango CIDR externo que requiere acceso al perímetro de los Controles del servicio de VPC.

Compila el perímetro de servicio de los Controles del servicio de VPC

Cuando creas un perímetro de servicio, permites el acceso a los servicios protegidos desde fuera del perímetro especificando los proyectos protegidos. Cuando usas los Controles del servicio de VPC con la VPC compartida, creas un perímetro grande que incluye tanto el proyecto host como los proyectos de servicio. (Si solo seleccionas el proyecto de servicio en tu perímetro, los extremos de red que pertenecen a los proyectos de servicio parecerán estar fuera del perímetro, ya que las subredes solo están asociadas con el proyecto host).

Selecciona el tipo de configuración del nuevo perímetro.

En esta sección, crearás un perímetro de servicio de Controles del servicio de VPC en modo de ejecución de prueba. En el modo de ejecución de prueba, el perímetro registra los incumplimientos como si los perímetros fueran de aplicación forzosa, pero no impide el acceso a los servicios restringidos. Se recomienda usar el modo de ejecución de prueba antes de cambiar al modo obligatorio como práctica recomendada.

  1. En el menú de navegación de la consola de Google Cloud , haz clic en Seguridady, luego, en Controles del servicio de VPC.

    Ir a la página Controles del servicio de VPC

  2. En la página Controles del servicio de VPC, haz clic en Modo de ejecución de prueba.

  3. Haz clic en Perímetro nuevo.

  4. En la pestaña Nuevo perímetro de servicio de VPC, en el cuadro Nombre del perímetro, escribe un nombre para el perímetro. De lo contrario, acepta los valores predeterminados.

    El nombre de un perímetro puede tener una longitud máxima de 50 caracteres, debe comenzar con una letra y solo puede contener letras latinas ASCII (a-z, A-Z), números (0-9) o guiones bajos (_). El nombre del perímetro distingue mayúsculas de minúsculas y debe ser único dentro de una política de acceso.

Selecciona los recursos que deseas proteger

  1. Haz clic en Recursos de protección.

  2. Para agregar proyectos o redes de VPC que deseas proteger dentro del perímetro, haz lo siguiente:

    1. Haz clic en Agregar recursos.

    2. Para agregar proyectos al perímetro, en el panel Agregar recursos, haz clic en Agregar proyecto.

      1. Para seleccionar un proyecto, en el cuadro de diálogo Agregar proyectos, selecciona la casilla de verificación de ese proyecto. En esta arquitectura de referencia, seleccionamos los siguientes proyectos:

        • infra-host-project
        • aiml-host-project
        • ph-fm-svc-project
      2. Haz clic en Agregar los recursos seleccionados. Los proyectos agregados aparecen en la sección Proyectos.

Selecciona los servicios restringidos

En esta arquitectura de referencia, el alcance de las APIs restringidas es limitado, lo que permite solo las APIs necesarias para Gemini. Sin embargo, como práctica recomendada, te sugerimos que restrinjas todos los servicios cuando crees un perímetro para mitigar el riesgo de robo de datos de los servicios deGoogle Cloud .

Para seleccionar los servicios que deseas proteger dentro del perímetro, haz lo siguiente:

  1. Haz clic en Servicios restringidos.

  2. En el panel Servicios restringidos, haz clic en Agregar servicios.

  3. En el cuadro de diálogo Especificar los servicios que deseas restringir, selecciona API de Vertex AI.

  4. Haz clic en Agregar la API de Vertex AI.

Opcional: Selecciona los servicios accesibles de la VPC

El parámetro de configuración de servicios accesibles de VPC limita el conjunto de servicios a los que se puede acceder desde extremos de red dentro del perímetro de servicio. En esta arquitectura de referencia, conservamos el parámetro de configuración predeterminado de Todos los servicios.

Opcional: Selecciona el nivel de acceso

Si creaste un nivel de acceso CIDR corporativo en una sección anterior, haz lo siguiente para permitir el acceso a recursos protegidos desde fuera del perímetro:

  1. Haz clic en Niveles de acceso.

  2. Haz clic en el cuadro Selecciona el nivel de acceso.

    También puedes agregar niveles de acceso después de crear un perímetro.

  3. Selecciona la casilla de verificación correspondiente al nivel de acceso. (En esta arquitectura de referencia, es corp-public-block).

Políticas de entrada y salida

En esta arquitectura de referencia, no es necesario especificar ningún parámetro de configuración en los paneles Política de entrada o Política de salida.

Crea el perímetro

Una vez que hayas completado los pasos de configuración anteriores, haz clic en Crear perímetro para crear el perímetro.

Configura la conectividad de red entre AWS y las APIs de Google

Configura Private Service Connect para las APIs de Google

Private Service Connect para acceder a las APIs de Google es una alternativa al uso del acceso privado a Google o los nombres de dominio público para las APIs de Google. En este caso, el productor es Google.

El uso de Private Service Connect te permite hacer lo siguiente:

  • Crear una o más direcciones IP internas para acceder a las APIs de Google en diferentes casos de uso
  • Dirige el tráfico local a direcciones IP y regiones específicas cuando accedas a las APIs de Google.
  • Crea un nombre DNS de extremo personalizado que se use para resolver las APIs de Google.

En la arquitectura de referencia, se implementa un extremo de la API de Google de Private Service Connect llamado restricted, con la dirección IP 10.10.10.3,, con el VPC-SC de destino, que se usa como una IP virtual (VIP) para acceder a los servicios restringidos configurados en el perímetro del VPC-SC. No se admite la segmentación de servicios no restringidos con la VIP. Para obtener más información, consulta Información sobre el acceso a la API de Vertex AI | Google Cloud.

Configura la red de VPC de AWS

La conectividad de red entre Amazon Web Services (AWS) y Google Cloudse establece a través de túneles de red privada virtual con alta disponibilidad (VPN con alta disponibilidad). Esta conexión segura facilita la comunicación privada entre los dos entornos de nube. Sin embargo, para habilitar el enrutamiento y la comunicación sin problemas entre los recursos en AWS y Google Cloud, se emplea el Protocolo de puerta de enlace de frontera (BGP).

En el entorno Google Cloud , se requiere un anuncio de ruta personalizado. Esta ruta personalizada anuncia específicamente la dirección IP de la API de Google de Private Service Connect a la red de AWS. Al anunciar esta dirección IP, AWS puede establecer una ruta directa a la API de Google, lo que evita el uso de Internet pública y mejora el rendimiento.

En la arquitectura de referencia, se implementa una instancia de SageMaker asociada a la VPC de AWS en la que se establece la VPN con Google Cloud. El protocolo de puerta de enlace fronteriza (BGP) se usa para anunciar rutas a través de la VPN de alta disponibilidad entre la red de AWS y Google Cloud . Como resultado,Google Cloud y AWS pueden enrutar el tráfico bidireccional a través de la VPN. Si deseas obtener más información para configurar conexiones de VPN con alta disponibilidad, consulta Crea conexiones de VPN con alta disponibilidad entre Google Cloud y AWS.

Configura las actualizaciones de Route 53

Crea una zona alojada privada llamada p.googleapis.com en AWS Route 53 y agrega el nombre de dominio completamente calificado REGION-aiplatform-restricted.p.googleapis.com con la dirección IP 10.10.10.3 (IP de Googleapis de Private Service Connect) como el registro A de DNS. Cuando el SDK de Jupyter Notebook realiza una búsqueda de DNS para que la API de Vertex AI llegue a Gemini, Route 53 devuelve la dirección IP de las APIs de Google de Private Service Connect. El notebook de Jupyter usa la dirección IP obtenida de Route 53 para establecer una conexión con el extremo de las APIs de Google de Private Service Connect que se enruta a través de la VPN de alta disponibilidad en Google Cloud.

Configura las actualizaciones de SageMaker

Esta arquitectura de referencia usa instancias de notebooks de Amazon SageMaker para acceder a la API de Vertex AI. Sin embargo, puedes lograr la misma configuración con otros servicios de procesamiento que admitan VPC, como Amazon EC2 o AWS Lambda.

Para autenticar tus solicitudes, puedes usar una clave de cuenta de servicio de Google Cloud o la federación de Workload Identity. Para obtener información sobre cómo configurar la federación de identidades para cargas de trabajo, consulta Entorno local o con otro proveedor de servicios en la nube.

La instancia de Jupyter Notebook invoca una llamada a la API del modelo de Gemini alojado enGoogle Cloud . Para ello, realiza una resolución de DNS en el nombre de dominio completo personalizado de las APIs de Google de Private Service Connect REGION-aiplatform-restricted.p.googleapis.com, lo que anula el nombre de dominio completo predeterminado (REGION-aiplatform.googleapis.com).

Se puede llamar a la API de Vertex AI con REST, gRPC o el SDK. Para usar el nombre de dominio completamente calificado del cliente de Private Service Connect, actualiza API_ENDPOINT en el notebook de Jupyter con lo siguiente:

Instrucciones para usar el SDK de Vertex AI para Python

  1. Instala el SDK:

    pip install --upgrade google-genai
    
  2. Importa las dependencias:

    from google.cloud import genai
    from google.genai.types import (
       GenerateContentConfig,
       HarmBlockThreshold,
       HarmCategory,
       Part,
       SafetySetting
    )
    
  3. Inicializa las siguientes variables de entorno:

    PROJECT_ID="ph-fm-svc-projects" # Google Cloud Project ID
    LOCATION_ID="us-central1" # Enter Vertex AI Gemini region such as us-central1
    API_ENDPOINT="https://us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint
    MODEL_ID="gemini-2.0-flash-001" # Gemini Model ID
    
  4. Inicializa el SDK de Vertex AI para Python:

    from google import genai
    client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})
    
  5. Realiza la siguiente solicitud a la API de Gemini de Vertex AI:

    prompt = "which weighs more, 1kg feathers or 1kg stones"
    
    safety_settings = [
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_HARASSMENT,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
        SafetySetting(
            category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
            threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        ),
    ]
    
    response = client.models.generate_content(
        model=MODEL_ID,
        contents=prompt,
        config=GenerateContentConfig(
            safety_settings=safety_settings,
        ),
    )
    
    # Response will be `None` if it is blocked.
    print(response.text)
    

    En este punto, puedes realizar una llamada a la API de Gemini desde un notebook de Jupyter para acceder a Gemini alojado en Google Cloud. Si la llamada se realiza correctamente, el resultado se verá de la siguiente manera:

    They weigh the same. Both weigh 1 kilogram.
    

Instrucciones para usar la API de REST de Vertex AI

En esta sección, configurarás algunas variables importantes que se usan durante todo el proceso. Estas variables almacenan información sobre tu proyecto, la ubicación de tus recursos, el modelo de Gemini específico y el extremo de PSC que deseas usar. Abre una ventana de terminal dentro de un notebook de JupyterLab para ejecutar los siguientes comandos:

  1. Abre una ventana de terminal dentro de un notebook de Jupyter.

  2. Inicializa las siguientes variables de entorno:

    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-1.5-flash-002"
    
  3. Usa un editor de texto, como vim o nano, para crear un archivo nuevo llamado request.json que contenga la siguiente solicitud con formato para la API de Gemini de Vertex AI:

    {
        "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"
            }
        ]
    }
    
  4. Realiza la siguiente solicitud curl a la API de Gemini de Vertex AI:

    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'
    

Valida tu perímetro en modo de ejecución de prueba

En esta arquitectura de referencia, el perímetro de servicio se configura en modo de ejecución de prueba, lo que te permite probar el efecto de la política de acceso sin aplicación. Esto significa que puedes ver cómo tus políticas afectarían tu entorno si estuvieran activas, pero sin el riesgo de interrumpir el tráfico legítimo.

Después de validar tu perímetro en el modo de ejecución de prueba, cámbialo al modo aplicado.

¿Qué sigue?