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 스크립트는 다음을 실행합니다.
- 필수 API (Compute, 컨피덴셜 컴퓨팅, 로깅, Artifact Registry, Cloud Build)를 사용 설정합니다.
- Docker 이미지를 빌드하고 푸시합니다 (증명된 TLS 미들웨어로 vLLM 래핑).
- 필요한 권한이 있는 서비스 계정을 프로비저닝합니다.
- 컨피덴셜 VM (H100 GPU 및 TDX가 사용 설정된 A3 인스턴스)을 만듭니다.
- 네트워킹 및 부하 분산 (패스 스루 네트워크 부하 분산기)을 구성합니다.
- 출력 (이미지 해시 및 부하 분산기 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 중에 발생하는 작업은 다음과 같습니다.
- TCP/TLS: 표준 연결이 설정됩니다.
- 핸드셰이크 가로채기: SDK가 본문을 전송하기 전에 일시중지됩니다.
- AttestConnection RPC: SDK가 nonce를 서버로 전송합니다.
- 따옴표 생성: 서버가 TEE 하드웨어 따옴표를 요청합니다.
- 유효성 검사: SDK가 따옴표 서명 및 정책을 확인합니다.
- 바인딩: SDK가 채널의 '내보낸 키 지정 자료'가 따옴표에 바인딩된 세션과 일치하는지 확인합니다.
- 데이터 전송: 모든 검사를 통과하는 경우에만 본문이 전송됩니다.
8. 문제 해결
- 증명 실패: 정책의 image_hash가 컨테이너와 일치하는지 확인합니다.
- 연결 거부됨: 서버에 연결할 수 있고 포트 8000이 열려 있는지 확인합니다.
- 시간 초과: TEE 따옴표 생성에 시간이 걸릴 수 있습니다. 시간 제한이 충분한지 확인합니다.
9. 축하합니다
프롬프트 암호화 SDK Codelab을 완료했습니다. 클라이언트와 TEE 기반 추론 서버 간에 암호화로 검증되고 암호화된 채널을 설정하는 방법을 알아보았습니다.
다음 단계
- 고급 AttestationPolicy 구성을 살펴봅니다.
- SDK를 기존 프로덕션 애플리케이션과 통합합니다.
- Confidential Space 및 TEE 하드웨어 모델에 대해 자세히 알아봅니다.