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.instance.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, используя передовые методы повышения безопасности для управляемых блокнотов, и внедрили расписание экземпляров для оптимизации расходов.

Что дальше?

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

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

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