Кодлаборатория SDK для шифрования запросов

1. Обзор

В этом практическом занятии вы узнаете, как использовать SDK Prompt Encryption для безопасной связи с моделью, размещенной в доверенной среде выполнения (TEE) в Google Cloud.

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

  • Установление криптографически проверенного и зашифрованного канала связи между клиентом и удаленным сервером обработки данных.
  • Проверка подлинности сервера (хеш программного обеспечения, модель оборудования, конфигурация запуска) с использованием Attested TLS.
  • Обеспечение суверенитета данных путем сохранения зашифрованных запросов до тех пор, пока они не достигнут проверенного анклава.
  • Использование SDK Prompt Encryption для взаимодействия с vLLM, работающим в конфиденциальном пространстве.

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

  • Проект в Google Cloud с включенной функцией выставления счетов.
  • Установлен и авторизован Google Cloud SDK (gcloud).
  • Среда разработки Python 3.10+.
  • Токен «Обнимающее лицо» для скачивания моделей Джеммы.
  • Знание принципов работы межсетевых экранов VPC и квот на внешние IP-адреса.
  • Для локальной сборки SDK требуется скомпилировать расширение C _ekm.c. Этот шаг завершится неудачей, если не установлены заголовочные файлы Python C. Для решения этой проблемы установите python3-dev (например, sudo apt-get install python3-dev для Debian/Ubuntu).

2. Настройка облачных ресурсов

Перед началом работы убедитесь, что вы включили необходимые API и настроили свою среду.

1. Включите необходимые API:

gcloud services enable compute.googleapis.com \
    confidentialcomputing.googleapis.com \
    logging.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com

2. Настройка Docker:

gcloud auth configure-docker gcr.io

3. Установите токен "Обнимающее лицо":

export HF_TOKEN="your_token"

4. Клонируйте репозиторий:

git clone https://github.com/google/prompt-encryption-sdk && cd prompt-encryption-sdk

3. Сценарий

Мы будем использовать:

  • Клиент: Ваша локальная среда Python или стандартная виртуальная машина.
  • Сервер: Экземпляр vLLM, предоставляющий доступ к модели с открытым исходным кодом (например, Gemma) внутри конфиденциального пространства (TDX/SEV-SNP).
  • SDK: Библиотека Python prompt_encryption_sdk.

4. Шаг 0: Настройка сервера

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

./codelabs/setup.sh --project-id <PROJECT_ID>

Скрипт setup.sh выполняет следующие действия:

  1. Включает необходимые API (вычисления, конфиденциальные вычисления, логирование, реестр артефактов, создание облачных решений).
  2. Создает и загружает образ Docker (обертывая vLLM промежуточным ПО Attested TLS).
  3. Создает служебный аккаунт с необходимыми правами доступа.
  4. Создает конфиденциальную виртуальную машину (экземпляр A3 с графическим процессором H100 и включенным TDX).
  5. Настраивает сеть и балансировку нагрузки (сквозной балансировщик сетевой нагрузки).
  6. Сохраняет выходные данные (хеш изображения и IP-адрес балансировщика нагрузки) в локальные файлы.

5. Шаг 1: Запустите аттестованный клиент.

Теперь, когда сервер работает в безопасном режиме, установите подтвержденное соединение.

python3 -m venv venv
source venv/bin/activate
pip install -r examples/requirements.txt
pip install -e .
./codelabs/run_client.sh <PROJECT_ID>

Скрипт run_client.sh считывает сведения о развертывании и выполняет запрос на Python с использованием ConfidentialSDKClient. Если аттестация не удается, генерируется ошибка AttestationError, и запрос на подтверждение никогда не отправляется.

6. Шаг 2: Уборка

Во избежание штрафов, после завершения работы убирайте использованные ресурсы.

./codelabs/cleanup.sh --project-id <PROJECT_ID>

7. Под капотом

Что происходит во время выполнения HTTP POST-запроса?

  1. TCP/TLS: Установлено стандартное соединение.
  2. Перехват подтверждения соединения: SDK делает паузу перед отправкой тела подтверждения.
  3. AttestConnection RPC: SDK отправляет nonce на сервер.
  4. Формирование запроса на расчет стоимости оборудования TEE: Сервер запрашивает у сервера расчет стоимости оборудования TEE.
  5. Проверка: SDK проверяет подпись котировки и политику.
  6. Привязка : SDK проверяет, соответствует ли "Экспортируемый ключевой материал" канала сеансу, привязанному в цитате.
  7. Передача данных: Сообщение отправляется только в том случае, если все проверки пройдены успешно.

8. Устранение неполадок

  • Аттестация не пройдена: проверьте соответствие параметра image_hash в политике контейнеру.
  • Соединение отклонено: Убедитесь, что сервер доступен и порт 8000 открыт.
  • Истекло время ожидания: генерация котировки TEE может занять время; убедитесь, что время ожидания достаточно велико.

9. Поздравляем!

Вы успешно завершили практическое занятие по SDK для шифрования подсказок! Вы научились устанавливать криптографически проверенный и зашифрованный канал между вашим клиентом и сервером вывода на основе TEE.

Что дальше?

  • Изучите расширенные настройки AttestationPolicy.
  • Интегрируйте SDK с существующими производственными приложениями.
  • Узнайте больше о конфиденциальном пространстве и моделях оборудования TEE.

Дополнительная информация