a Vertex AI cria um notebook seguro gerenciado pelo usuário

1. Introdução

As instâncias de notebooks gerenciados pelo usuário do Vertex AI Workbench permitem 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 do TensorFlow e do PyTorch. É possível configurar instâncias ativadas para GPU ou somente CPU.

O que você vai criar

Neste tutorial, descrevemos o processo de implantação de um notebook seguro gerenciado pelo usuário com base nas práticas recomendadas de Rede e segurança. As etapas a seguir são necessárias:

  1. Criar uma VPC
  2. Criar um Cloud Router e um Cloud NAT
  3. Configure a instância de notebook com as configurações de segurança apropriadas

Neste tutorial, fornecemos 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.

2292244ba0b11f71.png

O que você vai aprender

  • Como determinar se uma VPC compartilhada ou independente é a melhor para sua organização
  • Como criar uma VPC independente
  • Como criar um Cloud Router e um Cloud NAT
  • Como criar um notebook gerenciado pelo usuário
  • Como acessar um notebook gerenciado pelo usuário
  • Como monitorar a integridade do notebook gerenciado pelo usuário
  • Como criar e aplicar uma programação de instâncias

O que é necessário

  • Projeto do Google Cloud

Permissões IAM

2. Rede VPC

Pense em uma rede VPC da mesma forma que você pensaria em uma rede física, só que virtualizada dentro do 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 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 segurança com a Internet.

Figura 2.

2292244ba0b11f71.png

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 que são 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 é a 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.

1354a9323c8e5787.png

VPC independente x VPC compartilhada

Uma única rede VPC é suficiente para muitos casos de uso simples, porque é 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, porque permite que elas estendam a simplicidade arquitetônica de uma única rede VPC em vários grupos de trabalho usando projetos de serviço.

Práticas recomendadas da VPC usadas 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 aprofundar o escopo das regras de entrada, como localizações geográficas, 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

  • Interromper e/ou excluir instâncias não usadas
  • Use uma instância inicial menor e itere com dados de amostra menores
  • Escalonar instâncias conforme necessário
  • Teste conjuntos de dados menores

Selecionar os tipos de máquina certos

  • VMs com custo otimizado
  • Aproveitar melhor os recursos de hardware para reduzir os custos
  • Até 31% de economia em comparação com o N1
  • Economia extra (20 a 50%) para compromissos de um ou três anos
  • Aumentar o tamanho da máquina ou adicionar GPUs pode ajudar no desempenho e na superação de erros de limitação de memória

Programar o encerramento das instâncias

  • Desativação de instâncias quando elas estiverem ociosas (pague apenas pelo armazenamento em disco)
  • Programar o encerramento e a inicialização das instâncias de VM do notebook em horários específicos

Monitorar o status de integridade do notebook

Considerações sobre segurança

Veja a seguir as considerações de segurança recomendadas ao criar um notebook gerenciado pelo usuário:

  • Selecione a opção "Somente um usuário". acesso ao notebook. 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 raiz
  • nbconvert
  • download de arquivo na 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 ser compatível com o tutorial

Neste tutorial, usamos as variáveis $variables para ajudar na implementação da configuração da 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

Crie a VPC independente

No Cloud Shell, faça o seguinte:

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

Crie a sub-rede de notebook gerenciada 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 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 saída de NAT, o que significa que os hosts da Internet não têm permissão para iniciar a comunicação com um notebook gerenciado pelo usuário, o que o torna mais seguro.

No Cloud Shell, crie o roteador de nuvem regional.

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

No Cloud Shell, crie o gateway cloud nat regional.

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 de arquivos seguros. No tutorial, o armazenamento em nuvem vai conter um script 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

Armazenar "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 vi ou o editor 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 fornecer um bom nível de controle do notebook gerenciado pelo usuário, é necessário ter 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:

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 o papel 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 bibliotecas mais recentes de machine learning e ciência de dados pré-instaladas. Também é possível incluir GPUs Nvidia para aceleração de hardware.

Ativar APIs de consumidor

a API Notebooks.

Criar o notebook gerenciado pelo usuário

  1. Acesse o Workbench.
  2. Selecione Notebooks gerenciados pelo usuário e, em seguida, Criar notebook. A página "Criar um notebook gerenciado pelo usuário" é aberta.
  3. Se houver um notebook implantado, selecione Notebooks gerenciados pelo usuário → Novo notebook → Personalizar
  4. 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: este tutorial usará a região us-central1 e a zona us-central1-a.

Escolha a opção Continuar.

  1. 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) selecione "Procurar" para selecionar um script a ser executado após o início da instância.
  • Metadados: (opcional) forneça chaves de metadados personalizadas para a instância.

Escolha a opção Continuar.

  1. 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 oferece estimativas de custo mensais para cada tipo de máquina selecionado.
  • Tipo de GPU: selecione o tipo e o número de GPUs da nova instância. Para mais informações sobre as diferentes GPUs, consulte GPUs no Compute Engine.
  • Marque a caixa de seleção Instalar driver de GPU NVIDIA automaticamente para mim.

VM protegida

  • Ativar a inicialização segura
  • Ativar o vTPM
  • Ativar o monitoramento de integridade

Escolha a opção Continuar.

  1. Na seção "Discos", forneça o seguinte:
  • Discos: (opcional) para alterar as configurações padrão do disco de inicialização ou 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. Para mais informações sobre os tipos de discos, consulte Opções de armazenamento.
  • Excluir para a lixeira (opcional): marque essa caixa de seleção para usar o comportamento padrão de lixeira do sistema operacional. Se você usa o comportamento padrão, os arquivos excluídos na interface do JupyterLab podem ser recuperados, mas os arquivos excluídos ocupam 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. 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.

  1. Na seção "Rede", informe o seguinte:
  • Rede: selecione "Redes neste projeto" ou "Redes compartilhadas comigo". Se você estiver usando uma VPC compartilhada no projeto host, também precisará conceder o papel de usuário da rede do Compute (roles/compute.networkUser) ao Agente de serviço do Notebooks do projeto de serviço.
  • No campo Rede, selecione a rede desejada. O tutorial está usando a rede securevertex-vpc. Você pode 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 que você quer. No tutorial, a sub-rede securevertex-subnet-a vai ser usada.
  • Desmarque a opção "Atribuir endereço IP externo"
  • Selecionar "Permitir acesso por proxy"

Escolha a opção Continuar.

81bb7dbe31fbf587.png

  1. Na seção "IAM e segurança", informe o seguinte:
  • Selecione Usuário único e, no campo "E-mail do usuário", digite 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 a opção "Usar a conta de serviço padrão do Compute Engine na VM" para chamar as APIs do Google Cloud
  • Digite o endereço de e-mail da conta de serviço recém-criado, por exemplo: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com

Opções de segurança

  • Desmarcar a ativação do acesso raiz à instância
  • Desmarcar a opção de ativar nbconvert
  • Desmarcar a opção "Ativar o download de arquivos da interface do JupyterLab"
  • Ativar terminal (Desmarcar para ambientes de produção)

Escolha a opção Continuar.

e19f3cd05a2c1b7f.png

  1. 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 quer atualizar seu notebook Semanal ou Mensalmente.

Em "Relatórios e integridade 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 inicia a instância automaticamente. Quando a instância estiver pronta para uso, o Vertex AI Workbench ativará um link Abrir o JupyterLab, que permite que o usuário final acesse o notebook.

11. Observabilidade

Monitorar as métricas do sistema e do aplicativo com o Monitoring

Para instâncias de notebooks gerenciados pelo usuário com o Monitoring instalado, é possível monitorar as métricas do sistema e do aplicativo usando o console do Google Cloud:

  1. No console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
  2. Clique no nome da instância com as métricas do sistema e do aplicativo que você quer conferir.
  3. Na página Detalhes do notebook, clique na guia Monitoramento. Analise as métricas do sistema e do aplicativo da sua instância.

12. Criar uma programação de notebook

As programações de instância permitem que você inicie e interrompa instâncias de máquina virtual (VM) automaticamente. O uso de programações de instâncias para automatizar a implantação das instâncias de VM pode ajudar você a otimizar custos e gerenciar as 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 instâncias de VM somente durante o horário de trabalho ou para fornecer capacidade para um evento único.

Para usar programações de instâncias, crie uma política de recursos detalhando o comportamento de inicialização 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âncias que vai ligar seu notebook às 7h e desligá-lo às 18h.

Para criar a programação de instâncias, você vai precisar das permissões compute.instances.start e compute.instances.stop. Portanto, recomenda-se um papel personalizado, criado pelo administrador que você recebeu.

Depois de criado, o papel personalizado será atribuído à conta de serviço padrão do Compute Engine no projeto, o que permitirá que a programação da instância inicie e pare seu 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

Descrever o papel personalizado do 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ê identificará e atualizará a conta de serviço padrão que consiste no 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âncias

No Cloud Shell, crie a programação de início e parada.

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 localizada na mesma região dela.

No Cloud Shell, associe a programação ao seu notebook.

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

13. Limpar

Excluir o notebook gerenciado pelo usuário no console, acessar Vertex AI → Workbench, selecionar e excluir o notebook.

Exclua os componentes da VPC no Cloud Shell.

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 seguro gerenciado pelo usuário criando uma VPC independente personalizada usando as práticas recomendadas de aumento da proteção de segurança para notebooks gerenciados e implementou uma programação de instâncias para otimizar os gastos.

Qual é a próxima etapa?

Confira alguns desses tutoriais...

Leia mais e Vídeos

Documentos de referência