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 выполняет следующие действия:
- Включает необходимые API (вычисления, конфиденциальные вычисления, логирование, реестр артефактов, создание облачных решений).
- Создает и загружает образ Docker (обертывая vLLM промежуточным ПО Attested TLS).
- Создает служебный аккаунт с необходимыми правами доступа.
- Создает конфиденциальную виртуальную машину (экземпляр A3 с графическим процессором H100 и включенным TDX).
- Настраивает сеть и балансировку нагрузки (сквозной балансировщик сетевой нагрузки).
- Сохраняет выходные данные (хеш изображения и 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-запроса?
- TCP/TLS: Установлено стандартное соединение.
- Перехват подтверждения соединения: SDK делает паузу перед отправкой тела подтверждения.
- AttestConnection RPC: SDK отправляет nonce на сервер.
- Формирование запроса на расчет стоимости оборудования TEE: Сервер запрашивает у сервера расчет стоимости оборудования TEE.
- Проверка: SDK проверяет подпись котировки и политику.
- Привязка : SDK проверяет, соответствует ли "Экспортируемый ключевой материал" канала сеансу, привязанному в цитате.
- Передача данных: Сообщение отправляется только в том случае, если все проверки пройдены успешно.
8. Устранение неполадок
- Аттестация не пройдена: проверьте соответствие параметра image_hash в политике контейнеру.
- Соединение отклонено: Убедитесь, что сервер доступен и порт 8000 открыт.
- Истекло время ожидания: генерация котировки TEE может занять время; убедитесь, что время ожидания достаточно велико.
9. Поздравляем!
Вы успешно завершили практическое занятие по SDK для шифрования подсказок! Вы научились устанавливать криптографически проверенный и зашифрованный канал между вашим клиентом и сервером вывода на основе TEE.
Что дальше?
- Изучите расширенные настройки AttestationPolicy.
- Интегрируйте SDK с существующими производственными приложениями.
- Узнайте больше о конфиденциальном пространстве и моделях оборудования TEE.