Ce tutoriel est destiné aux data scientists, aux chercheurs et aux administrateurs réseau d'entreprise. Il montre comment sécuriser une instance de notebooks gérés par l'utilisateur en la créant dans un réseau cloud privé virtuel (VPC).
Un réseau VPC est une version virtuelle d'un réseau physique, mise en œuvre au sein du réseau de production de Google Il s'agit d'un réseau privé, avec ses propres adresses IP, sous-réseaux et passerelles réseau. Dans l'entreprise, les réseaux VPC permettent de protéger les données et les instances en contrôlant l'accès à ceux-ci depuis d'autres réseaux et depuis Internet.
Le réseau VPC de ce tutoriel est un réseau autonome. Cependant, vous pouvez partager un réseau VPC d'un projet (appelé projet hôte) avec d'autres projets de votre organisation Google Cloud. Pour en savoir plus sur le type de réseau VPC à utiliser, consultez la page Réseau VPC unique et VPC partagé.
Conformément aux bonnes pratiques de sécurité réseau, le réseau VPC de ce tutoriel utilise une combinaison de Cloud Router, Cloud NAT et Accès privé à Google pour sécuriser l'instance comme suit :
- L'instance de notebooks gérés par l'utilisateur ne possède pas d'adresse IP externe
- L'instance dispose d'un accès Internet sortant via un routeur Cloud Router régional et une passerelle Cloud NAT afin que vous puissiez installer des packages logiciels ou d'autres dépendances. Cloud NAT autorise les connexions sortantes et les réponses entrantes à destination de ces connexions. Cloud NAT n'autorise pas les requêtes entrantes non sollicitées en provenance d'Internet.
- L'instance utilise l'accès privé à Google pour accéder aux adresses IP externes des API et services Google.
Le tutoriel explique également comment effectuer les opérations suivantes :
- Créer un script post-démarrage pour cloner automatiquement un dépôt GitHub dans l'instance de notebooks gérés par l'utilisateur nouvellement créée.
- Utiliser Cloud Monitoring pour surveiller l'instance de notebooks gérés par l'utilisateur.
- Utiliser l'API Compute Engine pour démarrer et arrêter automatiquement l'instance afin d'optimiser les coûts.
Objectifs
- Créez un réseau VPC et ajoutez un sous-réseau sur lequel l'accès privé à Google est activé.
- Créez un routeur Cloud et Cloud NAT pour le réseau VPC.
- Créez une instance de notebooks gérés par l'utilisateur dans le sous-réseau à l'aide d'un script post-démarrage qui clone le dépôt GitHub Google Cloud Generative AI.
- Activez Cloud Monitoring pour l'instance.
- Créez une programmation d'instances de VM et associez-la à l'instance.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Ouvrez Cloud Shell pour exécuter les commandes répertoriées dans ce tutoriel. Cloud Shell est un environnement shell interactif pour Google Cloud qui vous permet de gérer vos projets et vos ressources depuis un navigateur Web. Accéder à Cloud Shell
- Dans Cloud Shell, définissez le projet actuel sur votre ID de projet Google Cloud et stockez le même ID de projet dans la variable de shell
projectid
:projectid="PROJECT_ID" gcloud config set project ${projectid}
Remplacez PROJECT_ID par votre ID de projet. Si nécessaire, vous pouvez le trouver dans la console Google Cloud. Pour en savoir plus, consultez la section Trouver votre ID de projet. -
Enable the IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI APIs:
gcloud services enable iam.googleapis.com
compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/notebooks.admin, roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/storage.Admin
gcloud projects add-iam-policy-binding PROJECT_ID --member="USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Créer et configurer un VPC autonome
Créez un réseau VPC nommé
securevertex-vpc
:gcloud compute networks create securevertex-vpc --subnet-mode=custom
Créez un sous-réseau nommé
securevertex-subnet-a
avec une plage IPv4 principale de10.10.10.0/29
:gcloud compute networks subnets create securevertex-subnet-a --range=10.10.10.0/29 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access
Si vous le souhaitez, vous pouvez indiquer une valeur différente pour le paramètre
--range
. Cependant, la longueur minimale du préfixe pour un seul notebook est de 29. Pour en savoir plus, consultez la section sur les plages de sous-réseaux IPv4.Créez un routeur Cloud Router régional nommé
cloud-router-us-central1
:gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
Créez une passerelle Cloud NAT régionale nommée
cloud-nat-us-central1
: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
Créer un bucket Cloud Storage
Créez le bucket Cloud Storage :
gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
Remplacez BUCKET_NAME par un nom de bucket unique.
Définissez la variable d'interface système
BUCKET_NAME
et vérifiez qu'elle a été saisie correctement :BUCKET_NAME=BUCKET_NAME echo $BUCKET_NAME
Remplacez BUCKET_NAME par le nom du bucket.
Créer et importer un script post-démarrage
Pour créer le script, utilisez un éditeur de texte tel que
vi
ounano
pour créer un fichier nommépoststartup.sh
.Collez le script suivant dans le fichier.
#! /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
Enregistrez le fichier.
Importez un fichier dans votre bucket Cloud Storage :
gcloud storage cp poststartup.sh gs://$BUCKET_NAME
Créer un compte de service personnalisé
Lorsque vous créez une instance de notebooks gérés par l'utilisateur, nous vous recommandons vivement de décocher la case Utiliser le compte de service Compute Engine par défaut et de spécifier un compte de service personnalisé. Le compte de service Compute Engine par défaut (et donc toute personne que vous spécifiez en tant qu'utilisateur d'instance) se voit attribuer le rôle Éditeur (roles/editor
) sur votre projet. Vous pouvez désactiver ce comportement en désactivant les attributions automatiques de rôles pour les comptes de service par défaut.
Créez un compte de service personnalisé nommé
user-managed-notebook-sa
:gcloud iam service-accounts create user-managed-notebook-sa \ --display-name="user-managed-notebook-sa"
Attribuez le rôle IAM de lecteur des objets de l'espace de stockage 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"
Attribuez le rôle IAM "Utilisateur Vertex AI" au compte de service :
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Créer une instance de notebooks gérés par l'utilisateur
Dans Google Cloud Console, accédez à la page Notebooks gérés par l'utilisateur.
Cliquez sur
Créer, puis sélectionnez Options avancées.La page Créer une instance s'affiche.
Dans la section Détails de la page Créer une instance, fournissez les informations suivantes pour la nouvelle instance, puis cliquez sur Continuer :
- Nom : donnez un nom à la nouvelle instance ou acceptez la valeur par défaut.
- Région : sélectionnez us-central1.
- Zone : sélectionnez us-central1-a.
Dans la section Environnement, fournissez les informations suivantes, puis cliquez sur Continuer :
- Script post-démarrage : cliquez sur Parcourir, double-cliquez sur le fichier
poststartup.sh
, cliquez à nouveau sur ce fichier, puis cliquez sur Sélectionnez.
- Script post-démarrage : cliquez sur Parcourir, double-cliquez sur le fichier
Dans la section Type de machine, fournissez les informations suivantes, puis cliquez sur Continuer :
VM protégée : cochez les cases suivantes :
- Démarrage sécurisé
- Module vTPM (Virtual Trusted Platform Module)
- Surveillance de l'intégrité
Dans la section Disques, assurez-vous que l'option Clé de chiffrement gérée par Google est sélectionnée, puis cliquez sur Continuer :
Dans la section Mise en réseau, fournissez les informations suivantes, puis cliquez sur Continuer :
Mise en réseau : sélectionnez Réseau dans ce projet et procédez comme suit :
Dans le champ Réseau, sélectionnez securevertex-vpc.
Dans le champ Sous-réseau, sélectionnez securevertex-subnet-a.
Décochez la case Attribuer une adresse IP externe. Le fait de ne pas attribuer d'adresse IP externe empêche l'instance de recevoir des communications non sollicitées en provenance d'Internet ou d'autres réseaux VPC.
Cochez la case Autoriser l'accès proxy.
Dans la section IAM et sécurité, spécifiez les éléments suivants, puis cliquez sur Continuer :
IAM et sécurité : pour accorder à un seul utilisateur l'accès à l'interface JupyterLab de l'instance, procédez comme suit :
- Sélectionnez Un seul utilisateur.
- Dans le champ Adresse e-mail de l'utilisateur, saisissez l'adresse e-mail d'un seul compte utilisateur. Si vous créez l'instance pour un autre utilisateur, les conditions suivantes s'appliquent :
- Vous (le créateur de l'instance) n'avez pas accès à l'interface JupyterLab de l'instance. Cependant, vous contrôlez toujours l'instance, et vous pouvez la démarrer, l'arrêter ou la supprimer.
- Après avoir créé l'instance, vous devez attribuer à l'utilisateur le rôle d'utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service de l'instance. Consultez la section Facultatif : Attribuez le rôle Utilisateur du compte de service à l'utilisateur de l'instance.
- Décochez la case Utiliser le compte de service Compute Engine par défaut.
Cette étape est importante, car le compte de service Compute Engine par défaut (et donc l'utilisateur que vous venez de spécifier) se voit attribuer le rôle d'éditeur (
roles/editor
) sur votre projet. Dans le champ Adresse e-mail du compte de service, saisissez
user-managed-notebook-sa@$projectid.iam.gserviceaccount.com
. (Il s'agit de l'adresse e-mail du compte de service personnalisé que vous avez créé précédemment.) Ce compte de service dispose d'autorisations limitées.Pour en savoir plus sur l'attribution d'autorisations d'accès, consultez la page Gérer l'accès à l'interface JupyterLab d'une instance de notebooks gérés par l'utilisateur.
Options de sécurité : décochez la case suivante :
- Accès root à l'instance
Cochez la case suivante :
- nbconvert
nbconvert
permet aux utilisateurs d'exporter et de télécharger un fichier notebook sous un type de fichier différent, tel que HTML, PDF ou LaTeX. Ce paramètre est requis par certains notebooks du dépôt GitHub Google Cloud Generative AI.
Décochez la case suivante :
- Téléchargement de fichiers
Cochez la case suivante, sauf si vous êtes dans un environnement de production :
- Accès au terminal cette option permet d'accéder au terminal de votre instance à partir de l'interface utilisateur de JupyterLab.
Dans la section État du système, sélectionnez Mise à niveau automatique de l'environnement et fournissez les informations suivantes :
Dans Création de rapports, cochez les cases suivantes :
- Rendez compte de l'état du système
- Transmettre des métriques personnalisées à Cloud Monitoring
- Installer Cloud Monitoring
- Signaler l'état DNS des domaines Google requis
Cliquez sur Créer.
Facultatif : Attribuer le rôle d'utilisateur du compte de service à l'utilisateur de l'instance
Si vous créez l'instance de notebooks gérés par l'utilisateur pour un autre utilisateur, vous devez lui attribuer le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser
) sur le compte de service personnalisé user-managed-notebook-sa
comme suit :
gcloud iam service-accounts add-iam-policy-binding \ user-managed-notebook-sa@PROJECT_ID.iam.gserviceaccount.com \ --member="user:USER_EMAIL" \ --role="roles/iam.serviceAccountUser"
Remplacez les valeurs suivantes :
- PROJECT_ID : ID du projet
- USER_EMAIL : adresse e-mail de l'utilisateur.
Vérifier que l'instance de notebooks gérés par l'utilisateur a été créée
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 automatiquement un lien Ouvrir JupyterLab. Ce lien n'est accessible qu'à l'utilisateur que vous avez spécifié au moment de la création de l'instance.
Ouvrez l'instance dans JupyterLab et vérifiez que le dépôt GitHub Google Cloud Generative AI cloné est présent.
Dans Google Cloud Console, accédez à la page Notebooks gérés par l'utilisateur.
Dans la liste des instances de notebooks gérés par l'utilisateur, cliquez sur le lien Ouvrir JupyterLab pour l'instance que vous avez créée.
Dans la liste des dossiers, un dossier
generative-ai
s'affiche. Ce dossier contient le dépôt GitHub cloné.
Surveiller l'état de fonctionnement via Monitoring
Vous pouvez surveiller les métriques du système et des applications de vos instances de notebooks gérés par l'utilisateur à l'aide de la console Google Cloud. Pour en savoir plus sur la surveillance des instances et sur la création de métriques personnalisées, consultez la section Surveiller l'état de fonctionnement.
Dans Google Cloud Console, accédez à la page Notebooks gérés par l'utilisateur.
Cliquez sur le nom de l'instance de notebooks gérés par l'utilisateur dont vous souhaitez afficher les métriques.
Sur la page Notebook, cliquez sur l'onglet Monitoring. Examinez l'utilisation du processeur et les octets réseau de votre instance de notebook. Pour apprendre à interpréter ces métriques, consultez la page Examiner les métriques de ressources.
Si vous venez de créer l'instance, aucune donnée ne s'affiche immédiatement. Attendez quelques minutes et actualisez l'onglet de la console.
Créer une programmation d'instances de VM pour votre instance de notebooks gérés par l'utilisateur
Une instance de notebooks gérés par l'utilisateur étant une instance de VM Compute Engine, vous pouvez utiliser les API Compute Engine pour lui créer une programmation d'instances de VM.
Utilisez une programmation d'instances de VM pour démarrer et arrêter votre instance de notebooks gérés par l'utilisateur. Pendant les heures d'arrêt de l'instance, vous ne payez que les coûts liés à Cloud Storage.
Vous pouvez associer une programmation d'instances à toute instance de VM située dans la même région, afin de pouvoir utiliser la même programmation pour contrôler toutes vos instances de notebooks gérés par l'utilisateur dans la région.
Pour en savoir plus sur les programmations d'instances de VM, consultez la page Planifier le démarrage et l'arrêt d'une instance de VM.
Créer un rôle IAM personnalisé
Pour des raisons de sécurité, nous vous recommandons de créer un rôle IAM personnalisé qui ne dispose que des autorisations suivantes et de l'attribuer au compte de service Compute Engine par défaut :
compute.instances.start
compute.instances.stop
Dans Cloud Shell, créez un rôle personnalisé nommé
Vm_Scheduler
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é :
gcloud iam roles describe Vm_Scheduler --project=$projectid
Attribuer le rôle au compte de service Compute Engine par défaut
Pour autoriser le compte de service Compute Engine par défaut à démarrer et à arrêter vos instances de notebooks gérés par l'utilisateur, vous devez lui attribuer le rôle personnalisé Vm_Scheduler
.
Le compte de service Compute Engine par défaut de votre projet possède l'adresse e-mail suivante : PROJECT_NUMBER-compute@developer.gserviceaccount.com
, où PROJECT_NUMBER
est votre numéro de projet.
Identifiez le numéro de votre projet et stockez-le dans la variable d'interface système
project_number
:project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)') echo $project_number
Attribuez le rôle personnalisé au compte de service 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 et associer la programmation
Pour créer une programmation d'instances qui démarre votre instance de notebooks gérés par l'utilisateur à 7h00 et l'arrête à 18h00, procédez comme suit :
Créez une planification de démarrage et d'arrêt nommée
optimize-notebooks
:gcloud compute resource-policies create instance-schedule optimize-notebooks \ --region=us-central1 \ --vm-start-schedule='0 7 * * *' \ --vm-stop-schedule='0 18 * * *' \ --timezone=TIME_ZONE
Remplacez TIME_ZONE par le fuseau horaire IANA basé sur l'emplacement pour cette programmation d'instances, par exemple
America/Chicago
. En cas d'omission, la valeur par défautUTC
est utilisée. Pour plus d'informations, consultez la section Fuseau horaire.Identifiez le nom de votre instance de notebooks gérés par l'utilisateur en exécutant la commande suivante et en notant la valeur
NAME
qu'elle renvoie :gcloud compute instances list
Stockez le nom dans la variable d'interface système
notebook_vm
:notebook_vm=NOTEBOOK_VM_NAME echo $notebook_vm
Remplacez NOTEBOOK_VM_NAME par le nom de votre instance de notebooks gérés par l'utilisateur.
Associez la programmation d'instance à votre instance de notebooks gérés par l'utilisateur :
gcloud compute instances add-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a
Décrivez la programmation d'instances :
gcloud compute resource-policies describe optimize-notebooks \ --region=us-central1
Vous pouvez vérifier si la programmation d'instances est correctement exécutée en consultant les journaux d'audit Compute Engine de la stratégie de ressources de programmation d'instances et de l'instance de VM associée. Vous devrez peut-être attendre jusqu'à 15 minutes après l'heure programmée de chaque opération.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Vous pouvez supprimer les ressources individuelles du projet comme suit :
Dans Google Cloud Console, accédez à la page Notebooks gérés par l'utilisateur.
Sélectionnez votre instance de notebook gérée par l'utilisateur.
Cliquez sur Supprimer.
Dans Cloud Shell, supprimez les ressources individuelles restantes en exécutant les commandes suivantes.
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
Étapes suivantes
- Suivez l'atelier de programmation Vertex AI pour créer un notebook sécurisé géré par l'utilisateur.
- Découvrez comment utiliser VPC Service Controls pour configurer une instance de notebooks gérés par l'utilisateur dans un périmètre de service.
- Découvrez les bonnes pratiques et architectures de référence pour la conception de VPC.