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é-empaquetées avec JupyterLab.

Les instances de notebooks gérés par l'utilisateur disposent d'une suite de packages de deep learning préinstallée 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, en s'appuyant sur les bonnes pratiques décrites dans "Mise en réseau et sécurité". Voici les étapes à suivre:

  1. Créer un VPC
  2. Créer un routeur Cloud Router et un Cloud NAT
  3. Configurer 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 un Cloud NAT
  • Créer un notebook géré par l'utilisateur
  • Accéder à un notebook géré par l'utilisateur
  • Surveiller l'état des notebooks gérés par l'utilisateur
  • Créer et appliquer une planification d'instance

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 se compose de 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, constitué d'un sous-réseau régional (us-central1), en plus de Cloud Router et de Cloud NAT permettant au notebook géré par l'utilisateur d'établir de manière sécurisée une connectivité à Internet.

Figure 2

2292244ba0b11f71.png

VPC partagé

Le VPC partagé vous permet d'exporter des sous-réseaux d'un réseau VPC appartenant à 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é mondial, dans lequel l'infrastructure de mise en 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 d'autres solutions plus complexes. Le VPC partagé est un outil efficace pour les organisations comprenant plusieurs équipes, car il 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 le 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 normatives pour réduire le trafic non sollicité.Par exemple, évitez d'utiliser le protocole 0.0.0.0/0 tcp et définissez les adresses IP exactes des sous-réseaux ou des hôtes.
  • Appliquez des règles de pare-feu pour étendre le champ d'application des règles d'entrée (géolocalisation, listes de renseignements sur les menaces, noms de domaines sources, etc.).

3. Bonnes pratiques concernant les notebooks

Dimensionner correctement vos instances

  • Arrêter et/ou supprimer des instances inutilisées
  • Utiliser une instance initiale plus petite et effectuer une itération avec des échantillons de données plus petits
  • Effectuer un scaling à la hausse des instances selon les besoins
  • Tester des ensembles de données plus petits

Choisir les bons types de machines

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

Programmer l'arrêt de vos instances

  • Arrêter les instances lorsqu'elles sont inactives (uniquement pour le stockage sur disque)
  • Programmer les instances de VM de notebook pour qu'elles s'arrêtent et démarrent automatiquement à des heures spécifiques

Surveiller l'état de fonctionnement du notebook

Remarques 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 "Un seul utilisateur" l'accès aux notebooks. 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 fichier à partir de l'interface utilisateur 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 $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, effectuez les opérations suivantes:

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, effectuez les opérations suivantes:

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, effectuez les opérations suivantes:

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 Cloud Router et NAT

Cloud NAT est utilisé dans le tutoriel sur le téléchargement de packages logiciels de notebook, car l'instance de notebook gérée 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 à communiquer avec un notebook géré par l'utilisateur, ce qui le rend plus sûr.

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 contiendra 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 que vous préférez.

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

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

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

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

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

Pour permettre 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

Importer le script post-démarrage dans votre bucket de stockage à partir de Cloud Shell à l'aide de gsutil

gsutil cp poststartup.sh gs://$BUCKET_NAME

8. Créer un compte de service

Pour fournir un niveau de contrôle précis sur le notebook géré par l'utilisateur, vous avez besoin d'un compte de service. Une fois générés, les autorisations du compte de service peuvent être modifiées en fonction des exigences métier. 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, mettez à jour le compte de service avec le rôle "Lecteur des objets Storage".

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 pour créer le 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 sécurisé géré par l'utilisateur

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 éventuellement inclure des 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. Dans la section "Détails" de la page "Créer un notebook géré par l'utilisateur", fournissez les informations suivantes pour votre nouvelle instance:
  • Nom: indiquez un nom pour la nouvelle instance.
  • Région et zone: le 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 post-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", indiquez les informations suivantes:
  • Type de machine: sélectionnez le nombre de processeurs et la quantité de RAM de votre nouvelle instance. Vertex AI Workbench fournit des estimations de 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 automatiquement pour moi".

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", renseignez les champs suivants:
  • Disques (facultatif) : pour modifier les paramètres par défaut du disque de démarrage ou de données, 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. Pour en savoir plus sur les types de disques, consultez la page Options de stockage.
  • Supprimer dans la corbeille : (facultatif) cochez cette case pour utiliser le comportement par défaut de la corbeille du système d'exploitation. Dans ce cas, vous pouvez récupérer les fichiers supprimés à l'aide de l'interface utilisateur JupyterLab, mais ces fichiers 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", puis 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 attribuer 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é pour celui-ci, 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é", renseignez 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, par exemple: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com

Options de sécurité

  • Désélectionnez "Activer l'accès racine à l'instance"
  • Désélectionner "Activer nbconvert"
  • Désélectionnez "Activer le téléchargement de fichiers à partir de l'interface utilisateur 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", indiquez les informations suivantes :

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

  • Cochez la case "Activer la mise à niveau automatique de l'environnement".
  • Choisissez de mettre à niveau votre notebook de manière hebdomadaire ou mensuelle.

Dans la section "É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 que vous avez spécifiées et démarre automatiquement l'instance. Lorsque l'instance est prête à l'emploi, Vertex AI Workbench active un lien Ouvrir JupyterLab pour permettre à 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 de votre système et de vos 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 de l'application pour votre instance.

12. Créer une programmation de notebook

La programmation d'instances vous permet de démarrer et d'arrêter automatiquement des instances de machines virtuelles (VM). Utiliser des planifications 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 planifications d'instances pour les charges de travail récurrentes et ponctuelles. Par exemple, utilisez des planifications d'instances pour n'exécuter les instances de VM que pendant les heures de travail ou pour fournir de la capacité pour un événement ponctuel.

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

Ce tutoriel vous montre comment créer une programmation d'instance qui allumera votre notebook à 7h et l'éteindra à 18h.

Pour créer la planification d'instance, vous devez disposer des autorisations compute.instances.start et compute.instances.stop. Il est donc recommandé d'utiliser un rôle personnalisé, créé par l'administrateur qui vous a été accordé.

Une fois créé, le rôle personnalisé sera attribué au compte de service Compute Engine par défaut dans votre projet, ce qui permettra à la planification 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

Mettre à jour le compte de service par défaut

Dans la section suivante, vous allez identifier et mettre à jour le compte de service par défaut au format suivant: 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, attribuez le rôle personnalisé VM_Scheduler au compte de service Compute par défaut.

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

Créer la planification d'instance

Dans Cloud Shell, créez les planifications de début 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 planification d'instance à toute instance de VM existante située dans la même région que la planification d'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 de la console, 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 configuré et validé un notebook géré par l'utilisateur sécurisé en créant un VPC autonome personnalisé en suivant les bonnes pratiques de renforcement de la sécurité pour les notebooks gérés. Vous avez également implémenté une programmation d'instances pour optimiser les dépenses.

Et ensuite ?

Découvrez quelques-uns de ces tutoriels...

Complément d'informations et Vidéos

Documents de référence