프롬프트 암호화 SDK Codelab

1. 개요

이 Codelab에서는 프롬프트 암호화 SDK를 사용하여 Google Cloud의 신뢰할 수 있는 실행 환경 (TEE)에서 제공되는 모델과 안전하게 통신하는 방법을 안내합니다.

학습할 내용

  • 클라이언트와 원격 추론 서버 간에 암호화로 검증되고 암호화된 채널을 설정합니다.
  • 증명된 TLS를 사용하여 서버의 ID (소프트웨어 해시, 하드웨어 모델, 실행 구성)를 확인합니다.
  • 프롬프트가 검증된 보안 영역에 도달할 때까지 암호화된 상태로 유지하여 데이터 주권을 보장합니다.
  • 프롬프트 암호화 SDK를 사용하여 Confidential Space에서 실행되는 vLLM과 상호작용합니다.

필요한 항목

  • 결제가 사용 설정된 Google Cloud 프로젝트.
  • Google Cloud SDK (gcloud)가 설치되고 인증되었습니다.
  • Python 3.10+ 환경.
  • Gemma 모델을 다운로드하기 위한 Hugging Face 토큰.
  • VPC 방화벽 및 외부 IP 주소 할당량에 대한 숙련도.
  • SDK를 로컬에서 빌드하려면 _ekm.c C 확장 프로그램을 컴파일해야 합니다. Python C 헤더가 설치되어 있지 않으면 이 단계가 실패합니다. python3-dev를 설치하여 이 문제를 해결합니다 (예: Debian/Ubuntu의 경우 sudo apt-get install python3-dev).

2. Cloud 리소스 설정

시작하기 전에 필요한 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. Hugging Face 토큰 설정:

export HF_TOKEN="your_token"

4. 저장소 클론:

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

3. 시나리오

다음 항목을 사용합니다.

  • 클라이언트: 로컬 Python 환경 또는 표준 VM.
  • 서버: Confidential Space (TDX/SEV-SNP) 내에서 오픈소스 모델 (예: Gemma)을 제공하는 vLLM 인스턴스.
  • SDK: prompt_encryption_sdk Python 라이브러리.

4. 0단계: 서버 설정

클라이언트가 항목을 확인하려면 Confidential Space에서 실행되는 서버가 필요합니다. 제공된 Bash 스크립트가 프로비저닝을 처리합니다.

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

setup.sh 스크립트는 다음을 실행합니다.

  1. 필수 API (Compute, 컨피덴셜 컴퓨팅, 로깅, Artifact Registry, Cloud Build)를 사용 설정합니다.
  2. Docker 이미지를 빌드하고 푸시합니다 (증명된 TLS 미들웨어로 vLLM 래핑).
  3. 필요한 권한이 있는 서비스 계정을 프로비저닝합니다.
  4. 컨피덴셜 VM (H100 GPU 및 TDX가 사용 설정된 A3 인스턴스)을 만듭니다.
  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 스크립트는 배포 세부정보를 읽고 ConfidentialSDKClient를 사용하여 Python 요청을 실행합니다. 증명에 실패하면 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 하드웨어 따옴표를 요청합니다.
  5. 유효성 검사: SDK가 따옴표 서명 및 정책을 확인합니다.
  6. 바인딩: SDK가 채널의 '내보낸 키 지정 자료'가 따옴표에 바인딩된 세션과 일치하는지 확인합니다.
  7. 데이터 전송: 모든 검사를 통과하는 경우에만 본문이 전송됩니다.

8. 문제 해결

  • 증명 실패: 정책의 image_hash가 컨테이너와 일치하는지 확인합니다.
  • 연결 거부됨: 서버에 연결할 수 있고 포트 8000이 열려 있는지 확인합니다.
  • 시간 초과: TEE 따옴표 생성에 시간이 걸릴 수 있습니다. 시간 제한이 충분한지 확인합니다.

9. 축하합니다

프롬프트 암호화 SDK Codelab을 완료했습니다. 클라이언트와 TEE 기반 추론 서버 간에 암호화로 검증되고 암호화된 채널을 설정하는 방법을 알아보았습니다.

다음 단계

  • 고급 AttestationPolicy 구성을 살펴봅니다.
  • SDK를 기존 프로덕션 애플리케이션과 통합합니다.
  • Confidential Space 및 TEE 하드웨어 모델에 대해 자세히 알아봅니다.

추가 자료