Este tutorial é destinado a cientistas de dados, pesquisadores e administradores de rede empresariais. Ele mostra como proteger uma instância do Vertex AI Workbench 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. No entanto, é possível compartilhar uma rede VPC de um projeto (chamado de projeto host) com outros projetos na sua Google Cloud organização. 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:
- A instância do Vertex AI Workbench 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 do Vertex AI Workbench.
- Use o Cloud Monitoring para monitorar a instância do Vertex AI Workbench.
- 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 do Vertex AI Workbench na sub-rede usando um script de pós-inicialização que clona o repositório do GitHub Google Cloud IA generativa.
- 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 Google Cloud e armazene o mesmo
ID do projeto na variável de shell
projectid
: Substitua PROJECT_ID pelo ID do 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 - Se você não for o proprietário do projeto, peça a ele que conceda a você o papel Administrador do IAM do projeto (roles/resourcemanager.projectIamAdmin). É preciso ter esse papel para conceder papéis do IAM na próxima etapa.
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/aiplatform.user, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/monitoring.viewer, 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
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
Criar um bucket do Cloud Storage
Nesta seção, você cria um bucket do Cloud Storage para armazenar um script pós-inicialização que pode ser executado ao criar uma nova instância do Vertex AI Workbench.
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
Criar e fazer upload de um script pós-inicialização
Nesta seção, você vai criar um script de pós-inicialização para clonar um repositório do GitHub em uma nova instância do Vertex AI Workbench.
Para criar o script, use um editor de texto, como
vim
ounano
para criar um arquivopoststartup.sh
. É necessário adicionar ao iníciosudo
para ter permissão de gravação no arquivo, por exemplo:sudo vim poststartup.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 da seguinte maneira:
- Se você estiver usando
vim
, pressione a teclaEsc
e, em seguida, digite:wq
para salvar o arquivo e sair. - Se você estiver usando
nano
, digiteControl+O
e pressioneEnter
para salvar o arquivo. Em seguida, digiteControl+X
para sair.
- Se você estiver usando
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 do Vertex AI Workbench, 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. Caso sua organização não
aplique a iam.automaticIamGrantsForDefaultServiceAccounts
;
a restrição da política da organização, a conta de serviço padrão do Compute Engine
(e, portanto, qualquer pessoa que você especificar como usuário da instância) receberá o papel de Editor
(roles/editor
) no seu projeto. Para desativar esse comportamento,
consulte Desativar atribuições automáticas de papéis
para contas
de serviço padrão.
Crie uma conta de serviço personalizada chamada
workbench-sa
:gcloud iam service-accounts create workbench-sa \ --display-name="workbench-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:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Atribua o papel do IAM de gravador de métricas do Monitoring à conta de serviço:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
Atribua o papel do IAM de usuário da Vertex AI à conta de serviço:
gcloud projects add-iam-policy-binding $projectid \ --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \ --role="roles/aiplatform.user"
crie uma instância do Vertex AI Workbench
Nesta seção, você vai criar a instância do Vertex AI Workbench. Quando a instância é criada, o script pós-inicialização que você criou é executado automaticamente.
No console do Google Cloud, acesse a guia Instâncias na página do Vertex AI Workbench.
Clique em
Criar novo e em Opções avançadas.A página Nova instância será aberta.
Na página Nova instância, na seção Detalhes, digite 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, em
poststartup.sh
e em Selecionar.
Ver recursos filhos ao lado do nome do bucket, em
- Script de pós-inicialização: clique em Procurar, em
Na seção Tipo de máquina, preencha as seguintes informações 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 opção Google-managed encryption key 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) pode receber o papel de Editor (
roles/editor
) no projeto. No campo E-mail da conta de serviço, digite o seguinte, substituindo PROJECT_ID pelo ID do projeto:
workbench-sa@PROJECT_ID.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 do Vertex AI Workbench.
Opções de segurança: desmarque a caixa de seleção a seguir:
- Acesso raiz à instância
Marque a seguinte caixa de seleção:
- O nbconvert
nbconvert
permite que os usuários exportem e baixem um arquivo de notebook como outro tipo de arquivo, como HTML, PDF ou LaTeX. Essa configuração é exigida por alguns dos notebooks no repositório do GitHub da IA generativaGoogle Cloud .
Desmarque a caixa de seleção a seguir:
- Permitir downloads do arquivo
Marque a seguinte caixa de seleção, a menos que você esteja em um ambiente de produção:
- Acesso ao terminal: permite acessar a instância pelo terminal na interface de 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 e aguarde alguns minutos para que a instância do Vertex AI Workbench seja criada.
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 do Vertex AI Workbench para outro usuário,
conceda a ele o
papel de usuário da conta de serviço
(roles/iam.serviceAccountUser
) na conta de serviço personalizada workbench-sa
da seguinte maneira:
gcloud iam service-accounts add-iam-policy-binding \ workbench-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
Verificar se a instância do Vertex AI Workbench foi criada
O Vertex AI Workbench cria uma instância do Vertex AI Workbench com base nas propriedades especificadas e a inicia automaticamente.
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 Google Cloud IA generativa está presente.
No Console do Google Cloud, acesse a página Vertex AI Workbench.
Na lista de instâncias do Vertex AI Workbench, clique no link Abrir JupyterLab para a 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 do Vertex AI Workbench usando o consoleGoogle Cloud . Para saber mais sobre o monitoramento de instâncias e a criação de métricas personalizadas, consulte Monitorar o status de integridade.
No Console do Google Cloud, acesse a página Vertex AI Workbench.
Clique no nome da instância do Vertex AI Workbench para conferir as métricas.
Na página Detalhes da instância, 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âncias de VM para sua instância do Vertex AI Workbench
Como uma instância do Vertex AI Workbench é 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 do Vertex AI Workbench. 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 do Vertex AI Workbench 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 do Vertex AI Workbench, é 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:service-$project_number@compute-system.iam.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 do Vertex AI Workbench às 7h e interrompa à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 do Vertex AI Workbench 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 sua instância do Vertex AI Workbench.
Anexe a programação da instância à sua instância do Vertex AI Workbench:
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.
Limpar
Para evitar cobranças na sua Google Cloud conta pelos recursos usados neste tutorial, exclua o projeto que contém os recursos ou mantenha o projeto e exclua os recursos individuais.É possível excluir os recursos individuais no projeto da seguinte maneira, executando os seguintes comandos no Cloud Shell:
Remova a programação da instância:
gcloud compute instances remove-resource-policies $notebook_vm \ --resource-policies=optimize-notebooks \ --zone=us-central1-a --quiet
Exclua a programação de instância:
gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
Exclua a função
Vm_Scheduler
:gcloud iam roles delete Vm_Scheduler --project=$projectid
Exclua a instância do Vertex AI Workbench:
gcloud workbench instances delete $notebook_vm \ --location=us-central1-a \ --quiet
Exclua a conta de serviço:
gcloud iam service-accounts delete workbench-sa@$projectid.iam.gserviceaccount.com --quiet
Exclua o bucket do Cloud Storage:
gcloud storage rm -r gs://BUCKET_NAME
Exclua o gateway NAT do Cloud regional:
gcloud compute routers nats delete cloud-nat-us-central1 \ --region=us-central1 \ --router=cloud-router-us-central1 \ --quiet
Exclua o Cloud Router regional:
gcloud compute routers delete cloud-router-us-central1 \ --region=us-central1 \ --quiet
Exclua a sub-rede da VPC:
gcloud compute networks subnets delete securevertex-subnet-a \ --region=us-central1 \ --quiet
Exclua a rede VPC:
gcloud compute networks delete securevertex-vpc --quiet