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 Gemini en el proyecto de servicio, ph-fm-svc-project (proyecto de servicio de modelo de base) 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 requieren acceso 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 las instalaciones locales con Acceso privado a Google o las estaciones de trabajo en la nube), 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 de la empresa acceda a la consola de Google Cloud.

Access Context Manager permite a los administradores de organizaciones de Google Cloud definir un control de acceso detallado basado en atributos para proyectos y recursos enGoogle 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. Para crear un nivel de acceso básico, sigue las instrucciones que se indican en 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 cumple la condición, muestra, elige VERDADERO.
    4. En Subredes de IP, elige IP pública.
    5. Para el rango de direcciones IP, especifica el rango de 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, especificas los proyectos protegidos para permitir el acceso a los servicios protegidos desde fuera del perímetro. Cuando usas los Controles del servicio de VPC con VPC compartida, creas un perímetro grande que incluye los proyectos host y de servicio. (Si solo seleccionas el proyecto de servicio en tu perímetro, los extremos de red que pertenecen a los proyectos de servicio parecen estar fuera del perímetro, ya que las subredes solo están asociadas con el proyecto host).

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

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

  1. En el menú de navegación de la consola de Google Cloud, haz clic en Seguridad y, 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 latín ASCII (a-z, AZ), 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 quieres 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 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 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 habilita solo las APIs necesarias para Gemini. Sin embargo, como práctica recomendada, te recomendamos 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

La 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, mantenemos la configuración predeterminada 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 crearlo.

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 de 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 la VPC-SC de destino, que se usa como IP virtual (VIP) para acceder a servicios restringidos configurados en el perímetro de la 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 Cloud se establece mediante túneles de red privada virtual con alta disponibilidad (HA VPN). Esta conexión segura facilita la comunicación privada entre los dos entornos de nube. Sin embargo, para permitir el enrutamiento y la comunicación sin problemas entre los recursos de 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. Cuando se anuncia esta dirección IP, AWS puede establecer una ruta directa a la API de Google, omitir la Internet pública y mejorar el rendimiento.

En la arquitectura de referencia, se implementa una instancia de Sagemaker con una asociación con la VPC de AWS en la que se establece la VPN con Google Cloud. El protocolo de puerta de enlace de frontera (BGP) se usa para anunciar rutas a través de la VPN de HA entre AWS y la red de Google Cloud . Como resultado, Google Cloud y AWS pueden enrutar el tráfico bidireccional a través de una VPN. Para obtener más información sobre cómo 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 la API de Vertex AI para llegar a Gemini, Route 53 muestra la dirección IP de las APIs de Google de Private Service Connect. Jupyter Notebook 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 enrutado a través de la VPN de HA 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 admiten VPC, como Amazon EC2 o AWS Lambda.

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

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

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

Instrucciones para usar el SDK de Vertex AI para Python

  1. Instala el SDK:

    pip install --upgrade google-cloud-aiplatform
    
  2. Importa las dependencias:

    from google.cloud import aiplatform
    from vertexai.generative_models import GenerativeModel, Part, SafetySetting
    import vertexai
    import base64
    
  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 a s us-central1
    API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint
    MODEL_ID="gemini-1.5-flash-002" # Gemini Model ID
    
  4. Inicializa el SDK de Vertex AI para Python:

    vertexai.init(project=PROJECT_ID,api_endpoint=API_ENDPOINT, api_transport="rest")
    
  5. Realiza la siguiente solicitud a la API de Gemini de Vertex AI:

    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)
    

    En este punto, puedes realizar una llamada a la API de Gemini desde el 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 usarán durante el proceso. Estas variables almacenan información sobre tu proyecto, como la ubicación de tus recursos, el modelo específico de Gemini y el extremo de Private Service Connect que deseas usar.

  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 de 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 el modo de ejecución de prueba, lo que te permite probar el efecto de la política de acceso sin aplicación forzosa. Esto significa que puedes ver cómo tus políticas afectarían tu entorno si estuvieran activas, pero sin correr 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 de aplicación forzosa.

¿Qué sigue?