Vertex AI создает безопасный блокнот, управляемый пользователем

1. Введение

Экземпляры управляемых пользователем блокнотов Vertex AI Workbench позволяют создавать экземпляры виртуальных машин глубокого обучения (ВМ), предварительно упакованные с помощью JupyterLab , и управлять ими.

Экземпляры блокнотов, управляемых пользователем, имеют предустановленный набор пакетов глубокого обучения, включая поддержку платформ TensorFlow и PyTorch. Вы можете настроить экземпляры с поддержкой только процессора или графического процессора.

Что ты построишь

В этом руководстве описывается процесс развертывания защищенного блокнота, управляемого пользователем, на основе передового опыта из раздела «Сеть и безопасность». Предусмотрены следующие шаги:

  1. Создать VPC
  2. Создайте облачный маршрутизатор и облачный NAT
  3. Настройте экземпляр блокнота с соответствующими параметрами безопасности.

В этом руководстве представлены подробные инструкции для каждого шага. Он также содержит советы и рекомендации по обеспечению безопасности блокнотов, управляемых пользователями. На рис. 1 показано развертывание с использованием автономного VPC.

Рисунок 1

2292244ba0b11f71.png

Что вы узнаете

  • Как определить, подходит ли вашей организации общий или автономный VPC
  • Как создать автономный VPC
  • Как создать облачный маршрутизатор и облачный NAT
  • Как создать блокнот, управляемый пользователем
  • Как получить доступ к блокноту, управляемому пользователем
  • Как отслеживать состояние ноутбука, управляемого пользователем
  • Как создать и применить расписание экземпляра

Что вам понадобится

  • Облачный проект Google

IAM-разрешения

2. Сеть VPC

Вы можете думать о сети VPC так же, как о физической сети, за исключением того, что она виртуализирована в Google Cloud. Сеть VPC — это глобальный ресурс, состоящий из региональных подсетей. Сети VPC логически изолированы друг от друга в Google Cloud.

Автономное облако облака

На рисунке 2 показан пример автономного глобального VPC, состоящего из региональной подсети (us-central1) в дополнение к облачному маршрутизатору и облачному NAT, используемому для того, чтобы позволить управляемому пользователем ноутбуку безопасно устанавливать подключение к Интернету.

Рисунок 2

2292244ba0b11f71.png

Общий VPC

Общий VPC позволяет экспортировать подсети из сети VPC в хост-проекте для обслуживания проектов в той же организации . Хост-проект содержит сетевые ресурсы, которые используются совместно с сервисным проектом, например подсети, облачные ресурсы и правила брандмауэра. Проект службы содержит ресурсы уровня приложения, которые используют сетевые ресурсы главного проекта.

На рис. 3 показана глобальная общая среда VPC, в которой сетевая инфраструктура и инфраструктура безопасности развертываются в хост-проекте, а рабочие нагрузки — в сервисном проекте.

Рисунок 3

1354a9323c8e5787.png

Автономное и общее VPC

Одной сети VPC достаточно для многих простых случаев использования, поскольку ее легче создавать, поддерживать и понимать, чем более сложные альтернативы. Общий VPC — эффективный инструмент для организаций с несколькими командами, поскольку он позволяет им расширить архитектурную простоту одной сети VPC на несколько рабочих групп за счет использования сервисных проектов.

Лучшие практики VPC, используемые в руководстве

  • Включите Cloud NAT для доступа к ноутбуку.
  • Включайте частный доступ Google при создании подсетей.
  • Создайте предписывающие правила брандмауэра, чтобы уменьшить нежелательный трафик, например, не используйте TCP 0.0.0.0/0, вместо этого определите точные IP-адреса подсетей или хостов.
  • Используйте политики брандмауэра, чтобы расширить сферу действия правил входа, например географическое расположение, списки аналитики угроз, имена исходных доменов и т. д.

3. Рекомендации по использованию ноутбуков

Правильный размер экземпляров

  • Остановите и/или удалите неиспользуемые экземпляры.
  • Используйте меньший начальный экземпляр и выполните итерацию с меньшими выборочными данными.
  • Масштабируйте экземпляры по мере необходимости
  • Экспериментируйте с меньшими наборами данных

Выбирайте правильные типы машин

  • Оптимизированные по стоимости виртуальные машины
  • Более эффективное использование аппаратных ресурсов для снижения затрат
  • Экономия до 31% по сравнению с N1
  • Дополнительная экономия (20–50%) при заключении контракта на 1 или 3 года.
  • Увеличение размера машины или добавление графических процессоров может помочь повысить производительность и преодолеть ошибки ограничения памяти.

Запланируйте отключение ваших экземпляров

  • Отключение экземпляров, когда они простаивают (плата только за дисковое пространство)
  • Запланируйте автоматическое выключение и запуск экземпляров виртуальных машин ноутбука в определенные часы.

Следите за состоянием здоровья ноутбука

Вопросы безопасности

Ниже приведены рекомендуемые меры безопасности при создании записной книжки, управляемой пользователем.

  • Выберите вариант доступа к блокноту «только для одного пользователя». Если указанный пользователь не является создателем экземпляра, необходимо предоставить указанному пользователю роль пользователя учетной записи службы (roles/iam.serviceAccountUser) в учетной записи службы экземпляра.
  • Отключите следующие параметры:
  • корневой доступ
  • nbconvert
  • загрузка файла из пользовательского интерфейса JupyterLab
  • Вместо назначения внешнего IP-адреса ноутбуку, управляемому пользователем, будет использоваться Cloud NAT.
  • Выберите следующие параметры вычислений:
  • Безопасная загрузка
  • Модуль виртуальной доверенной платформы (vTPM)
  • Мониторинг целостности

4. Прежде чем начать

Обновите проект для поддержки руководства.

В этом руководстве переменные $variables используются для облегчения реализации конфигурации gcloud в Cloud Shell.

Внутри Cloud Shell выполните следующие действия:

gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid

5. Настройка VPC

Создайте автономный VPC

Внутри Cloud Shell выполните следующие действия:

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

Создайте подсеть блокнотов, управляемую пользователем.

Внутри Cloud Shell выполните следующие действия:

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

Облачный маршрутизатор и конфигурация NAT

Облачный NAT используется в руководстве для загрузки пакетов программного обеспечения для ноутбуков, поскольку экземпляр ноутбука, управляемый пользователем, не имеет внешнего IP-адреса. Cloud NAT также предлагает возможности исходящего NAT, что означает, что интернет-хостам не разрешено инициировать связь с ноутбуком, управляемым пользователем, что делает его более безопасным.

В Cloud Shell создайте региональный облачный маршрутизатор.

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

В Cloud Shell создайте региональный шлюз 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. Создайте сегмент хранения

Корзины хранилища обеспечивают безопасную загрузку/извлечение файлов. В руководстве облачное хранилище будет содержать сценарий после запуска для установки пакетов генеративного искусственного интеллекта в управляемые пользователем блокноты.

Создайте сегмент Cloud Storage и замените BUCKET_NAME глобально уникальным именем, которое вы предпочитаете.

Внутри Cloud Shell создайте уникальный сегмент хранилища.

gsutil mb -l us-central1 -b on gs://BUCKET_NAME

Сохраните BUCKET_NAME на время лабораторной работы.

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

7. Создайте сценарий после запуска.

Чтобы включить загрузку пакетов Generative AI, создайте сценарий после запуска в облачной оболочке с помощью редактора vi или nano и сохраните его как 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

Пример:

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

Загрузите сценарий после запуска в свою корзину хранилища из облачной оболочки с помощью gsutil.

gsutil cp poststartup.sh gs://$BUCKET_NAME

8. Создайте учетную запись службы.

Для обеспечения высокого уровня контроля над записной книжкой, управляемой пользователем, требуется учетная запись службы . После создания разрешения учетной записи службы можно изменить в зависимости от бизнес-требований. В этом руководстве к учетной записи службы будут применены следующие правила:

Прежде чем продолжить, необходимо API учетной записи службы.

В Cloud Shell создайте учетную запись службы.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

В Cloud Shell обновите учетную запись службы, указав роль «Просмотр объектов хранилища».

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"

В Cloud Shell обновите учетную запись службы, указав роль пользователя Vertex AI.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

В Cloud Shell укажите учетную запись службы и запишите адрес электронной почты, который будет использоваться при создании блокнота, управляемого пользователем.

gcloud iam service-accounts list

Пример:

$ 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. Создайте безопасный блокнот, управляемый пользователем.

Экземпляр блокнотов, управляемых пользователем, — это экземпляр виртуальной машины глубокого обучения с предустановленными новейшими библиотеками машинного обучения и обработки данных. При желании вы можете включить графические процессоры Nvidia для аппаратного ускорения.

Включить потребительские API

API ноутбуков

Создайте блокнот, управляемый пользователем.

  1. Перейти к рабочему столу
  2. Выберите «Записные книжки, управляемые пользователями», а затем выберите «Создать записную книжку». Откроется страница Создать блокнот, управляемый пользователем.
  3. Если развернут существующий блокнот, выберите «Записные книжки, управляемые пользователями» → «Новая записная книжка» → «Настроить».
  4. На странице «Создание блокнота, управляемого пользователем» в разделе «Сведения» укажите следующую информацию для нового экземпляра:
  • Имя: укажите имя для вашего нового экземпляра.
  • Регион и зона: в руководстве будут использоваться регион us-central1 и зона us-central1-a.

Выберите Продолжить

  1. В разделе «Окружающая среда» укажите следующее:
  • Операционная система: выберите операционную систему, которую вы хотите использовать.
  • Выберите среду , которую вы хотите использовать.
  • Версия: выберите версию, которую вы хотите использовать.
  • Сценарий после запуска ( необязательно, используйте ранее созданный генеративный сценарий AI). Выберите «Обзор», чтобы выбрать сценарий, который будет запускаться после запуска экземпляра.
  • Метаданные: Необязательно: укажите пользовательские ключи метаданных для экземпляра.

Выберите Продолжить

  1. В разделе Тип машины укажите следующее:
  • Тип машины: выберите количество процессоров и объем оперативной памяти для вашего нового экземпляра. Vertex AI Workbench предоставляет ежемесячную оценку затрат для каждого выбранного вами типа машины.
  • Тип графического процессора: выберите тип графического процессора и количество графических процессоров для вашего нового экземпляра. Информацию о различных графических процессорах см. в разделе Графические процессоры в Compute Engine .
  • Установите флажок «Установить драйвер NVIDIA GPU автоматически».

Экранированная виртуальная машина

  • Включите безопасную загрузку
  • Включите vTPM
  • Включите мониторинг целостности

Выберите Продолжить

  1. В разделе «Диски» укажите следующее:
  • Диски: Необязательно: Чтобы изменить настройки загрузочного диска или диска данных по умолчанию, выберите тип загрузочного диска, размер загрузочного диска в ГБ, тип диска данных и размер диска данных в ГБ, который вам нужен. Дополнительные сведения о типах дисков см. в разделе Параметры хранилища .
  • Удалить в корзину: Необязательно: установите этот флажок, чтобы использовать поведение корзины операционной системы по умолчанию. Если вы используете поведение корзины по умолчанию, файлы, удаленные с помощью пользовательского интерфейса JupyterLab, можно восстановить, но эти удаленные файлы занимают дисковое пространство.
  • Резервное копирование: необязательно: чтобы синхронизировать местоположение облачного хранилища с диском данных вашего экземпляра, выберите «Обзор» и укажите местоположение облачного хранилища. Чтобы узнать о стоимости хранения, ознакомьтесь с ценами на облачное хранилище .
  • Шифрование: ключ шифрования, управляемый Google.

Выберите Продолжить

  1. В разделе «Сеть» укажите следующее:
  • Сеть: выберите «Сети в этом проекте» или «Сети, которыми поделились со мной». Если вы используете общий VPC в главном проекте, вам также необходимо предоставить роль пользователя вычислительной сети (roles/compute.networkUser) агенту службы ноутбуков из проекта службы.
  • В поле Сеть выберите нужную сеть. В руководстве используется сеть securevertex-vpc. Вы можете выбрать сеть VPC, если в сети включен частный доступ Google или есть доступ к Интернету. В поле Подсеть выберите нужную подсеть, в руководстве используется подсеть securevertex-subnet-a .
  • Снимите флажок «Назначить внешний IP-адрес».
  • Выберите разрешить доступ через прокси.

Выберите Продолжить

81bb7dbe31fbf587.png

  1. В разделе IAM и безопасность укажите следующее:
  • Выберите «Один пользователь» , а затем в поле «Электронная почта пользователя» введите учетную запись пользователя, которой вы хотите предоставить доступ. Если указанный пользователь не является создателем экземпляра, вы должны предоставить указанному пользователю роль пользователя учетной записи службы (roles/iam.serviceAccountUser) в учетной записи службы экземпляра.
  • Снимите флажок «Использовать учетную запись службы Compute Engine по умолчанию на виртуальной машине для вызова API Google Cloud».
  • Введите адрес электронной почты вновь созданной учетной записи службы, например: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com .

Параметры безопасности

  • Снимите флажок, чтобы разрешить root-доступ к экземпляру.
  • Снимите флажок, включите nbconvert
  • Снимите флажок «Включить загрузку файлов из пользовательского интерфейса JupyterLab».
  • Включить терминал (отменить выбор для производственных сред)

Выберите Продолжить

e19f3cd05a2c1b7f.png

  1. В разделе «Состояние системы» укажите следующие данные.

Обновление среды и работоспособность системы

  • Установите флажок Включить автоматическое обновление среды.
  • Выберите, обновлять ли свой блокнот еженедельно или ежемесячно.

В разделе «Работоспособность системы и отчетность» установите или снимите следующие флажки:

  • Включить отчет о состоянии системы
  • Сообщайте о пользовательских показателях в Cloud Monitoring
  • Установите агент облачного мониторинга

Выберите Создать.

10. Валидация

Vertex AI Workbench создает экземпляр блокнотов, управляемый пользователем, на основе указанных вами свойств и автоматически запускает этот экземпляр. Когда экземпляр готов к использованию, Vertex AI Workbench активирует ссылку Open JupyterLab , которая предоставляет конечному пользователю доступ к блокноту.

11. Наблюдательность

Мониторинг показателей системы и приложений с помощью мониторинга

Для экземпляров блокнотов, управляемых пользователями, на которых установлен мониторинг , вы можете отслеживать показатели системы и приложений с помощью консоли Google Cloud:

  1. В консоли Google Cloud перейдите на страницу блокнотов, управляемых пользователями .
  2. Щелкните имя экземпляра, для которого вы хотите просмотреть метрики системы и приложения.
  3. На странице сведений о блокноте перейдите на вкладку Мониторинг. Просмотрите метрики системы и приложения для вашего экземпляра.

12. Создайте расписание для блокнота

Расписания экземпляров позволяют автоматически запускать и останавливать экземпляры виртуальных машин (ВМ). Использование расписаний экземпляров для автоматизации развертывания экземпляров виртуальных машин поможет оптимизировать затраты и более эффективно управлять экземплярами виртуальных машин. Вы можете использовать расписания экземпляров как для повторяющихся, так и для разовых рабочих нагрузок. Например, используйте расписания экземпляров, чтобы запускать экземпляры виртуальных машин только в рабочее время или обеспечить емкость для однократного события.

Чтобы использовать расписания экземпляров, создайте политику ресурсов, подробно описывающую поведение при запуске и остановке, а затем прикрепите эту политику к одному или нескольким экземплярам виртуальных машин.

В этом руководстве показано, как создать расписание экземпляра, при котором ваш ноутбук будет включаться в 7 утра и выключаться в 18:00.

Для создания расписания экземпляра вам потребуются разрешения Compute.instances.start и Compute.instance.stop, поэтому рекомендуется использовать пользовательскую роль, созданную предоставленным вам администратором.

После создания настраиваемая роль будет назначена учетной записи службы Compute Engine по умолчанию в вашем проекте, что позволит расписанию экземпляра запускать и останавливать ваш блокнот.

Создать пользовательскую роль

В Cloud Shell создайте специальную роль VmScheduler и включите необходимые разрешения.

gcloud iam roles create Vm_Scheduler --project=$projectid \
    --title=vm-scheduler-notebooks \
    --permissions="compute.instances.start,compute.instances.stop" --stage=ga

Опишите пользовательскую роль из Cloud Shell.

gcloud iam roles describe Vm_Scheduler --project=$projectid

Пример:

$ 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

Обновите учетную запись службы по умолчанию

В следующем разделе вы определите и обновите учетную запись службы по умолчанию, имеющую следующий формат: PROJECT_NUMBER-compute@developer.gserviceaccount.com.

В Cloud Shell определите номер текущего проекта.

gcloud projects list --filter=$projectid

В Cloud Shell сохраните номер проекта как переменную.

project_number=your_project_number
echo $project_number

В Cloud Shell обновите учетную запись службы вычислений по умолчанию, добавив настраиваемую роль VM_Scheduler.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"

Создайте расписание экземпляра

В Cloud Shell создайте расписание запуска и остановки.

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

В Cloud Shell сохраните имя вашего блокнота.

gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm

Вы можете прикрепить расписание экземпляра к любому существующему экземпляру виртуальной машины, расположенному в том же регионе, что и расписание экземпляра.

В Cloud Shell свяжите расписание со своим блокнотом.

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

13. Очистка

Удалите блокнот, управляемый пользователем, из консоли, перейдите в Vertex AI → Workbench, выберите и удалите блокнот.

В Cloud Shell удалите компоненты 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. Поздравления

Отличная работа! Вы успешно настроили и проверили защищенный блокнот, управляемый пользователем, создав собственное автономное облако VPC, используя передовые методы повышения безопасности для управляемых блокнотов, и внедрили расписание экземпляров для оптимизации расходов.

Что дальше?

Посмотрите некоторые из этих уроков...

Дальнейшее чтение и видео

Справочная документация