1. Introdução
Com as instâncias de notebooks gerenciados pelo usuário do Vertex AI Workbench, é possível criar e gerenciar instâncias de máquina virtual (VM) de aprendizado profundo pré-empacotadas com o JupyterLab.
As instâncias de notebooks gerenciados pelo usuário têm um conjunto pré-instalado de pacotes de aprendizado profundo, incluindo suporte para os frameworks TensorFlow e PyTorch. É possível configurar instâncias ativadas para GPU ou somente CPU.
O que você vai criar
Este tutorial descreve o processo de implantação de um notebook gerenciado pelo usuário seguro com base nas práticas recomendadas de rede e segurança. As etapas envolvidas são:
- Criar uma VPC
- Criar um Cloud Router e o Cloud NAT
- Configure a instância de notebook com as configurações de segurança adequadas
Este tutorial fornece instruções detalhadas para cada etapa. Ele também inclui dicas e práticas recomendadas para proteger notebooks gerenciados pelo usuário. A Figura 1 é uma ilustração da implantação usando uma VPC independente.
Figura 1.

O que você vai aprender
- Como determinar se uma VPC compartilhada ou independente é adequada para sua organização
- Como criar uma VPC independente
- Como criar um Cloud Router e o Cloud NAT
- Como criar um notebook gerenciado pelo usuário
- Como acessar um notebook gerenciado pelo usuário
- Como monitorar a integridade dos notebooks gerenciados pelo usuário
- Como criar e aplicar uma programação de instâncias
O que é necessário
- Projeto do Google Cloud
Permissões IAM
- Administrador de rede do Compute
- Administrador de segurança do Compute
- Administrador da instância do Compute
- Administrador de notebooks
- Administrador do Storage
- Administrador de projetos do IAM
- Administrador da conta de serviço
- Usuário da conta de serviço
- Leitor de objetos do Storage (aplicado à conta de serviço)
- Usuário da Vertex AI (aplicado à conta de serviço)
2. Rede VPC
Pense em uma rede VPC da mesma forma que pensaria em uma rede física, só que virtualizada no Google Cloud. Uma rede VPC é um recurso global que consiste em sub-redes regionais. As redes VPC são isoladas logicamente umas das outras no Google Cloud.
VPC independente
A Figura 2 é um exemplo de uma VPC global independente que consiste em uma sub-rede regional (us-central1), além do Cloud Router e do Cloud NAT usados para permitir que o notebook gerenciado pelo usuário estabeleça conectividade com a Internet de maneira segura.
Figura 2.

VPC compartilhada
A VPC compartilhada permite exportar sub-redes de uma rede VPC em um projeto host para projetos de serviço na mesma organização. O projeto host contém recursos de rede compartilhados com o projeto de serviço, como sub-redes, Cloud NAT e regras de firewall. O projeto de serviço contém recursos no nível do aplicativo que aproveitam os recursos de rede no projeto host.
A Figura 3 é uma ilustração de uma VPC compartilhada global, em que a infraestrutura de rede e segurança é implantada no projeto host, enquanto as cargas de trabalho são implantadas no projeto de serviço.
Figura 3.

VPC independente x VPC compartilhada
Uma única rede VPC é suficiente para muitos casos de uso simples, já que é mais fácil de criar, manter e entender do que alternativas mais complexas. A VPC compartilhada é uma ferramenta eficaz para organizações com várias equipes, já que permite estender a simplicidade arquitetônica de uma única rede VPC em vários grupos de trabalho usando projetos de serviço.
Prática recomendada de VPC usada no tutorial
- Ative o Cloud NAT para acessar o notebook.
- Ative o Acesso privado do Google ao criar sub-redes.
- Crie regras de firewall prescritivas para reduzir o tráfego não solicitado. Por exemplo, não use 0.0.0.0/0 tcp. Em vez disso, defina os endereços IP exatos de sub-redes ou hosts.
- Use políticas de firewall para ampliar o escopo das regras de entrada, por exemplo, geolocalizações, listas de inteligência contra ameaças, nomes de domínio de origem etc.
3. Práticas recomendadas para notebooks
Dimensionar as instâncias corretamente
- Parar e/ou excluir instâncias não utilizadas
- Use uma instância inicial menor e itere com dados de amostra menores
- Escalonar verticalmente as instâncias conforme necessário
- Teste com conjuntos de dados menores
Selecionar os tipos de máquina certos
- VMs otimizadas para custo
- Faça melhor uso dos recursos de hardware para reduzir custos
- Economia de até 31% em comparação com o N1
- Economia adicional (20 a 50%) para compromissos de 1 ou 3 anos
- Aumentar o tamanho da máquina ou adicionar GPUs pode ajudar no desempenho e na superação de erros de limitações de memória.
Programar o encerramento das instâncias
- Desativar instâncias quando elas estiverem ociosas (pagar apenas pelo armazenamento em disco)
- Programar instâncias de VM de notebook para serem desligadas e iniciadas automaticamente em horários específicos
Monitorar o status de integridade do notebook
- As instâncias de notebooks gerenciados pelo usuário têm uma ferramenta de diagnóstico integrada que pode ajudar você a monitorar a integridade das instâncias.
Considerações sobre segurança
Estas são as considerações de segurança recomendadas ao criar um notebook gerenciado pelo usuário:
- Selecione a opção de acesso ao notebook "somente para um usuário". Se o usuário especificado não for o criador da instância, conceda a ele o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço da instância.
- Desative as seguintes opções:
- acesso root
- nbconvert
- download de arquivos da interface do JupyterLab
- O Cloud NAT será usado em vez de atribuir um endereço IP externo ao notebook gerenciado pelo usuário.
- Selecione as seguintes opções de computação:
- Inicialização segura
- Módulo de plataforma confiável e virtual (vTPM)
- Monitoramento da integridade
4. Antes de começar
Atualizar o projeto para oferecer suporte ao tutorial
Este tutorial usa $variables para ajudar na implementação da configuração do gcloud no Cloud Shell.
No Cloud Shell, faça o seguinte:
gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid
5. Configuração da VPC
Criar a VPC independente
No Cloud Shell, faça o seguinte:
gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom
Criar a sub-rede de notebooks gerenciados pelo usuário
No Cloud Shell, faça o seguinte:
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
Configuração do Cloud Router e do NAT
O Cloud NAT é usado no tutorial para downloads de pacotes de software de notebook porque a instância de notebook gerenciada pelo usuário não tem um endereço IP externo. O Cloud NAT também oferece recursos de NAT de saída, o que significa que os hosts da Internet não podem iniciar a comunicação com um notebook gerenciado pelo usuário, tornando-o mais seguro.
No Cloud Shell, crie o Cloud Router regional.
gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
No Cloud Shell, crie o gateway regional do Cloud NAT.
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. Criar um bucket de armazenamento
Os buckets de armazenamento oferecem upload/recuperação segura de arquivos. No tutorial, o armazenamento em nuvem vai conter um script de pós-inicialização para instalar pacotes de IA generativa nos notebooks gerenciados pelo usuário.
Crie um bucket do Cloud Storage e substitua BUCKET_NAME por um nome globalmente exclusivo de sua preferência.
No Cloud Shell, crie um bucket de armazenamento exclusivo.
gsutil mb -l us-central1 -b on gs://BUCKET_NAME
Armazene "BUCKET_NAME" durante o laboratório.
BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME
7. Criar um script pós-inicialização
Para ativar o download dos pacotes de IA generativa, crie um script de pós-inicialização no Cloud Shell usando o editor vi ou nano e salve-o como 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
Exemplo:
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
Faça upload do script pós-inicialização para o bucket de armazenamento do Cloud Shell usando gsutil.
gsutil cp poststartup.sh gs://$BUCKET_NAME
8. Criar uma conta de serviço
Para oferecer um controle refinado do notebook gerenciado pelo usuário, é necessária uma conta de serviço. Depois de geradas, as permissões da conta de serviço podem ser modificadas com base nos requisitos comerciais. No tutorial, a conta de serviço terá as seguintes regras aplicadas:
É necessário a API Service Account antes de continuar.
No Cloud Shell, crie a conta de serviço.
gcloud iam service-accounts create user-managed-notebook-sa \
--display-name="user-managed-notebook-sa"
No Cloud Shell, atualize a conta de serviço com o papel Leitor de objetos do Storage.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
No Cloud Shell, atualize a conta de serviço com a função de usuário da Vertex AI.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
No Cloud Shell, liste a conta de serviço e anote o endereço de e-mail que será usado ao criar o notebook gerenciado pelo usuário.
gcloud iam service-accounts list
Exemplo:
$ 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. Criar um notebook gerenciado pelo usuário seguro
Uma instância de notebooks gerenciados pelo usuário é uma instância de máquina virtual de aprendizado profundo com as mais recentes bibliotecas de aprendizado de máquina e ciência de dados pré-instaladas. Como opção, é possível incluir GPUs Nvidia para aceleração de hardware.
Ativar APIs de consumidor
Criar o notebook gerenciado pelo usuário
- Acesse Workbench
- Selecione "Notebooks gerenciados pelo usuário" e depois "Criar notebook". A página "Criar um notebook gerenciado pelo usuário" é aberta.
- Se um notebook já estiver implantado, selecione "Notebooks gerenciados pelo usuário" → "Novo notebook" → "Personalizar".
- Na página "Criar um notebook gerenciado pelo usuário", na seção "Detalhes", forneça as seguintes informações para a nova instância:
- Nome: forneça um nome para a nova instância.
- Região e zona: o tutorial usa a região us-central1 e a zona us-central1-a.
Escolha a opção Continuar.
- Na seção Ambiente, forneça as seguintes informações:
- Sistema operacional: selecione o sistema operacional que você quer usar.
- Selecione o ambiente que você quer usar.
- Versão: selecione a versão que você quer usar.
- Script de pós-inicialização (opcional,use o script de IA generativa criado anteriormente): clique em "Procurar" para selecionar um script a ser executado após a inicialização da instância.
- Metadados: opcional: forneça chaves de metadados personalizadas para a instância.
Escolha a opção Continuar.
- Na seção "Tipo de máquina", forneça as seguintes informações:
- Tipo de máquina: selecione o número de CPUs e a quantidade de RAM para a nova instância. O Vertex AI Workbench fornece estimativas de custo mensais para cada tipo de máquina selecionada.
- Tipo de GPU: selecione o tipo e o número de GPUs para a nova instância. Para informações sobre as diferentes GPUs, consulte GPUs no Compute Engine.
- Marque a caixa de seleção "Instalar automaticamente o driver da GPU NVIDIA".
VM protegida
- Ativar a inicialização segura
- Ativar o vTPM
- Ativar o monitoramento de integridade
Escolha a opção Continuar.
- Na seção "Discos", forneça as seguintes informações:
- Discos: opcional: para mudar as configurações padrão de inicialização ou disco de dados, selecione o tipo de disco de inicialização, o tamanho do disco de inicialização em GB, o tipo de disco de dados e o tamanho do disco de dados em GB que você quer. Para mais informações sobre tipos de disco, consulte Opções de armazenamento.
- Excluir para a lixeira: opcional. Marque essa caixa de seleção para usar o comportamento padrão da lixeira do sistema operacional. Se você usar o comportamento padrão, os arquivos excluídos usando a interface do usuário do JupyterLab serão recuperados, mas os arquivos excluídos usarão o espaço em disco.
- Backup (opcional): para sincronizar um local do Cloud Storage com o disco de dados da instância, selecione "Procurar" e especifique o local do Cloud Storage. Para saber mais sobre os custos de armazenamento, consulte Preços do Cloud Storage.
- Criptografia: chave de criptografia gerenciada pelo Google
Escolha a opção Continuar.
- Na seção "Rede", forneça as seguintes informações:
- Rede: selecione "Redes neste projeto" ou "Redes compartilhadas comigo". Se você estiver usando uma VPC compartilhada no projeto host, também será necessário conceder o papel de Usuário da rede do Compute (roles/compute.networkUser) ao Agente de serviço de notebooks no projeto de serviço.
- No campo "Rede", selecione a rede desejada. O tutorial usa a rede securevertex-vpc. É possível selecionar uma rede VPC, desde que ela tenha o Acesso privado do Google ativado ou possa acessar a Internet. No campo "Sub-rede", selecione a sub-rede desejada. No tutorial, a sub-rede securevertex-subnet-a é usada.
- Desmarque a opção "Atribuir endereço IP externo"
- Selecione "Permitir acesso por proxy"
Escolha a opção Continuar.

- Na seção "IAM e segurança", forneça o seguinte:
- Selecione Usuário único e, no campo "E-mail do usuário", insira a conta de usuário a que você quer conceder acesso. Se o usuário especificado não for o criador da instância, conceda a ele o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço da instância.
- Desmarque "Usar a conta de serviço padrão do Compute Engine na VM para chamar as APIs do Google Cloud".
- Insira o endereço de e-mail da conta de serviço recém-criada. Exemplo: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
Opções de segurança
- Desmarque a opção "Ativar acesso raiz à instância"
- Desmarque a opção "Ativar nbconvert"
- Desmarque a opção "Ativar o download de arquivos pela interface do JupyterLab".
- Ativar terminal (desmarque para ambientes de produção)
Escolha a opção Continuar.

- Na seção "Integridade do sistema", forneça as seguintes informações:
Upgrade do ambiente e integridade do sistema
- Marque a caixa de seleção "Ativar upgrade automático do ambiente".
- Escolha se você quer fazer upgrade do notebook semanal ou mensal.
Em "Integridade e relatórios do sistema", marque ou desmarque as seguintes caixas de seleção:
- Ativar relatório de integridade do sistema
- Relatar métricas personalizadas para o Cloud Monitoring
- Instalar agente do Cloud Monitoring
Selecione Criar.
10. Validação
O Vertex AI Workbench cria uma instância de notebooks gerenciados pelo usuário com base nas propriedades especificadas e a inicia automaticamente. Quando a instância estiver pronta para uso, o Vertex AI Workbench vai ativar um link Abrir JupyterLab que permite o acesso do usuário final ao notebook.
11. Observabilidade
Monitorar as métricas do sistema e do aplicativo com o Monitoring
Para instâncias de notebooks gerenciadas pelo usuário que têm o Monitoring instalado, é possível monitorar as métricas do sistema e do aplicativo usando o console do Google Cloud:
- No console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
- Clique no nome da instância em que você quer ver as métricas do sistema e do aplicativo.
- Na página Detalhes do notebook, clique na guia Monitoramento. Analise as métricas do sistema e do aplicativo para a instância.
12. Criar uma programação de notebook
As programações de instâncias permitem iniciar e interromper instâncias de máquina virtual (VM) automaticamente. O uso de programações de instâncias para automatizar a implantação de instâncias de VM pode ajudar você a otimizar custos e gerenciar instâncias de VM com mais eficiência. É possível usar programações de instâncias para cargas de trabalho recorrentes e únicas. Por exemplo, use programações de instâncias para executar somente instâncias de VM durante o horário de trabalho ou para fornecer capacidade para um evento de uso único.
Para usar programações de instâncias, crie uma política de recursos que descreva o comportamento de início e parada e, em seguida, anexe a política a uma ou mais instâncias de VM.
O tutorial mostra como criar uma programação de instância que liga o notebook às 7h e desliga às 18h.
Para criar o cronograma de instâncias, você precisa das permissões compute.instances.start e compute.instances.stop. Por isso, recomendamos um papel personalizado criado pelo administrador concedido a você.
Depois de criado, o papel personalizado será atribuído à conta de serviço padrão do Compute Engine no projeto, o que permitirá que o cronograma de instâncias inicie e pare o notebook.
Criar uma função personalizada
No Cloud Shell, crie um papel personalizado, VmScheduler, e inclua as permissões necessárias.
gcloud iam roles create Vm_Scheduler --project=$projectid \
--title=vm-scheduler-notebooks \
--permissions="compute.instances.start,compute.instances.stop" --stage=ga
Descreva o papel personalizado no Cloud Shell.
gcloud iam roles describe Vm_Scheduler --project=$projectid
Exemplo:
$ 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
Atualizar a conta de serviço padrão
Na seção a seguir, você vai identificar e atualizar a conta de serviço padrão, que tem o formato: PROJECT_NUMBER-compute@developer.gserviceaccount.com
No Cloud Shell, identifique o número do projeto atual.
gcloud projects list --filter=$projectid
No Cloud Shell, armazene o número do projeto como uma variável.
project_number=your_project_number
echo $project_number
No Cloud Shell, atualize a conta de serviço padrão do Compute com o papel personalizado, VM_Scheduler.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Criar a programação de instância
No Cloud Shell, crie o cronograma de início e interrupção.
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
No Cloud Shell, armazene o nome do notebook.
gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm
É possível anexar uma programação de instância a qualquer instância de VM atual localizada na mesma região da programação.
No Cloud Shell, associe a programação ao notebook.
gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a
13. Limpar
Exclua o notebook gerenciado pelo usuário do console. Para isso, acesse Vertex AI → Workbench, selecione e exclua o notebook.
No Cloud Shell, exclua os componentes da 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. Parabéns
Muito bem! Você configurou e validou um notebook gerenciado pelo usuário seguro criando uma VPC independente personalizada usando as práticas recomendadas de reforço de segurança para notebooks gerenciados e implementou uma programação de instância para otimizar os gastos.
Qual é a próxima etapa?
Confira alguns destes tutoriais:
- Introdução ao Vertex Pipelines
- Job de treinamento personalizado e previsão usando um conjunto de dados gerenciado
Leituras e vídeos complementares
Documentos de referência
- Introdução ao Vertex AI Workbench
- Introdução aos notebooks gerenciados pelo usuário
- Usar uma instância de notebooks gerenciada pelo usuário em um perímetro de serviço
- Criar uma conta de serviço
- Como programar uma instância de VM para ser iniciada e interrompida