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

1. Введение

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

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

Что вы построите

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

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

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

Рисунок 1

2292244ba0b11f71.png

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

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

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

  • Проект Google Cloud

Разрешения IAM

2. Сеть VPC

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

Автономная VPC

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

Рисунок 2

2292244ba0b11f71.png

Общая VPC

Функция Shared VPC позволяет экспортировать подсети из сети VPC в рамках основного проекта в сервисные проекты в той же организации . Основной проект содержит сетевые ресурсы, которые используются совместно с сервисным проектом, такие как подсети, Cloud NAT и правила брандмауэра. Сервисный проект содержит ресурсы уровня приложения, которые используют сетевые ресурсы основного проекта.

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

Рисунок 3

1354a9323c8e5787.png

Автономная VPC против общей 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) для учетной записи службы экземпляра.
  • Отключите следующие параметры:
  • доступ с правами root
  • nbconvert
  • Загрузка файла из пользовательского интерфейса JupyterLab
  • Вместо назначения внешнего IP-адреса управляемому пользователем ноутбуку будет использоваться облачный 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.

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

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

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

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

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

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

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

Загрузите скрипт после запуска системы в ваше хранилище из Cloud Shell с помощью 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. В разделе «Окружающая среда» укажите следующее:
  • Операционная система: Выберите операционную систему, которую вы хотите использовать.
  • Выберите среду , которую вы хотите использовать.
  • Версия: Выберите версию, которую хотите использовать.
  • Скрипт, запускаемый после запуска ( необязательно, используйте ранее созданный скрипт генеративного ИИ): выберите «Обзор», чтобы выбрать скрипт, который будет запущен после запуска экземпляра.
  • Метаданные: Необязательно: Укажите пользовательские ключи метаданных для экземпляра.

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

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

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

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

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

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

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

  1. В разделе «Сетевые настройки» укажите следующее:
  • Сетевые настройки: выберите либо «Сети в этом проекте», либо «Сети, предоставленные мне». Если вы используете общую VPC в основном проекте, необходимо также предоставить роль пользователя вычислительной сети (roles/compute.networkUser) агенту службы Notebooks из проекта службы.
  • В поле «Сеть» выберите нужную сеть. В руководстве используется сеть securevertex-vpc. Вы можете выбрать любую сеть VPC, если в ней включен Private Google Access или она имеет доступ к интернету. В поле «Подсеть» выберите нужную подсеть; в руководстве используется подсеть 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. В разделе «Состояние системы» укажите следующее.

Обновление среды и состояние системы

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

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

  • Включить отчет о состоянии системы
  • Передавайте пользовательские метрики в систему мониторинга облака.
  • Установите агент облачного мониторинга.

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

10. Валидация

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

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

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

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

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

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

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

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

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

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

Что дальше?

Посмотрите эти обучающие материалы...

Дополнительная литература и видеоматериалы

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