Autoriser l'accès multicloud aux ressources protégées à partir d'un point de terminaison privé en dehors d'un périmètre VPC Service Controls

Architecture de référence

Dans l'architecture de référence suivante, un VPC partagé est déployé avec un modèle Gemini dans le projet de service ph-fm-svc-project (projet de service de modèle de base), avec les attributs de règle de service permettant un accès privé à l'API Vertex AI depuis AWS :

  • Un seul périmètre VPC Service Controls
  • Identité utilisateur définie au niveau du projet

Schéma d'architecture illustrant l'utilisation de VPC Service Controls pour créer un périmètre de service.

Facultatif : Créez le niveau d'accès

Si vos utilisateurs finaux ont besoin d'accéder à Vertex AI via la console Google Cloud , suivez les instructions de cette section pour créer un niveau d'accès VPC Service Controls. Toutefois, si l'accès programmatique aux API provient de sources privées (par exemple, sur site avec l'accès privé à Google ou Cloud Workstations), le niveau d'accès n'est pas requis.

Dans cette architecture de référence, nous utilisons une plage CIDR d'entreprise, corp-public-block, pour permettre au trafic des employés de l'entreprise d'accéder à la console Google Cloud .

Access Context Manager permet aux administrateurs d'organisation de définir un contrôle d'accès précis et basé sur des attributs pour les projets et les ressources dansGoogle Cloud. Google Cloud

Les niveaux d'accès décrivent les conditions requises pour que les requêtes soient honorées. Voici quelques exemples :

  • Type d'appareil et système d'exploitation (nécessite une licence Chrome Enterprise Premium)
  • Adresse IP
  • Identité des utilisateurs

Si l'organisation utilise Access Context Manager pour la première fois, les administrateurs doivent définir une règle d'accès, qui est un conteneur pour les niveaux d'accès et les périmètres de service.

  1. Dans le sélecteur de projet en haut de la console Google Cloud , cliquez sur l'onglet Tous, puis sélectionnez votre organisation.

  2. Créez un niveau d'accès de base en suivant les instructions de la page Créer un niveau d'accès de base. Spécifiez les options suivantes :

    1. Sous Créer des conditions en, sélectionnez Mode de base.
    2. Dans le champ Titre du niveau d'accès, saisissez corp-public-block.
    3. Dans la section Conditions, pour l'option Lorsque la condition est remplie, renvoyer, sélectionnez TRUE.
    4. Sous Sous-réseaux IP, sélectionnez Adresse IP publique.
    5. Pour la plage d'adresses IP, spécifiez votre plage CIDR externe qui nécessite un accès au périmètre VPC Service Controls.

Créer le périmètre de service VPC Service Controls

Lorsque vous créez un périmètre de service, vous autorisez l'accès aux services protégés depuis l'extérieur du périmètre en spécifiant les projets protégés. Lorsque vous utilisez VPC Service Controls avec un VPC partagé, vous créez un grand périmètre incluant à la fois le projet hôte et les projets de service. (Si vous ne sélectionnez que le projet de service dans votre périmètre, les points de terminaison réseau appartenant aux projets de service semblent se trouver en dehors du périmètre, car les sous-réseaux ne sont associés qu'au projet hôte.)

Sélectionnez le type de configuration du nouveau périmètre.

Dans cette section, vous allez créer un périmètre de service VPC Service Controls en mode dry run. En mode de simulation, le périmètre consigne les violations comme si les périmètres étaient appliqués, mais n'empêche pas l'accès aux services restreints. Il est recommandé d'utiliser le mode de simulation avant de passer au mode appliqué.

  1. Dans le menu de navigation de la console Google Cloud , cliquez sur Sécurité, puis sur VPC Service Controls.

    Accéder à la page VPC Service Controls

  2. Sur la page VPC Service Controls, cliquez sur Mode dry run.

  3. Cliquez sur Nouveau périmètre.

  4. Dans l'onglet Nouveau périmètre de service VPC, saisissez un nom dans le champ Nom du périmètre. Sinon, acceptez les valeurs par défaut.

    Un nom de périmètre peut comporter jusqu'à 50 caractères. Il doit commencer par une lettre et ne peut contenir que des lettres de l'alphabet latin ASCII (a-z, A-Z), des chiffres (0-9) ou des traits de soulignement (_). Le nom du périmètre est sensible à la casse et doit être unique dans une règle d'accès.

Sélectionnez les ressources à protéger.

  1. Cliquez sur Ressources à protéger.

  2. Pour ajouter les projets ou les réseaux VPC que vous souhaitez sécuriser au sein du périmètre, procédez comme suit :

    1. Cliquez sur Ajouter des ressources.

    2. Pour ajouter des projets au périmètre, dans le volet Ajouter des ressources, cliquez sur Ajouter un projet.

      1. Pour sélectionner un projet, cochez la case correspondante dans la boîte de dialogue Ajouter des projets. Dans cette architecture de référence, nous sélectionnons les projets suivants :

        • infra-host-project
        • aiml-host-project
        • ph-fm-svc-project
      2. Cliquez sur Ajouter les ressources sélectionnées. Les projets ajoutés apparaissent dans la section Projets.

Sélectionnez les services restreints.

Dans cette architecture de référence, le champ d'application des API restreintes est limité, ce qui permet d'activer uniquement les API nécessaires pour Gemini. Toutefois, nous vous recommandons de restreindre tous les services lorsque vous créez un périmètre pour limiter le risque d'exfiltration de données des servicesGoogle Cloud .

Pour sélectionner les services à sécuriser dans le périmètre, procédez comme suit :

  1. Cliquez sur Services restreints.

  2. Dans le volet Services restreints, cliquez sur Ajouter des services.

  3. Dans la boîte de dialogue Spécifier les services à limiter, sélectionnez API Vertex AI.

  4. Cliquez sur Ajouter l'API Vertex AI.

Facultatif : Sélectionnez les services accessibles par VPC

Le paramètre Services accessibles par VPC limite l'ensemble des services accessibles à partir de points de terminaison du réseau dans votre périmètre de service. Dans cette architecture de référence, nous conservons le paramètre par défaut Tous les services.

Facultatif : Sélectionnez le niveau d'accès

Si vous avez créé un niveau d'accès CIDR d'entreprise dans une section précédente, procédez comme suit pour autoriser l'accès aux ressources protégées depuis l'extérieur du périmètre :

  1. Cliquez sur Niveaux d'accès.

  2. Cochez la case Sélectionnez le niveau d'accès.

    Vous pouvez également ajouter des niveaux d'accès après la création d'un périmètre.

  3. Cochez la case correspondant au niveau d'accès. (Dans cette architecture de référence, il s'agit de corp-public-block.)

Règles d'Ingress et de sortie

Dans cette architecture de référence, il n'est pas nécessaire de spécifier de paramètres dans les volets Règle d'entrée ou Règle de sortie.

Créer le périmètre

Une fois les étapes de configuration précédentes effectuées, créez le périmètre en cliquant sur Créer un périmètre.

Configurer la connectivité réseau entre AWS et les API Google

Configurer Private Service Connect pour les API Google

L'accès aux API Google à l'aide de Private Service Connect est une alternative à l'utilisation de l'accès privé à Google ou des noms de domaine publics pour les API Google. Dans ce cas, le producteur est Google.

L'utilisation de Private Service Connect vous permet d'effectuer les opérations suivantes :

  • Créer une ou plusieurs adresses IP internes pour accéder aux API Google pour différents cas d'utilisation.
  • Diriger le trafic sur site vers des adresses IP et des régions spécifiques lors de l'accès aux API Google.
  • Créez un nom DNS de point de terminaison personnalisé utilisé pour résoudre les API Google.

Dans l'architecture de référence, un point de terminaison d'API Google Private Service Connect nommé restricted, avec l'adresse IP 10.10.10.3,, est déployé avec le VPC-SC cible, utilisé comme adresse IP virtuelle (VIP) pour accéder aux services restreints configurés dans le périmètre VPC-SC. Le ciblage de services non restreints avec l'adresse IP virtuelle n'est pas accepté. Pour en savoir plus, consultez À propos de l'accès à l'API Vertex AI | Google Cloud.

Configurer un réseau VPC AWS

La connectivité réseau entre Amazon Web Services (AWS) et Google Cloudest établie à l'aide de tunnels VPN haute disponibilité (HA VPN). Cette connexion sécurisée facilite la communication privée entre les deux environnements cloud. Toutefois, pour permettre un routage et une communication fluides entre les ressources d'AWS et Google Cloud, le protocole BGP (Border Gateway Protocol) est utilisé.

Dans l'environnement Google Cloud , une annonce de routage personnalisée est requise. Cette route personnalisée annonce spécifiquement l'adresse IP de l'API Google Private Service Connect au réseau AWS. En annonçant cette adresse IP, AWS peut établir un itinéraire direct vers l'API Google, en contournant l'Internet public et en améliorant les performances.

Dans l'architecture de référence, une instance Sagemaker est déployée avec une association au VPC AWS où le VPN est établi avec Google Cloud. Le protocole BGP (Border Gateway Protocol) est utilisé pour annoncer des routes sur le réseau VPN haute disponibilité entre AWS et Google Cloud . Par conséquent,Google Cloud et AWS peuvent acheminer le trafic bidirectionnel via un VPN. Pour en savoir plus sur la configuration des connexions VPN haute disponibilité, consultez Créer des connexions VPN haute disponibilité entre Google Cloud et AWS.

Configurer les mises à jour Route 53

Créez une zone hébergée privée nommée p.googleapis.com dans AWS Route 53 et ajoutez le nom de domaine complet REGION-aiplatform-restricted.p.googleapis.com avec l'adresse IP 10.10.10.3 (adresse IP Googleapis Private Service Connect) en tant qu'enregistrement DNS A. Lorsque le SDK Jupyter Notebook effectue une résolution DNS pour l'API Vertex AI afin d'accéder à Gemini, Route 53 renvoie l'adresse IP Private Service Connect des API Google. Jupyter Notebook utilise l'adresse IP obtenue à partir de Route 53 pour établir une connexion au point de terminaison Private Service Connect des API Google acheminé via VPN haute disponibilité vers Google Cloud.

Configurer les mises à jour de SageMaker

Cette architecture de référence utilise des instances de notebooks Amazon SageMaker pour accéder à l'API Vertex AI. Toutefois, vous pouvez obtenir la même configuration avec d'autres services de calcul compatibles avec VPC, tels qu'Amazon EC2 ou AWS Lambda.

Pour authentifier vos requêtes, vous pouvez utiliser une clé de compte de service Google Cloud ou la fédération d'identité de charge de travail. Pour savoir comment configurer la fédération d'identité de charge de travail, consultez Sur site ou auprès d'un autre fournisseur de services cloud.

L'instance de notebook Jupyter appelle une API au modèle Gemini hébergé dansGoogle Cloud en effectuant une résolution DNS vers le nom de domaine complet personnalisé Private Service Connect Google APIs REGION-aiplatform-restricted.p.googleapis.com, en remplaçant le nom de domaine complet par défaut (REGION-aiplatform.googleapis.com).

L'API Vertex AI peut être appelée à l'aide de Rest, gRPC ou du SDK. Pour utiliser le nom de domaine complet du client Private Service Connect, mettez à jour API_ENDPOINT dans le notebook Jupyter avec les éléments suivants :

Instructions pour utiliser le SDK Vertex AI pour Python

  1. Installez le SDK :

    pip install --upgrade google-genai
    
  2. Importez les dépendances :

    from google.cloud import genai
    from google.genai.types import (
       GenerateContentConfig,
       HarmBlockThreshold,
       HarmCategory,
       Part,
       SafetySetting
    )
    
  3. Définissez les variables d'environnement suivantes :

    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. Initialisez le SDK Vertex AI pour Python :

    from google import genai
    client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})
    
  5. Envoyez la requête suivante à l'API Vertex AI Gemini :

    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)
    

    À ce stade, vous pouvez effectuer un appel d'API à Gemini depuis un notebook Jupyter pour accéder à Gemini hébergé dans Google Cloud. Si l'appel aboutit, le résultat est semblable à ce qui suit :

    They weigh the same. Both weigh 1 kilogram.
    

Instructions pour utiliser l'API REST Vertex AI

Dans cette section, vous allez configurer des variables importantes qui seront utilisées tout au long du processus. Ces variables stockent des informations sur votre projet, l'emplacement de vos ressources, le modèle Gemini spécifique et le point de terminaison PSC que vous souhaitez utiliser. Ouvrez une fenêtre de terminal dans un notebook JupyterLab pour exécuter les commandes suivantes :

  1. Ouvrez une fenêtre de terminal dans un notebook Jupyter.

  2. Définissez les variables d'environnement suivantes :

    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. Utilisez un éditeur de texte tel que vim ou nano pour créer un fichier nommé request.json et contenant la requête formatée suivante pour l'API Gemini 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. Envoyez la requête cURL suivante à l'API Vertex AI Gemini :

    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'
    

Valider votre périmètre en mode de simulation

Dans cette architecture de référence, le périmètre de service est configuré en mode de simulation, ce qui vous permet de tester l'effet de la règle d'accès sans l'appliquer. Cela signifie que vous pouvez voir l'impact de vos règles sur votre environnement si elles étaient actives, mais sans risquer de perturber le trafic légitime.

Après avoir validé votre périmètre en mode de simulation, passez-le en mode appliqué.

Étapes suivantes