Vertex AI crée un notebook sécurisé géré par l'utilisateur

1. Introduction

Les instances de notebooks gérés par l'utilisateur Vertex AI Workbench vous permettent de créer et de gérer des instances de machine virtuelle (VM) de deep learning préinstallées avec JupyterLab.

Les instances de notebooks gérés par l'utilisateur disposent d'une suite préinstallée de packages de deep learning, assurant la compatibilité avec les frameworks TensorFlow et PyTorch. Vous pouvez configurer des instances reposant uniquement sur le processeur ou des instances utilisant un ou plusieurs GPU.

Objectifs de l'atelier

Ce tutoriel décrit le processus de déploiement d'un notebook sécurisé géré par l'utilisateur, basé sur les bonnes pratiques de mise en réseau et de sécurité. Voici les étapes à suivre :

  1. Créer un VPC
  2. Créer un routeur Cloud Router et Cloud NAT
  3. Configurez l'instance de notebook avec les paramètres de sécurité appropriés.

Ce tutoriel fournit des instructions détaillées pour chaque étape. Il inclut également des conseils et des bonnes pratiques pour sécuriser les notebooks gérés par l'utilisateur. La figure 1 illustre le déploiement à l'aide d'un VPC autonome.

Figure 1

2292244ba0b11f71.png

Points abordés

  • Déterminer si un VPC partagé ou autonome est adapté à votre organisation
  • Créer un VPC autonome
  • Créer un routeur Cloud Router et Cloud NAT
  • Créer un notebook géré par l'utilisateur
  • Accéder à un notebook géré par l'utilisateur
  • Surveiller l'état de fonctionnement des notebooks gérés par l'utilisateur
  • Créer et appliquer une programmation d'instances

Prérequis

  • Projet Google Cloud

Autorisations IAM

2. Réseau VPC

Un réseau VPC est semblable à un réseau physique, sauf qu'il est virtualisé dans Google Cloud. Un réseau VPC est une ressource globale qui consiste en des sous-réseaux régionaux. Les réseaux VPC sont isolés de façon logique les uns des autres dans Google Cloud.

VPC autonome

La figure 2 est un exemple de VPC mondial autonome composé d'un sous-réseau régional (us-central1), en plus de Cloud Router et Cloud NAT utilisés pour permettre au notebook géré par l'utilisateur d'établir une connectivité sécurisée à Internet.

Figure 2

2292244ba0b11f71.png

VPC partagé

Le VPC partagé vous permet d'exporter des sous-réseaux d'un réseau VPC dans un projet hôte vers des projets de service de la même organisation. Le projet hôte contient des ressources réseau partagées avec le projet de service, telles que des sous-réseaux, Cloud NAT et des règles de pare-feu. Le projet de service contient des ressources au niveau de l'application qui exploitent les ressources réseau du projet hôte.

La figure 3 illustre un VPC partagé global, dans lequel l'infrastructure réseau et de sécurité est déployée dans le projet hôte, tandis que les charges de travail sont déployées dans le projet de service.

Figure 3

1354a9323c8e5787.png

VPC autonome ou VPC partagé

Un seul réseau VPC suffit pour de nombreux cas d'utilisation simples, car il est plus facile à créer, à gérer et à comprendre que les alternatives plus complexes. Le VPC partagé est un outil efficace pour les organisations comprenant plusieurs équipes, car il leur permet d'étendre la simplicité architecturale d'un seul réseau VPC à plusieurs groupes de travail grâce à l'utilisation de projets de service.

Bonnes pratiques concernant les VPC utilisées dans le tutoriel

  • Activez Cloud NAT pour accéder au notebook.
  • Activez l'accès privé à Google lorsque vous créez des sous-réseaux.
  • Créez des règles de pare-feu prescriptives pour réduire le trafic indésirable.Par exemple, n'utilisez pas 0.0.0.0/0 tcp, mais définissez les adresses IP exactes des sous-réseaux ou des hôtes.
  • Utilisez des stratégies de pare-feu pour élargir le champ d'application des règles d'entrée (par exemple, les géolocalisations, les listes de renseignements sur les menaces, les noms de domaine source, etc.).

3. Bonnes pratiques concernant les notebooks

Dimensionner correctement vos instances

  • Arrêter et/ou supprimer les instances inutilisées
  • Utiliser une instance initiale plus petite et itérer avec des exemples de données plus petits
  • Effectuer un scaling à la hausse des instances si nécessaire
  • Faites des tests avec des ensembles de données plus petits

Sélectionner les bons types de machines

  • VM optimisées pour les coûts
  • Mieux utiliser les ressources matérielles pour réduire les coûts
  • Jusqu'à 31 % d'économies par rapport aux VM N1
  • Économies supplémentaires (20 à 50 %) pour les engagements d'un ou trois ans
  • Augmenter la taille de la machine ou ajouter des GPU peut améliorer les performances et aider à surmonter les erreurs de limitation de mémoire.

Programmer l'arrêt de vos instances

  • Désactiver les instances lorsqu'elles sont inactives (ne payer que le stockage sur disque)
  • Programmer l'arrêt et le démarrage automatiques des instances de VM de notebooks à des heures spécifiques

Surveiller l'état d'un notebook

Points à noter concernant la sécurité

Voici les considérations de sécurité recommandées lors de la création d'un notebook géré par l'utilisateur :

  • Sélectionnez l'option d'accès au notebook "un seul utilisateur". Si l'utilisateur spécifié n'est pas le créateur de l'instance, vous devez lui attribuer le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service de l'instance.
  • Désactivez les options suivantes :
  • accès root
  • nbconvert
  • Téléchargement de fichiers à partir de l'interface utilisateur de JupyterLab
  • Cloud NAT sera utilisé au lieu d'attribuer une adresse IP externe au notebook géré par l'utilisateur.
  • Sélectionnez les options de calcul suivantes :
  • Démarrage sécurisé
  • Module vTPM (Virtual Trusted Platform Module)
  • Surveillance de l'intégrité

4. Avant de commencer

Mettre à jour le projet pour qu'il soit compatible avec le tutoriel

Ce tutoriel utilise des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, procédez comme suit :

gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid

5. Configuration du VPC

Créer le VPC autonome

Dans Cloud Shell, procédez comme suit :

gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom

Créer le sous-réseau de notebooks gérés par l'utilisateur

Dans Cloud Shell, procédez comme suit :

gcloud compute networks subnets create securevertex-subnet-a --project=$projectid --range=10.10.10.0/28 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access

Configuration de Cloud Router et de NAT

Cloud NAT est utilisé dans le tutoriel pour le téléchargement de packages logiciels de notebooks, car l'instance de notebooks gérés par l'utilisateur ne possède pas d'adresse IP externe. Cloud NAT offre également des fonctionnalités NAT de sortie, ce qui signifie que les hôtes Internet ne sont pas autorisés à initier une communication avec un notebook géré par l'utilisateur, ce qui le rend plus sécurisé.

Dans Cloud Shell, créez le routeur cloud régional.

gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1

Dans Cloud Shell, créez la passerelle Cloud NAT régionale.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

6. Créer un bucket de stockage

Les buckets de stockage permettent d'importer et de récupérer des fichiers de manière sécurisée. Dans le tutoriel, le stockage cloud contient un script post-démarrage permettant d'installer des packages d'IA générative dans les notebooks gérés par l'utilisateur.

Créez un bucket Cloud Storage et remplacez BUCKET_NAME par un nom unique de votre choix.

Dans Cloud Shell, créez un bucket de stockage unique.

gsutil mb -l us-central1 -b on gs://BUCKET_NAME

Stocker "BUCKET_NAME" pendant la durée de l'atelier

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

7. Créer un script post-démarrage

Pour activer le téléchargement des packages d'IA générative, créez un script post-démarrage dans Cloud Shell à l'aide de l'éditeur vi ou nano, puis enregistrez-le sous le nom poststartup.sh.

#! /bin/bash
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
cd /home/jupyter
echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Installing python packages" >> /tmp/notebook_config.log 2&1
su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
     google-cloud-bigquery \
     google-cloud-pipeline-components \
     google-cloud-aiplatform \
     seaborn \
     kfp" >> /tmp/notebook_config.log 2>&1

Exemple :

vpc_admin@cloudshell$ more poststartup.sh 
#! /bin/bash
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
cd /home/jupyter
echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
echo "Current user: id" >> /tmp/notebook_config.log 2>&1
echo "Installing python packages" >> /tmp/notebook_config.log 2&1
su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
     google-cloud-bigquery \
     google-cloud-pipeline-components \
     google-cloud-aiplatform \
     seaborn \
     kfp" >> /tmp/notebook_config.log 2>&1

Importez le script post-démarrage dans votre bucket de stockage depuis Cloud Shell à l'aide de gsutil.

gsutil cp poststartup.sh gs://$BUCKET_NAME

8. Créer un compte de service

Pour contrôler précisément le notebook géré par l'utilisateur, un compte de service est requis. Une fois générées, les autorisations du compte de service peuvent être modifiées en fonction des besoins de l'entreprise. Dans le tutoriel, les règles suivantes seront appliquées au compte de service :

Vous devez l'API Service Account avant de continuer.

Dans Cloud Shell, créez le compte de service.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

Dans Cloud Shell, attribuez le rôle "Lecteur des objets Storage" au compte de service.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"

Dans Cloud Shell, mettez à jour le compte de service avec le rôle Utilisateur Vertex AI.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Dans Cloud Shell, listez le compte de service et notez l'adresse e-mail qui sera utilisée lors de la création du notebook géré par l'utilisateur.

gcloud iam service-accounts list

Exemple :

$ gcloud iam service-accounts list
DISPLAY NAME: user-managed-notebook-sa
EMAIL: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
DISABLED: False

9. Créer un notebook géré par l'utilisateur sécurisé

Une instance de notebooks gérés par l'utilisateur est une instance de machine virtuelle de deep learning sur laquelle les dernières bibliothèques de machine learning et de data science sont préinstallées. Vous pouvez choisir d'inclure ou non les GPU Nvidia pour l'accélération matérielle.

Activer les API grand public

l'API Notebooks

Créer le notebook géré par l'utilisateur

  1. Accéder à Workbench
  2. Sélectionnez "Notebooks gérés par l'utilisateur", puis "Créer un notebook". La page "Créer un notebook géré par l'utilisateur" s'ouvre.
  3. Si un notebook existant est déployé, sélectionnez Notebooks gérés par l'utilisateur → Nouveau notebook → Personnaliser.
  4. Sur la page "Créer un notebook géré par l'utilisateur", dans la section "Détails", fournissez les informations suivantes pour votre nouvelle instance :
  • Nom : donnez un nom à la nouvelle instance.
  • Région et zone : ce tutoriel utilise la région us-central1 et la zone us-central1-a.

Sélectionnez Continuer.

  1. Dans la section Environnement, indiquez les éléments suivants :
  • Système d'exploitation : sélectionnez le système d'exploitation que vous souhaitez utiliser.
  • Sélectionnez l'environnement que vous souhaitez utiliser.
  • Version : sélectionnez la version que vous souhaitez utiliser.
  • Script consécutif au démarrage (facultatif,utilisez le script d'IA générative créé précédemment) : sélectionnez "Parcourir" pour sélectionner un script à exécuter après le démarrage de l'instance.
  • Métadonnées (facultatif) : fournissez des clés de métadonnées personnalisées pour l'instance.

Sélectionnez Continuer.

  1. Dans la section "Type de machine", fournissez les informations suivantes :
  • Type de machine : sélectionnez le nombre de processeurs et la quantité de mémoire RAM de la nouvelle instance. Vertex AI Workbench fournit des estimations des coûts mensuels pour chaque type de machine que vous sélectionnez.
  • Type de GPU : sélectionnez le type de GPU et le nombre de GPU pour votre nouvelle instance. Pour en savoir plus sur les différents GPU, consultez la page GPU sur Compute Engine.
  • Cochez la case "Installer automatiquement le pilote de GPU NVIDIA".

VM protégée

  • Activer le démarrage sécurisé
  • Activer vTPM
  • Activer la surveillance de l'intégrité

Sélectionnez Continuer.

  1. Dans la section "Disques", indiquez les éléments suivants :
  • Disques (facultatif) : pour modifier les paramètres de disque de démarrage ou de disque de données par défaut, sélectionnez le type de disque de démarrage, la taille du disque de démarrage en Go, le type de disque de données et la taille du disque de données en Go de votre choix. Pour en savoir plus sur les types de disques, consultez Options de stockage.
  • Déplacer vers la corbeille (facultatif) : cochez cette case pour utiliser le comportement par défaut de la corbeille du système d'exploitation. Si vous utilisez le comportement par défaut de la corbeille, les fichiers supprimés à l'aide de l'interface utilisateur JupyterLab sont récupérables, mais ces fichiers supprimés utilisent de l'espace disque.
  • Sauvegarde (facultatif) : pour synchroniser un emplacement Cloud Storage avec le disque de données de votre instance, sélectionnez "Parcourir" et spécifiez l'emplacement Cloud Storage. Pour en savoir plus sur les coûts de stockage, consultez la page Tarifs de Cloud Storage.
  • Chiffrement : clé de chiffrement gérée par Google

Sélectionnez Continuer.

  1. Dans la section "Mise en réseau", indiquez les éléments suivants :
  • Mise en réseau : sélectionnez "Réseaux dans ce projet" ou "Réseaux partagés avec moi". Si vous utilisez un VPC partagé dans le projet hôte, vous devez également accorder le rôle Utilisateur de réseau Compute (roles/compute.networkUser) à l'agent de service Notebooks du projet de service.
  • Dans le champ "Réseau", sélectionnez le réseau de votre choix. Le tutoriel utilise le réseau securevertex-vpc. Vous pouvez sélectionner un réseau VPC, à condition que l'accès privé à Google soit activé sur ce réseau, ou que le réseau puisse accéder à Internet. Dans le champ "Sous-réseau", sélectionnez le sous-réseau de votre choix. Dans ce tutoriel, le sous-réseau securevertex-subnet-a est utilisé.
  • Désélectionner "Attribuer une adresse IP externe"
  • Sélectionnez "Autoriser l'accès proxy".

Sélectionnez Continuer.

81bb7dbe31fbf587.png

  1. Dans la section "IAM et sécurité", fournissez les informations suivantes :
  • Sélectionnez Un seul utilisateur, puis, dans le champ "Adresse e-mail de l'utilisateur", saisissez le compte utilisateur auquel vous souhaitez accorder l'accès. Si l'utilisateur spécifié n'est pas le créateur de l'instance, vous devez lui attribuer le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service de l'instance.
  • Désélectionnez "Utiliser le compte de service Compute Engine par défaut sur la VM pour appeler les API Google Cloud".
  • Saisissez l'adresse e-mail du compte de service que vous venez de créer. Exemple : user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com.

Options de sécurité

  • Désélectionnez "Activer l'accès root à l'instance".
  • Désélectionnez "Activer nbconvert".
  • Désélectionnez "Activer le téléchargement de fichiers à partir de l'interface utilisateur de JupyterLab".
  • Activer le terminal (désélectionner pour les environnements de production)

Sélectionnez Continuer.

e19f3cd05a2c1b7f.png

  1. Dans la section "État du système", fournissez les informations suivantes :

Mise à niveau de l'environnement et état du système

  • Cochez la case "Activer la mise à niveau automatique de l'environnement".
  • Vous pouvez choisir de mettre à niveau votre notebook toutes les semaines ou tous les mois.

Dans "État du système et rapports", cochez ou décochez les cases suivantes :

  • Activer les rapports sur l'état du système
  • Transmettre des métriques personnalisées à Cloud Monitoring
  • Installer l'agent Cloud Monitoring

Sélectionnez Créer.

10. Validation

Vertex AI Workbench crée une instance de notebooks gérés par l'utilisateur en fonction des propriétés spécifiées et la démarre automatiquement. Lorsque l'instance est prête à l'emploi, Vertex AI Workbench active un lien Ouvrir JupyterLab qui permet à l'utilisateur final d'accéder au notebook.

11. Observabilité

Surveiller les métriques du système et des applications à l'aide de Monitoring

Pour les instances de notebooks gérés par l'utilisateur sur lesquelles Monitoring est installé, vous pouvez surveiller les métriques du système et des applications à l'aide de la console Google Cloud :

  1. Dans la console Google Cloud, accédez à la page Notebooks gérés par l'utilisateur.
  2. Cliquez sur le nom de l'instance pour laquelle vous souhaitez afficher les métriques du système et de l'application.
  3. Sur la page Détails du notebook, cliquez sur l'onglet Surveillance. Examinez les métriques du système et des applications de votre instance.

12. Créer une programmation de notebook

Les programmations d'instances vous permettent de démarrer et d'arrêter automatiquement des instances de machine virtuelle (VM). L'utilisation de programmations d'instances pour automatiser le déploiement de vos instances de VM peut vous aider à optimiser les coûts et à gérer les instances de VM plus efficacement. Vous pouvez utiliser des programmations d'instances pour les charges de travail récurrentes et ponctuelles. Par exemple, utilisez des programmations d'instances pour n'exécuter des instances de VM que pendant les heures de travail ou pour fournir de la capacité pour un événement ponctuel.

Pour utiliser des programmations d'instances, créez une règle de ressources qui détaille le comportement de démarrage et d'arrêt, puis associez la règle à une ou plusieurs instances de VM.

Ce tutoriel vous explique comment créer une programmation d'instances qui allume votre notebook à 7h00 et l'éteint à 18h00.

Pour créer le calendrier d'instance, vous aurez besoin des autorisations compute.instances.start et compute.instances.stop. Nous vous recommandons donc d'utiliser un rôle personnalisé créé par l'administrateur qui vous a été accordé.

Une fois créé, le rôle personnalisé est attribué au compte de service Compute Engine par défaut de votre projet, ce qui permet au programme d'instance de démarrer et d'arrêter votre notebook.

Créer un rôle personnalisé

Dans Cloud Shell, créez un rôle personnalisé, VmScheduler, et incluez les autorisations nécessaires.

gcloud iam roles create Vm_Scheduler --project=$projectid \
    --title=vm-scheduler-notebooks \
    --permissions="compute.instances.start,compute.instances.stop" --stage=ga

Décrivez le rôle personnalisé à partir de Cloud Shell.

gcloud iam roles describe Vm_Scheduler --project=$projectid

Exemple :

$ gcloud iam roles describe Vm_Scheduler --project=$projectid
etag: BwX991B0_kg=
includedPermissions:
- compute.instances.start
- compute.instances.stop
name: projects/$projectid/roles/Vm_Scheduler
stage: GA
title: vm-scheduler-notebooks

Modifier le compte de service par défaut

Dans la section suivante, vous allez identifier et modifier le compte de service par défaut qui se présente au format PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Dans Cloud Shell, identifiez le numéro de projet actuel.

gcloud projects list --filter=$projectid

Dans Cloud Shell, stockez le numéro de projet en tant que variable.

project_number=your_project_number
echo $project_number

Dans Cloud Shell, mettez à jour le compte de service Compute par défaut avec le rôle personnalisé VM_Scheduler.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"

Créer la programmation d'instance

Dans Cloud Shell, créez la programmation de démarrage et d'arrêt.

gcloud compute resource-policies create instance-schedule optimize-notebooks \
    --region=us-central1 \
    --vm-start-schedule='0 7 * * *' \
    --vm-stop-schedule='0 18 * * *' \
        --timezone=America/Chicago

Dans Cloud Shell, stockez le nom de votre notebook.

gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm

Vous pouvez associer une programmation d'instances à toute instance de VM existante située dans la même région que celle de l'instance.

Dans Cloud Shell, associez la planification à votre notebook.

gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a

13. Effectuer un nettoyage

Supprimez le notebook géré par l'utilisateur depuis la console. Pour ce faire, accédez à Vertex AI → Workbench, puis sélectionnez et supprimez le notebook.

Dans Cloud Shell, supprimez les composants VPC.

gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet

gcloud compute routers nats delete cloud-nat-us-central1 --region=us-central1 --router=cloud-router-us-central1 --quiet

gcloud compute instances remove-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a --quiet

gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet

gcloud compute instances delete $notebook_vm --zone=us-central1-a --quiet

gcloud compute networks subnets delete securevertex-subnet-a --region=us-central1 --quiet 

gcloud iam service-accounts delete user-managed-notebook-sa@$projectid.iam.gserviceaccount.com --quiet 

gcloud projects remove-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"

gcloud iam roles delete Vm_Scheduler --project=$projectid

gcloud compute networks delete securevertex-vpc --quiet 

14. Félicitations

Bravo ! Vous avez réussi à configurer et à valider un notebook géré par l'utilisateur sécurisé en créant un VPC autonome personnalisé à l'aide des bonnes pratiques de renforcement de la sécurité pour les notebooks gérés. Vous avez également implémenté un calendrier d'instances pour optimiser les dépenses.

Et ensuite ?

Consultez ces tutoriels :

Lectures et vidéos complémentaires

Documents de référence