엔터프라이즈 생성형 AI를 위한 보안 구성: Private Service Connect와 VPC Service Controls을 사용하여 Gemini API 비공개 접근 구성하기
DaeHan Wee
Customer Engineer, Network Specialist
Jaebyung Yoon
Customer Engineer, Security Specialist
Google Cloud의 완전 관리형 AI 플랫폼인 Vertex AI는 개발자가 Gemini와 같은 최신 파운데이션 모델을 활용하여 엔터프라이즈급 생성형 AI 애플리케이션을 구축할 수 있도록 지원합니다. 기업들은 Vertex AI Model Garden에서 제공하는 다양한 모델을 자사의 데이터로 안전하게 미세 조정(fine-tuning)하고, 이를 애플리케이션에 통합하여 새로운 가치를 창출하고 있습니다.
Google Cloud Vertex AI서비스는 온프레미스 또는 멀티 클라우드 환경에서 Vertex AI 리소스에 안전하게 액세스하게 도움을 주는 네트워킹 옵션을 제공합니다. Private Service Connect(PSC)와 VPC Service Controls(VPC-SC)를 활용한 강력한 보안 구성을 제공합니다. PSC를 사용하면 고객의 VPC 네트워크와 Vertex AI 서비스 간에 전용 비공개 연결을 설정할 수 있어, 퍼블릭 IP를 사용하지 않아도 엔터프라이즈 내부 리소스나 온프레미스 환경에서 안전하게 API에 접근할 수 있습니다. 아울러 VPC-SC는 퍼블릭 엔드포인트로 접근하는 시도나 비인가 접근을 맥락(Context)기반으로 통제할 수 있습니다.
이 블로그에서는 PSC 기반의 VPC 엔드포인트를 통해 Gemini를 비롯한 Vertex AI API에 대한 비공개 액세스 경로를 확보하고, VPC-SC를 통해 공개 액세스를 원천 차단하여 생성형 AI 애플리케이션을 위한 안전한 심층 방어(Defense-in-Depth) 아키텍처를 구축하는 방법을 설명합니다.


워크플로 예시
제안하는 보안 아키텍처의 데이터 흐름은 다음과 같습니다.
-
요청 수신: Cloud Run에서 실행 중인 애플리케이션 서비스가 사용자로부터 프롬프트 요청을 수신합니다. 이때 Cloud Run 서비스가 PSC 엔드포인트나 VPC 내 자원으로 비공개 통신을 하게 하기 위해서는 Direct VPC egress나 Serverless VPC connection같은 Cloud Run 비공개 구성이 필요합니다.
-
컨텍스트 보강: 애플리케이션은 Cloud SQL과 같은 내부 데이터베이스를 호출하여 프롬프트에 필요한 기업 데이터(예: 제품 정보, 고객 이력)를 보강합니다.
-
비공개 API 호출: 보강된 데이터를 포함하여 Vertex AI API를 호출합니다. 이때 API 요청은 퍼블릭 인터넷이 아닌, VPC 내에 구성된 PSC 엔드포인트로 라우팅됩니다.
-
안전한 처리: PSC 엔드포인트는 이 요청을 Google 내부 네트워크를 통해 Vertex AI 서비스로 안전하게 전달하며, 처리된 결과 역시 동일한 비공개 경로를 통해 반환됩니다.
-
보안 경계 적용: VPC-SC는 서비스 주변에 논리적인 보안 경계(Perimeter)를 형성합니다. 이를 통해 승인되지 않은 외부 네트워크나 프로젝트에서 시도하는 Vertex AI API 호출을 차단하여 데이터 유출을 방지합니다.
-
하이브리드 연결: Cloud Interconnect 또는 Cloud VPN으로 연결된 온프레미스 네트워크에서도 VPC 내의 PSC 엔드포인트를 경유하여 Vertex AI API에 안전하게 접근할 수 있습니다.
Google API용 Private Service Connect (PSC) 솔루션 개요 및 구성
Gemini 모델을 활용한 애플리케이션을 개발할 때, 개발자는 데이터 트래픽이 퍼블릭 인터넷을 경유하는 것을 원치 않을 수 있습니다. Google API용 Private Service Connect는 이러한 요구를 충족시키는 핵심 네트워킹 기능입니다.
PSC를 사용하면 VPC 내부에 비공개 IP를 가진 전역 엔드포인트를 생성하여 Google API에 비공개로 액세스할 수 있습니다. 이는 클라우드 내부의 리소스뿐만 아니라, VPN이나 Interconnect로 연결된 하이브리드 환경의 온프레미스 애플리케이션에서도 퍼블릭 인터넷을 거치지 않고 Google API를 호출할 수 있게 해 줍니다.
대부분의 Google API는 기본적으로 <API NAME>.googleapis.com 도메인을 사용합니다. PSC를 구성하면 <API>-<PSC-ENDPOINT-NAME>.p.googleapis.com 형태의 새로운 도메인을 사용할 수 있게 되며, DNS 설정을 통해 특정 PSC 엔드포인트를 경유하도록 트래픽을 제어할 수 있습니다. 일반적인 엔터프라이즈 보안 패턴은 PSC를 통한 비공개 경로는 허용하되, VPC-SC를 통해 퍼블릭 엔드포인트 접근은 차단하는 것입니다. Gemini API 역시 Vertex AI 제품군의 일부로, Google API용 PSC를 통해 비공개 액세스가 지원됩니다.
PSC 엔드포인트 구성 단계
Google API용 PSC 엔드포인트를 생성하기 위해서는 먼저 예약된 내부 IP 주소가 필요합니다.
1. PSC 전용 전역 IP 주소 예약
Google API용 PSC 엔드포인트는 리전 VPC 서브넷에 없는 전역 IP 주소에서 생성됩니다. 전역 IP 주소는 PRIVATE_SERVICE_CONNECT 목적으로 특별히 예약되어야 합니다.


2. PSC 엔드포인트 연결
예약한 IP 주소를 사용하여 Google API 번들로 트래픽을 전달하는 규칙을 생성합니다. 번들 유형은 all-apis와 vpc-sc 두가지가 있습니다. all-apis를 선택하게 되면 PSC에서 지원되는 모든 Google API에 대한 액세스 권한을 부여합니다. vpc-sc옵션을 선택한 경우 VPC-SC를 지원하는 Google API로 액세스를 한정하여, VPC-SC를 지원하지 않는 API에 대해서 PSC를 통한 접근은 차단되게 합니다.


* 위 명령어 중 PROJECT_ID, REGION은 작업하는 환경에 맞게 고쳐 설정합니다.
3. (선택 사항) 온프레미스 광고를 위한 Cloud Router 설정
온프레미스 환경에서 이 PSC 엔드포인트 IP(예시 상 192.168.100.1)로 접근해야 한다면, Cloud Router를 통해 해당 IP 대역을 온프레미스 네트워크에서 접근할 수 있도록 BGP 광고(Advertise)해야 합니다.


* 위 명령어 중 CLOUDROUTER_NAME이나 PROJECT_ID, REGION은 작업하는 환경에 맞게 고쳐 설정합니다.
4. DNS 설정
Google API 도메인(*.googleapis.com)에 대한 DNS 쿼리가 앞서 생성한 PSC 엔드포인트의 비공개 IP(위 예시에서는 PSC의 IP주소 - 192.168.100.1)로 해석되도록 Cloud DNS에 비공개 영역(Private Zone)을 설정해야 합니다. 온프레미스나 타 클라우드 DNS구성의 경우, Cloud DNS에서 DNS forwarding Zone을 구성하거나, 직접 해당 PSC 엔드포인트의 비공개 IP에 대한 레코드를 구성하여 Gemini API 접근 시 공개 엔드포인트가 아닌 비공개 엔드포인트로 접근하게 해야 합니다.
엔드포인트 DNS 구성과 관련된 좀더 자세한 내용은 다음 공식 문서를 참고하여 주세요.
https://docs.cloud.google.com/vpc/docs/configure-private-service-connect-apis#using-endpoints


VPC Service Controls(VPC-SC)를 통한 심층방어(Defense-in-Depth) 완성
그럼 이제 퍼블릭 인터넷 경로를 거치지 않고도 생성형 AI를 사용할 수 있는 환경은 만들어졌습니다. 그러나 아직까지는 Google Cloud의 Resource 사이에 내부망 통신을 하도록 별도의 경로를 만든 것일 뿐이지, 퍼블릭 인터넷에서 들어오는 요청을 차단하는 환경을 만든 것은 아닙니다.
따라서 퍼블릭 인터넷에서 인입되는 요청을 차단하기위해 VPC-SC를 활용해야 합니다. VPC-SC는 가상의 경계(perimeter)를 만들고, 이 경계를 넘나드는 모든 Google API호출은 차단하는 서비스입니다. 따라서 VPC-SC를 사용하면 퍼블릭 인터넷 뿐만 아니라 경계 밖에서 안으로 들어가거나, 경계 안에서 밖으로 나가는 API 호출은 차단됩니다. 예를 들면 내부의 승인된 사용자가 모델 학습데이터를 통제되지 않는 Cloud Storage 버킷으로 복사하는 경우와 같은 데이터 무단 반출을 차단하기 위해서 VPC-SC가 활용될 수 있습니다. 즉 VPC-SC는 앞서 설명드린 PSC가 제공하는 '비공개 연결 경로'를 '보안 경계'로 감싸는 심층방어 (Defense-in-Depth)의 핵심 요소입니다.
VPC-SC는 어디서(Where), 어떻게(How) 데이터에 접근할 수 있는지를 제어하는 추가적인 방어 계층 역할을 합니다. 누가(Who) 데이터에 접근할 수 있는지를 제어하는 IAM(Identity and Access Management)에 대한 보완책으로도 볼수 있습니다. 따라서 VPC-SC의 세분화된 통제를 통해 각 기업의 환경에 따른 맞춤형 접근통제를 구현할 수 있습니다.
이러한 강력한 통제력으로 인해 설정에 주의가 필요하여 VPC-SC 적용에 대한 연습실행(Dry-run) 모드를 제공하고 있습니다. 연습실행 모드에서는 VPC-SC 정책이 위반되는 경우에도 차단은 하지 않고 에러만을 남겨서 경계를 적용하기 전에 정책이 운영상황에 미칠 영향을 미리 판단해 볼수 있습니다.
Dry-run 모드와 관련된 좀더 자세한 내용은 다음 공식 문서를 참고하여 주세요.
https://docs.cloud.google.com/vpc-service-controls/docs/dry-run-mode


그럼 AI서비스를 안전하게 운영하기 위한 VPC-SC 구성은 어떻게 할까요? 먼저 Vertex AI 등 보호할 리소스를 포함하고 있는 프로젝트를 선택해야 합니다. 서비스 경계 설정에 대한 자세한 사항은 다음 공식 문서를 참고해 주세요.
https://docs.cloud.google.com/vpc-service-controls/docs/create-service-perimeters#create-perimeter


선별적으로 보호할 서비스를 선택하거나 전체 서비스를 보호대상에 포함할 수도 있습니다. AI 서비스를 Vertex AI를 통해 구현한 상황이라면 일단 먼저 Vertex AI를 VPC-SC 경계 내에 포함해야합니다. 이를 통해 학습데이터 및 모델 아티팩트 저장 뿐만아니라 온라인/배치 추론 결과를 경계 내에서만 이루어지게 할수 있습니다. 학습 데이터를 Cloud Storage에 저장하여 사용한다면, Cloud Storage도 제한된 서비스에 추가해야 합니다.


위와 같이 VPC-SC 를 이용하여 특정 API 서비스만을 보호할 수도 있으나, 해당 프로젝트의 모든 API 서비스를 보호대상으로 추가하는 것을 권장합니다.


이제 PSC 엔드포인트를 VPN을 통해 호출해보겠습니다. 아래 데모화면에서는 PSC 엔드포인트(asia-northeast3-aiplatform.googleapis.com)의 IP 주소가 192.168.100.1 인 것을 확인할 수 있습니다. 이 상황에서 해당 리전(asia-northeast3)의 유효한 설정정보를 PSC 엔드포인트를 통해 호출해보겠습니다. 에러가 발생하지 않고 정상적으로 정보를 제공받은 것을 알수 있습니다. 이를 통해 VPN 경로를 통해 On-prem에 있는 VM에서 GCP 환경의 AI 관련 서비스를 호출할 수 있는 경로가 성공적으로 생성한 것을 알수 있습니다.


그럼 위에서 테스트한 내용을 퍼블릭 인터넷이 접속 가능한 VM에서 실행해보도록 하겠습니다. 이미 설정한 VPC-SC 서비스 경계로 인하여 호출이 차단 될 텐데 어떻게 에러가 발생하는지 아래 데모화면에서 같이 확인해 보겠습니다. 이번에는 asia-northeast3-aiplatform.googleapis.com의 IP주소를 살펴보면 우리가 이미 설정한 PSC 엔드포인트의 IP주소가 아닌 퍼블릭 IP주소가 반환되는 환경임을 알수 있습니다. 이 환경에서 동일한 호출하면 VPC_SERVICE_CONTROLS 정책 위반 에러가 나오는 것을 확인할 수 있습니다. 즉 인터넷 환경에서의 호출은 모두 차단된 상태입니다.


여기서 VPC-SC의 에러가 어떤 것인지 좀더 확인해보겠습니다. VPC-SC에서 발생하는 보안정책 위반 에러를 손쉽게 확인하고 조치하기 위해 VPC-SC 위반분석도구가 마련되어 있습니다. 로그 탐색기에서 에러에 대한 내용을 확인할 수도 있지만, 위반분석 도구를 사용하면 빠르고 명확하게 정책위반 원인을 파악하고 해결할 수 있습니다. 위 에러화면에서 uid항목을 복사하여 도구에 입력하면 아래와 같이 바로 분석 화면이 제공됩니다.
위반 분석 도구에 대한 자세한 사항은 다음 공식 문서를 참고해 주세요.
https://docs.cloud.google.com/vpc-service-controls/docs/troubleshooter


여기에서는 원본로그와 함께 어떤 리소스를 누가, 어떤 이유에서 보안정책을 위반하였는지 상세하게 알수 있으며, 해당 정책에 따른 위반사항에 대한 교정방법도 한 화면에서 바로 확인 할수 있습니다.


긴 여정을 정리하면 PSC와 VPC-SC가 서로 다른 역할을 수행하면서 안전한 비공개 구성을 구현하였습니다. PSC는 '통신 경로'를 공개 인터넷에서 비공개로 전환하여 공개 인터넷에 노출되지 않는 통신 경로를 구현하였고, VPC-SC를 통해 데이터 보안 경계를 설정하여 공개 인터넷으로 부터 접근을 차단하고, 경계 내외부 사이에 무단 데이터 반출을 원천 차단할 수 있게 되었습니다.
마지막으로 VPC-SC를 비롯한 여러 Security 서비스를 활용하여 Google Cloud에서 엔터프라이즈 AI 서비스를 안전하게 구성하는 참조 아키텍처를 소개하면서 이번 블로그를 마무리 하겠습니다. 아래 다이어그램을 보시면 VPC-SC 서비스 경계 안에 Vertex AI와 App Hosting, Cloud Storage 등의 리소스가 포함된 것을 보실수 있습니다. 이렇게 경계를 구성하면 별도 지정된 Ingress/Egress rule이 없으면 데이터가 경계를 넘어갈 수 없게됩니다. 그외 KMS를 통한 암호키 통제, Model Armor를 활용한 런타임 AI서비스 보호, Cloud Armor를 활용한 네트워크 위협통제 등을 통해 엔터프라이즈 환경에서 안전하게 AI를 사용할 수 있습니다.


참조 아키텍처에 대한 좀더 자세한 사항은 다음 블로그를 참고해 주세요.
https://cloud.google.com/blog/ko/products/identity-security/google-cloud-ai
<참고 자료>
-
Codelabs: 하이브리드 연결을 통해 Gemini에 액세스하기 위해 Google API용 Private Service Connect 사용
-
Codelabs: Private Service Connect 엔드포인트가 있는 GCE의 Gemini CLI
-
Codelabs: Private Service Connect 엔드포인트를 통해 Python SDK로 Vertex AI에서 Anthropic Claude에 액세스
-
공식 문서: VPC-SC, Google API 및 서비스로 비공개 연결 설정



