Este tutorial é destinado a cientistas de dados, pesquisadores e administradores de rede empresariais. Ele mostra como proteger uma instância de notebooks gerenciados pelo usuário criando-a em uma rede de nuvem privada virtual (VPC).
Uma rede VPC é uma versão virtual de uma rede física, implementada dentro da rede de produção do Google. É uma rede particular, com seus próprios endereços IP privados, sub-redes e gateways de rede. Na empresa, as redes VPC são usadas para proteger dados e instâncias controlando o acesso a elas de outras redes e da Internet.
A rede VPC neste tutorial é uma rede independente. Entretanto, é possível compartilhar uma rede VPC de um projeto (chamado de projeto host) com outros projetos na sua organização do Google Cloud. Para saber mais sobre qual tipo de rede VPC usar, consulte Rede VPC única e VPC compartilhada.
Seguindo as práticas recomendadas de segurança de rede, a rede VPC neste tutorial usa uma combinação deCloud Router, Cloud NAT e Acesso privado do Google para proteger a instância das seguintes maneiras:
- Sua instância de notebooks gerenciados pelo usuário não tem um endereço IP externo.
- A instância tem acesso à Internet de saída por meio de um Cloud Router regional e do gateway do Cloud NAT para que você possa instalar pacotes de software ou outras dependências. O Cloud NAT permite conexões de saída e as respostas de entrada para essas conexões. Ele não permite solicitações de entrada não solicitadas da Internet.
- A instância usa o Acesso privado do Google para acessar os endereços IP externos de serviços e APIs do Google.
O tutorial também mostra como fazer o seguinte:
- Crie um script de pós-inicialização para clonar automaticamente um repositório do GitHub na instância recém-criada de notebooks gerenciados pelo usuário.
- Use o Cloud Monitoring para monitorar a instância de notebooks gerenciados pelo usuário.
- Use a API Compute Engine para iniciar e interromper a instância automaticamente para otimizar os custos.
Objetivos
- Crie uma rede VPC e adicione uma sub-rede que tenha o Acesso privado do Google ativado.
- Crie um Cloud Router e o Cloud NAT para a rede VPC.
- Crie uma instância de notebooks gerenciados pelo usuário na sub-rede usando um script de pós-inicialização que clona o repositório do GitHub da IA generativa do Google Cloud.
- Ative o Cloud Monitoring para a instância.
- Crie uma programação de instância de VM e anexe-a à instância.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
-
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.
- Abra o Cloud Shell para executar os comandos listados neste tutorial. O Cloud Shell é um ambiente shell interativo para o Google Cloud que permite gerenciar projetos e recursos a partir do navegador da Web. Acesse o Cloud Shell
- No Cloud Shell, defina o projeto atual como o ID do projeto do Google Cloud e armazene o mesmo ID do projeto na variável de shell
projectid
: Substitua PROJECT_ID pela ID do seu projeto. Se necessário, localize o ID do projeto no console do Google Cloud. Para mais informações, consulte Encontrar o ID do projeto.projectid="PROJECT_ID" gcloud config set project ${projectid}
-
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: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
Criar e configurar uma VPC independente
Crie uma rede VPC chamada
securevertex-vpc
:gcloud compute networks create securevertex-vpc --subnet-mode=custom
Crie uma sub-rede chamada
securevertex-subnet-a
, com um intervalo IPv4 principal 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
Se quiser, você pode fornecer um valor diferente para o parâmetro
--range
. No entanto, o comprimento mínimo do prefixo de um único notebook é 29. Para mais informações, consulte Intervalos de sub-rede IPv4.Crie um Cloud Router regional chamado
cloud-router-us-central1
:gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
Crie um gateway regional do Cloud NAT chamado
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
Crie um bucket do Cloud Storage
Crie o bucket do Cloud Storage:
gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
Substitua BUCKET_NAME por um nome de bucket exclusivo.
Defina a variável do shell
BUCKET_NAME
e verifique se ela foi inserida corretamente:BUCKET_NAME=BUCKET_NAME echo $BUCKET_NAME
Substitua BUCKET_NAME pelo nome do bucket.
Criar e fazer upload de um script pós-inicialização
Para criar o script, use um editor de texto, como
vi
ounano
, para criar um arquivo chamadopoststartup.sh
.Cole o script de shell a seguir no arquivo:
#! /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
Salve o arquivo.
Faça upload de um arquivo no bucket do Cloud Storage:
gcloud storage cp poststartup.sh gs://$BUCKET_NAME
Criar uma conta de serviço personalizada
Ao criar uma instância de notebooks gerenciados pelo usuário, recomendamos que você desmarque a caixa de seleção Usar conta de serviço padrão do Compute Engine e especifique uma conta de serviço personalizada. A conta de serviço padrão do Compute Engine (e, portanto, qualquer pessoa que você especificar como usuário da instância) recebe o papel de Editor (roles/editor
) no projeto. Para desativar esse comportamento, desative as concessões automáticas de papéis para contas de serviço padrão.
Crie uma conta de serviço personalizada chamada
user-managed-notebook-sa
:gcloud iam service-accounts create user-managed-notebook-sa \ --display-name="user-managed-notebook-sa"
Atribua o papel do IAM de Leitor de objetos do Storage à conta de serviço:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
Atribua o papel do IAM de usuário da Vertex AI à conta de serviço:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
Criar uma instância de notebooks gerenciados pelo usuário
No Console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
Clique em
Criar novo e selecione Opções avançadas.A página Criar instância é aberta.
Na página Criar instância, na seção Detalhes, forneça as seguintes informações da nova instância e clique em Continuar:
- Nome: forneça um nome para a nova instância ou aceite o padrão.
- Região: selecione us-central1.
- Zona: selecione us-central1-a.
Na seção Ambiente, forneça as informações a seguir e clique em Continuar:
- Script de pós-inicialização: clique em Procurar, clique duas vezes no arquivo
poststartup.sh
, clique mais uma vez e clique em Selecionar.
- Script de pós-inicialização: clique em Procurar, clique duas vezes no arquivo
Na seção Tipo de máquina, forneça as informações a seguir e clique em Continuar:
VM protegida: marque as seguintes caixas de seleção:
- inicialização segura;
- Módulo de plataforma confiável e virtual (vTPM)
- monitoramento de integridade
Na seção Discos, verifique se a Chave de criptografia gerenciada pelo Google está selecionada e clique em Continuar:
Na seção Rede, forneça as informações a seguir e clique em Continuar:
Rede: selecione Rede neste projeto e conclua as etapas a seguir:
No campo Rede, selecione securevertex-vpc.
No campo Sub-rede, selecione securevertex-subnet-a.
Desmarque a caixa de seleção Atribuir endereço IP externo. A não atribuição de um endereço IP externo impede que a instância receba comunicações não solicitadas da Internet ou de outras redes VPC.
Marque a caixa de seleção Permitir acesso ao proxy.
Na seção IAM e segurança, forneça as informações a seguir e clique em Continuar:
IAM e segurança: para conceder a um único usuário acesso à interface do JupyterLab da instância, conclua as etapas a seguir:
- Selecione Usuário único.
- No campo E-mail do usuário, insira o endereço de e-mail de uma única conta de usuário. Se você estiver criando a instância para outra pessoa,
serão aplicadas as seguintes condições:
- Você (o criador da instância) não tem acesso à interface do JupyterLab da instância. No entanto, você ainda controla a instância e pode iniciá-la, interrompê-la ou excluí-la.
- Depois de criar a instância, é necessário conceder ao usuário o papel de usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da instância. Consulte Opcional: conceder o papel de usuário da conta de serviço ao usuário da instância.
- Desmarque a caixa de seleção Usar conta de serviço padrão do Compute Engine.
Essa etapa é importante porque a conta de serviço padrão do Compute Engine (e, portanto, o único usuário que você acabou de especificar) recebe o papel de Editor (
roles/editor
) no projeto. No campo E-mail da conta de serviço, insira
user-managed-notebook-sa@$projectid.iam.gserviceaccount.com
. (Esse é o endereço de e-mail da conta de serviço personalizada que você criou anteriormente.) Essa conta de serviço tem permissões limitadas.Para saber mais sobre como conceder acesso, consulte Gerenciar o acesso à interface do JupyterLab de uma instância de notebooks gerenciados pelo usuário.
Opções de segurança: desmarque a caixa de seleção a seguir:
- Acesso raiz à instância
Marque a caixa de seleção a seguir:
- O nbconvert
nbconvert
permite que os usuários exportem e façam o download de um arquivo de notebook como um tipo de arquivo diferente, como HTML, PDF ou LaTeX. Essa configuração é exigida por alguns dos notebooks no repositório do GitHub da IA generativa do Google Cloud.
Desmarque a caixa de seleção a seguir:
- Permitir downloads do arquivo
Marque a caixa de seleção a seguir, a menos que você esteja em um ambiente de produção:
- Acesso ao terminal Isso permite o acesso do terminal à sua instância a partir da interface do usuário do JupyterLab.
Na seção Integridade do sistema, selecione Upgrade automático do ambiente e forneça o seguinte:
Em Relatórios, marque as seguintes caixas de seleção:
- Relatar a integridade do sistema
- Relatar métricas personalizadas para o Cloud Monitoring
- Instalar o Cloud Monitoring
- Informar o status de DNS dos domínios obrigatórios do Google
Clique em Criar.
Opcional: conceder o papel de usuário da conta de serviço ao usuário da instância
Se você estiver criando a instância de notebooks gerenciados pelo usuário para outro usuário,
conceda a eles o
papel de usuário da conta de serviço
(roles/iam.serviceAccountUser
) na conta de serviço personalizada user-managed-notebook-sa
da seguinte maneira:
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"
Substitua os seguintes valores:
- PROJECT_ID: o ID do projeto;
- USER_EMAIL: o endereço de e-mail do usuário
Verifique se a instância de notebooks gerenciados pelo usuário foi criada
O Vertex AI Workbench cria uma nova instância de notebooks gerenciados pelo usuário com base nas propriedades especificadas.
Quando a instância estiver pronta para uso, o Vertex AI Workbench ativa um link Abrir JupyterLab. Esse link só pode ser acessado pelo único usuário que você especificou no momento da criação da instância.
Abra a instância no JupyterLab e verifique se o repositório clonado do GitHub IA generativa do Google Cloud está presente.
No Console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
Na lista de instâncias de notebooks gerenciados pelo usuário, clique no link Abrir JupyterLab referente à instância que você criou.
Na lista de pastas, você verá uma pasta
generative-ai
. Essa pasta contém o repositório clonado do GitHub.
Monitorar o status de integridade pelo Monitoring
É possível monitorar as métricas do sistema e do aplicativo nas instâncias de notebooks gerenciados pelo usuário usando o console do Google Cloud. Para saber mais sobre o monitoramento de instâncias e sobre a criação de métricas personalizadas, consulte Monitorar o status de integridade.
No Console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
Clique no nome da instância de notebooks gerenciados pelo usuário para ver as métricas.
Na página Detalhes do notebook, clique na guia Monitoramento. Revise a Utilização da CPU e os Bytes de rede da sua instância de notebook. Para saber como interpretar essas métricas, consulte Analisar as métricas de recursos.
Se você acabou de criar a instância, não verá nenhum dado imediatamente. Aguarde alguns minutos e atualize a guia do console.
Criar uma programação de instância de VM para sua instância de notebooks gerenciados pelo usuário
Como uma instância de notebooks gerenciados pelo usuário é uma instância de VM do Compute Engine, é possível usar as APIs Compute Engine para criar uma programação de instâncias de VM para ela.
Use uma programação de instância de VM para iniciar e interromper a instância de notebooks gerenciados pelo usuário. Durante as horas em que a instância é interrompida, você paga apenas pelos custos do Cloud Storage.
É possível anexar uma programação de instância a qualquer instância de VM na mesma região, para que você possa usar a mesma programação de instância para controlar todas as instâncias de notebooks gerenciados pelo usuário na região.
Para saber mais sobre as programações de instâncias de VM, consulte Como programar uma instância de VM para iniciar e parar.
Criar um papel personalizado do IAM
Como prática recomendada de segurança, recomendamos criar um papel personalizado do IAM que tenha apenas as seguintes permissões e atribuí-lo à conta de serviço padrão do Compute Engine:
compute.instances.start
compute.instances.stop
No Cloud Shell, crie um papel personalizado chamado
Vm_Scheduler
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:
gcloud iam roles describe Vm_Scheduler --project=$projectid
Atribuir o papel à conta de serviço padrão do Compute Engine
Para conceder à conta de serviço padrão do Compute Engine permissão para iniciar e interromper as instâncias de notebooks gerenciados pelo usuário, é preciso atribuir o papel personalizado Vm_Scheduler
a ela.
A conta de serviço padrão do Compute Engine do projeto tem o seguinte endereço de e-mail: PROJECT_NUMBER-compute@developer.gserviceaccount.com
, em que PROJECT_NUMBER
é o número do projeto.
Identifique o número do projeto e armazene-o na variável de shell
project_number
:project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)') echo $project_number
Atribua o papel personalizado à conta de serviço padrão:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
Criar e anexar a programação
Para criar uma programação de instância que inicie sua instância de notebooks gerenciados pelo usuário às 7h e interrompê-las às 18h:
Crie uma programação de início e parada chamada
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
Substitua TIME_ZONE pelo fuso horário da IANA com base na localização para essa programação de instância, por exemplo,
America/Chicago
. Se omitido, o valor padrãoUTC
será usado. Para mais informações, consulte o fuso horário.Identifique o nome da sua instância de notebooks gerenciados pelo usuário executando o comando a seguir e observando o valor
NAME
que ele retorna:gcloud compute instances list
Armazene o nome na variável de shell
notebook_vm
:notebook_vm=NOTEBOOK_VM_NAME echo $notebook_vm
Substitua NOTEBOOK_VM_NAME pelo nome da instância de notebooks gerenciados pelo usuário.
Anexe a programação da instância à instância de notebooks gerenciados pelo usuário:
gcloud compute instances add-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a
Descreva a programação da instância:
gcloud compute resource-policies describe optimize-notebooks \ --region=us-central1
Para verificar se a programação da instância foi executada com sucesso, confira os registros de auditoria do Compute Engine da política de recursos da programação da instância e da instância de VM anexada. Talvez seja necessário aguardar até 15 minutos após o tempo programado para cada operação.
Limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
É possível excluir os recursos individuais no projeto da seguinte maneira:
No Console do Google Cloud, acesse a página Notebooks gerenciados pelo usuário.
Selecione sua instância de notebook gerenciado pelo usuário.
Clique em Excluir.
No Cloud Shell, exclua os recursos individuais restantes executando os comandos a seguir.
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
A seguir
- Siga as etapas do codelab Vertex AI para criação de um notebook seguro gerenciado pelo usuário.
- Saiba como usar o VPC Service Controls para configurar uma instância de notebooks gerenciados pelo usuário em um perímetro de serviço.
- Leia sobre Práticas recomendadas e arquiteturas de referência para o design da VPC.
- Saiba mais sobre como criar e implantar modelos de IA generativa e de machine learning em uma empresa.