Private Service Connect를 사용하여 온프레미스에서 Vertex AI 기반 생성형 AI에 액세스


온프레미스 호스트는 공개 인터넷을 통해 또는 Cloud VPN이나 Cloud Interconnect를 통해 Private Service Connect(PSC)를 사용하는 하이브리드 네트워킹 아키텍처를 통해 비공개로 Vertex AI의 생성형 AI에 연결될 수 있습니다. 두 옵션 모두 SSL/TLS 암호화를 제공합니다. 그러나 비공개 옵션이 훨씬 더 우수한 성능을 제공하므로 중요한 애플리케이션에는 비공개 옵션이 권장됩니다.

이 튜토리얼에서는 고가용성 VPN(HA VPN)을 사용하여 Cloud NAT를 통해 공개적으로 그리고 멀티 클라우드 및 온프레미스 비공개 연결의 기반이 되는 두 Virtual Private Cloud(VPC) 네트워크 사이에서 비공개로 Vertex AI 기반 생성형 AI에 액세스할 수 있습니다.

이 튜토리얼은 Vertex AI, VPC, Google Cloud 콘솔, Cloud Shell에 익숙한 엔터프라이즈 네트워크 관리자, 데이터 과학자, 연구원을 대상으로 합니다. Vertex AI 기반 생성형 AI에 익숙하면 도움이 되지만 반드시 그런 것은 아닙니다.

Vertex AI 기반 생성형 AI에 액세스하는 데 Private Service Connect를 사용하는 아키텍처 다이어그램

목표

  • 앞선 다이어그램과 같이 VPC 네트워크 2개를 만듭니다.
    • 하나(onprem-vpc)는 온프레미스 네트워크를 나타냅니다.
    • 다른 하나(vertex-networking-vpc)는 Vertex AI 기반 생성형 AI를 위한 REST API에 액세스하기 위한 것입니다.
  • vertex-networking-vpconprem-vpc를 연결하기 위해 HA VPN 게이트웨이, Cloud VPN 터널, Cloud Router를 배포합니다.
  • Private Service Connect(PSC) 엔드포인트를 만들어 요청을 GenAI REST API로 전달합니다.
  • Private Service Connect 엔드포인트의 경로를 onprem-vpc에 공지하도록 vertex-networking-vpc에서 Cloud Router 커스텀 경로 공지를 구성합니다.
  • HA VPN을 통해 요청을 GenAI REST API로 보내는 클라이언트 애플리케이션을 나타내도록 onprem-vpc에서 Compute Engine VM 인스턴스를 만듭니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Google Cloud Console에서 프로젝트 선택기 페이지로 이동합니다.

    프로젝트 선택기로 이동

  2. Google Cloud 프로젝트를 선택하거나 만듭니다.

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. 프로젝트 소유자가 아닌 경우 프로젝트 소유자가 roles/resourcemanager.projectIamAdmin IAM 역할을 부여해야 합니다. IAM 역할 및 권한을 자신과 서비스 계정에 부여하려면 이 역할이 있어야 합니다.
  5. Cloud Shell을 열고 이 튜토리얼에 나열된 명령어를 실행합니다. Cloud Shell은 웹브라우저에서 프로젝트와 리소스를 관리할 수 있는 Google Cloud의 대화형 셸 환경입니다.
  6. Cloud Shell에서 현재 프로젝트를 Google Cloud 프로젝트 ID로 설정한 후 동일한 프로젝트 ID를 projectid 셸 변수에 저장합니다.
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    PROJECT_ID를 프로젝트 ID로 바꿉니다. 필요한 경우 Google Cloud 콘솔에서 프로젝트 ID를 찾을 수 있습니다. 자세한 내용은 프로젝트 ID 찾기를 참조하세요.
  7. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iap.tunnelResourceAccessor, roles/iam.serviceAccountCreator, roles/iam.serviceAccountUser, roles/iam.serviceAccountDeleter, roles/resourcemanager.projectIamAdmin, roles/servicedirectory.editor, roles/servicemanagement.quotaAdmin, roles/aiplatform.user

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID를 프로젝트 ID로 바꿉니다.
    • EMAIL_ADDRESS를 이메일 주소로 바꿉니다.
    • ROLE을 각 개별 역할로 바꿉니다.
  8. DNS, IAM, Compute Engine, 서비스 사용량, Vertex AI API를 사용 설정합니다.

    gcloud services enable dns.googleapis.com iam.googleapis.com compute.googleapis.com serviceusage.googleapis.com aiplatform.googleapis.com

VPC 네트워크 2개(vertex-networking-vpconprem-vpc)를 만듭니다.

이 섹션에서는 VPC 네트워크 2개를 만듭니다. 하나는 Vertex AI 생성형 AI(GenAI라고도 함) API에 액세스할 기본 네트워크가 되고 다른 하나는 온프레미스 네트워크를 시뮬레이션합니다.

VPC 네트워크 만들기

  1. GenAI API(vertex-networking-vpc)에 액세스할 VPC 네트워크를 만듭니다.

    gcloud compute networks create vertex-networking-vpc --subnet-mode custom
    
  2. 온프레미스 네트워크(onprem-vpc)를 시뮬레이션하도록 VPC 네트워크를 만듭니다.

    gcloud compute networks create onprem-vpc --subnet-mode custom
    
  3. onprem-vpc 네트워크에서 기본 IPv4 범위가 172.16.10.0/24onprem-vpc-subnet1이라는 서브넷을 만듭니다.

    gcloud compute networks subnets create onprem-vpc-subnet1 \
       --range 172.16.10.0/24 \
       --network onprem-vpc \
       --region us-central1
    
  4. Google Cloud 콘솔에서 VPC 네트워크 페이지의 현재 프로젝트에 있는 네트워크 탭으로 이동합니다.

    VPC 네트워크로 이동

  5. VPC 네트워크 목록에서 네트워크 2개(vertex-networking-vpconprem-vpc)가 생성되었는지 확인합니다.

  6. VPC 네트워크 페이지에서 현재 프로젝트의 서브넷 탭을 클릭합니다.

  7. VPC 서브넷 목록에서 onprem-vpc 네트워크에 onprem-vpc-subnet1 서브넷이 생성되었는지 확인합니다.

하이브리드 연결 구성

이 섹션에서는 서로 연결된 HA VPN 게이트웨이 2개를 만듭니다. 하나는 vertex-networking-vpc VPC 네트워크에 있습니다. 다른 하나는 onprem-vpc VPC 네트워크에 있습니다. 각 게이트웨이에는 Cloud Router와 VPN 터널 쌍이 포함됩니다.

HA VPN 게이트웨이 만들기

  1. Cloud Shell에서 vertex-networking-vpc VPC 네트워크의 HA VPN 게이트웨이를 만듭니다.

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. onprem-vpc VPC 네트워크의 HA VPN 게이트웨이를 만듭니다.

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. Google Cloud 콘솔에서 VPN 페이지의 Cloud VPN 게이트웨이 탭으로 이동합니다.

    VPN으로 이동

  4. VPN 게이트웨이 목록에서 게이트웨이 2개(vertex-networking-vpn-gw1onprem-vpn-gw1)가 생성되었고 게이트웨이마다 IP 주소 2개가 있는지 확인합니다.

Cloud Router 만들기

  1. Cloud Shell에서 vertex-networking-vpc VPC 네트워크의 Cloud Router를 만듭니다.

    gcloud compute routers create vertex-networking-vpc-router1 \
       --region us-central1\
       --network vertex-networking-vpc \
       --asn 65001
    
  2. onprem-vpc VPC 네트워크의 Cloud Router를 만듭니다.

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    

onprem-vpc VPC 네트워크에 Cloud NAT 게이트웨이 추가

이 단계에서는 Cloud NAT 게이트웨이를 onprem-vpc VPC 네트워크의 Cloud Router에 추가합니다. Cloud NAT 게이트웨이는 외부 IP 주소가 없는 Compute Engine 가상 머신(VM) 인스턴스에 대한 발신 연결을 제공합니다.

  1. Cloud Shell에서 Cloud NAT 게이트웨이를 onprem-vpc-router1 Cloud Router에 추가합니다.

    gcloud compute routers nats create us-central-cloudnat-onprem \
       --router=onprem-vpc-router1 \
       --auto-allocate-nat-external-ips \
       --nat-all-subnet-ip-ranges \
       --region us-central1
    
  2. Google Cloud 콘솔에서 Cloud Router 페이지로 이동합니다.

    Cloud Router로 이동

  3. Cloud Router 목록에서 vertex-networking-vpc-router1onprem-vpc-router1이 생성되었는지 확인합니다. 새 값을 보려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.

  4. Cloud Router 목록에서 onprem-vpc-router1을 클릭합니다.

  5. 라우터 세부정보 페이지에서 us-central-cloudnat-onprem Cloud NAT 게이트웨이가 생성되었는지 확인합니다.

VPN 터널 만들기

  1. vertex-networking-vpc 네트워크에서 vertex-networking-vpc-tunnel0이라는 VPN 터널을 만듭니다.

    gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel0 \
       --peer-gcp-gateway onprem-vpn-gw1 \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router vertex-networking-vpc-router1 \
       --vpn-gateway vertex-networking-vpn-gw1 \
       --interface 0
    
  2. vertex-networking-vpc 네트워크에서 vertex-networking-vpc-tunnel1이라는 VPN 터널을 만듭니다.

    gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel1 \
       --peer-gcp-gateway onprem-vpn-gw1 \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router vertex-networking-vpc-router1 \
       --vpn-gateway vertex-networking-vpn-gw1 \
       --interface 1
    
  3. onprem-vpc 네트워크에서 onprem-vpc-tunnel0이라는 VPN 터널을 만듭니다.

    gcloud compute vpn-tunnels create onprem-vpc-tunnel0 \
       --peer-gcp-gateway vertex-networking-vpn-gw1 \
       --region us-central1\
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router onprem-vpc-router1 \
       --vpn-gateway onprem-vpn-gw1 \
       --interface 0
    
  4. onprem-vpc 네트워크에서 onprem-vpc-tunnel1이라는 VPN 터널을 만듭니다.

    gcloud compute vpn-tunnels create onprem-vpc-tunnel1 \
       --peer-gcp-gateway vertex-networking-vpn-gw1 \
       --region us-central1\
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router onprem-vpc-router1 \
       --vpn-gateway onprem-vpn-gw1 \
       --interface 1
    
  5. Google Cloud 콘솔에서 VPN 페이지로 이동합니다.

    VPN으로 이동

  6. VPN 터널 목록에서 VPN 터널 4개가 생성되었는지 확인합니다.

BGP 세션 설정

Cloud Router는 경계 경로 프로토콜(BGP)을 사용하여 VPC 네트워크(이 경우 vertex-networking-vpc)와 온프레미스 네트워크(onprem-vpc로 표시) 간에 경로를 교환합니다. Cloud Router에서 온프레미스 라우터의 인터페이스와 BGP 피어를 구성합니다. 인터페이스와 BGP 피어 구성은 함께 BGP 세션을 구성합니다. 이 섹션에서는 vertex-networking-vpc에 대한 2개의 BGP 세션과 onprem-vpc에 대한 2개의 BGP 세션을 만듭니다.

라우터 사이에 인터페이스와 BGP 피어를 구성하면 경로 교환이 자동으로 시작됩니다.

vertex-networking-vpc용 BGP 세션 설정

  1. Cloud Shell의 vertex-networking-vpc 네트워크에서 vertex-networking-vpc-tunnel0에 대한 BGP 인터페이스를 만듭니다.

    gcloud compute routers add-interface vertex-networking-vpc-router1 \
       --interface-name if-tunnel0-to-onprem \
       --ip-address 169.254.0.1 \
       --mask-length 30 \
       --vpn-tunnel vertex-networking-vpc-tunnel0 \
       --region us-central1
    
  2. vertex-networking-vpc 네트워크에서 bgp-onprem-tunnel0에 대한 BGP 피어를 만듭니다.

    gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \
       --peer-name bgp-onprem-tunnel0 \
       --interface if-tunnel0-to-onprem \
       --peer-ip-address 169.254.0.2 \
       --peer-asn 65002 \
       --region us-central1
    
  3. vertex-networking-vpc 네트워크에서 vertex-networking-vpc-tunnel1에 대한 BGP 인터페이스를 만듭니다.

    gcloud compute routers add-interface vertex-networking-vpc-router1 \
       --interface-name if-tunnel1-to-onprem \
       --ip-address 169.254.1.1 \
       --mask-length 30 \
       --vpn-tunnel vertex-networking-vpc-tunnel1 \
       --region us-central1
    
  4. vertex-networking-vpc 네트워크에서 bgp-onprem-tunnel1에 대한 BGP 피어를 만듭니다.

    gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \
       --peer-name bgp-onprem-tunnel1 \
       --interface if-tunnel1-to-onprem \
       --peer-ip-address 169.254.1.2 \
       --peer-asn 65002 \
       --region us-central1
    

onprem-vpc용 BGP 세션 설정

  1. onprem-vpc 네트워크에서 onprem-vpc-tunnel0에 대한 BGP 인터페이스를 만듭니다.

    gcloud compute routers add-interface onprem-vpc-router1 \
       --interface-name if-tunnel0-to-vertex-networking-vpc \
       --ip-address 169.254.0.2 \
       --mask-length 30 \
       --vpn-tunnel onprem-vpc-tunnel0 \
       --region us-central1
    
  2. onprem-vpc 네트워크에서 bgp-vertex-networking-vpc-tunnel0에 대한 BGP 피어를 만듭니다.

    gcloud compute routers add-bgp-peer onprem-vpc-router1 \
       --peer-name bgp-vertex-networking-vpc-tunnel0 \
       --interface if-tunnel0-to-vertex-networking-vpc \
       --peer-ip-address 169.254.0.1 \
       --peer-asn 65001 \
       --region us-central1
    
  3. onprem-vpc 네트워크에서 onprem-vpc-tunnel1에 대한 BGP 인터페이스를 만듭니다.

    gcloud compute routers add-interface onprem-vpc-router1  \
       --interface-name if-tunnel1-to-vertex-networking-vpc \
       --ip-address 169.254.1.2 \
       --mask-length 30 \
       --vpn-tunnel onprem-vpc-tunnel1 \
       --region us-central1
    
  4. onprem-vpc 네트워크에서 bgp-vertex-networking-vpc-tunnel1에 대한 BGP 피어를 만듭니다.

    gcloud compute routers add-bgp-peer onprem-vpc-router1 \
       --peer-name bgp-vertex-networking-vpc-tunnel1 \
       --interface if-tunnel1-to-vertex-networking-vpc \
       --peer-ip-address 169.254.1.1 \
       --peer-asn 65001 \
       --region us-central1
    

BGP 세션 생성 검증

  1. Google Cloud 콘솔에서 VPN 페이지로 이동합니다.

    VPN으로 이동

  2. VPN 터널 목록에서 각 터널의 BGP 세션 상태 열 값이 BGP 세션 구성에서 BGP 설정됨으로 변경되었는지 확인합니다. 새 값을 보려면 Google Cloud 콘솔 브라우저 탭을 새로고침해야 할 수 있습니다.

Private Service Connect(PSC) 엔드포인트 만들기

이 섹션에서는 onprem-vpc 네트워크의 VM 인스턴스가 onprem-vpc 네트워크에서 GenAI API에 액세스하는 데 사용할 Google API의 Private Service Connect(PSC) 엔드포인트를 만듭니다.

Private Service Connect(PSC) 엔드포인트는 해당 네트워크의 클라이언트에서 직접 액세스할 수 있는 onprem-vpc 네트워크의 내부 IP 주소입니다. 이 엔드포인트는 PSC 엔드포인트의 IP 주소와 일치하는 네트워크 트래픽을 Google API 번들, 특히 all-apis번들로 전달하는 전달 규칙을 배포함으로써 생성됩니다.

이후 단계에서 PSC 엔드포인트의 IP 주소(192.168.0.1)는 vertex-networking-vpc-router Cloud Router에서 커스텀 경로 공지로 onprem-vpc 네트워크에 공지됩니다.

  1. 엔드포인트에 할당할 전역 내부 IP 주소를 예약합니다.

    gcloud compute addresses create psc-googleapi-ip \
       --global \
       --purpose=PRIVATE_SERVICE_CONNECT \
       --addresses=192.168.0.1 \
       --network=vertex-networking-vpc
    
  2. 엔드포인트를 Google API 및 서비스에 연결하는 전달 규칙과 함께 엔드포인트를 만듭니다.

    gcloud compute forwarding-rules create pscvertex \
       --global \
       --network=vertex-networking-vpc\
       --address=psc-googleapi-ip \
       --target-google-apis-bundle=all-apis
    
  3. 구성된 PSC 엔드포인트를 나열하고 pscvertex 엔드포인트가 생성되었는지 확인합니다.

    gcloud compute forwarding-rules list  \
       --filter target="(all-apis OR vpc-sc)" --global
    
  4. 구성된 PSC 엔드포인트의 세부정보를 가져오고 IP 주소가 192.168.0.1인지 확인합니다.

    gcloud compute forwarding-rules describe \
       pscvertex --global
    

vertex-networking-vpc용 커스텀 경로 공지 만들기

이 섹션에서는 PSC 엔드포인트의 IP 주소를 onprem-vpc 네트워크에 공지하도록 vertex-networking-vpc-router1(vertex-networking-vpc용 Cloud Router)에 대한 커스텀 경로 공지를 만듭니다.

  1. Google Cloud 콘솔에서 Cloud Router 페이지로 이동합니다.

    Cloud Router로 이동

  2. Cloud Router 목록에서 vertex-networking-vpc-router1을 클릭합니다.

  3. 라우터 세부정보 페이지에서 수정을 클릭합니다.

  4. 공지된 경로 섹션에서 경로에 대해 커스텀 경로 만들기를 선택합니다.

  5. Cloud Router에서 사용할 수 있는 서브넷을 계속 공지하려면 Cloud Router에 표시되는 모든 서브넷 공지 체크박스를 선택합니다. 이 옵션을 사용 설정하면 기본 공지 모드에서 Cloud Router 동작을 모방합니다.

  6. 커스텀 경로 추가를 클릭합니다.

  7. 소스커스텀 IP 범위를 선택합니다.

  8. IP 주소 범위에 다음 IP 주소를 입력합니다.

    192.168.0.1
    
  9. 설명에 다음 텍스트를 입력합니다.

    Custom route to advertise Private Service Connect endpoint IP address
    
  10. 완료를 클릭한 다음 저장을 클릭합니다.

onprem-vpc에서 공지된 경로를 학습했는지 검증

  1. Google Cloud 콘솔에서 경로 페이지로 이동합니다.

    경로로 이동

  2. 유효한 경로 탭에서 다음을 수행합니다.

    1. 네트워크onprem-vpc를 선택합니다.
    2. 리전us-central1 (Iowa)을 선택합니다.
    3. 보기를 클릭합니다.
    4. 경로 목록에서 이름이 .onprem-vpc-router1-bgp-vertex-networking-vpc-tunnel0onprem-vpc-router1-bgp-vfertex-networking-vpc-tunnel1로 시작하고 둘 다 대상 IP 범위 192.168.0.1/32가 있는 항목이 있는지 확인합니다. 192.168.0.1은 PSC 엔드포인트의 IP 주소입니다.

      이러한 항목이 바로 표시되지 않으면 몇 분 정도 기다린 후 Google Cloud 콘솔 브라우저 탭을 새로고침합니다.

온프레미스 네트워크에서 VM 인스턴스 구성

이 섹션에서는 onprem-vpc VPC 네트워크에 Compute Engine VM 인스턴스를 만듭니다. 이 VM 인스턴스는 PSC 엔드포인트에 연결되고 GenAI API에 액세스하는 온프레미스 클라이언트를 시뮬레이션합니다.

사용자 관리형 서비스 계정 만들기

이 튜토리얼에서는 Compute Engine 및 IAM 권장사항에 따라 사용자 관리 서비스 계정을 만듭니다.

  1. Cloud Shell에서 다음 명령어를 실행하고 PROJECT_ID를 프로젝트 ID로 바꿉니다.

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. 서비스 계정을 만듭니다.

    gcloud iam service-accounts create user-managed-sa
    
  3. 서비스 계정에 Vertex AI 사용자(roles/aiplatform.user) IAM 역할을 할당합니다.

    gcloud projects add-iam-policy-binding $projectid \
       --member="serviceAccount:user-managed-sa@$projectid.iam.gserviceaccount.com" \
       --role="roles/aiplatform.user"
    

on-prem-client VM 인스턴스 만들기

이 단계에서는 Private Service Connect IP 주소(192.168.0.1)를 사용하여 HA VPN을 통해 Google API에 액세스하는 VM 인스턴스를 만듭니다.

IAP(Identity-Aware Proxy)가 VM 인스턴스에 연결할 수 있도록 다음과 같은 방화벽 규칙을 만듭니다.

  • IAP를 통해 액세스할 수 있게 만들려는 모든 VM 인스턴스에 적용됩니다. 이 경우에는 on-prem-client만 있습니다.
  • IP 범위 35.235.240.0/20에서 포트 22를 통한 TCP 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달을 위해 사용하는 모든 IP 주소가 포함됩니다.
  1. on-prem-client VM 인스턴스를 만듭니다. 다음 명령어는 나중에 API 요청을 검증하는 데 사용할 tcpdumpdig 유틸리티가 포함된 tcpdumpdnsutils 패키지도 설치합니다.

    gcloud compute instances create on-prem-client \
       --zone=us-central1-a \
       --image-family=debian-11 \
       --image-project=debian-cloud \
       --subnet=onprem-vpc-subnet1 \
       --scopes=https://www.googleapis.com/auth/cloud-platform \
       --no-address \
       --shielded-secure-boot \
       --service-account=user-managed-sa@$projectid.iam.gserviceaccount.com \
       --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install tcpdump dnsutils -y"
    
  2. ssh-iap-on-prem-vpc라는 IAP 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create ssh-iap-on-prem-vpc \
       --network onprem-vpc \
       --allow tcp:22 \
       --source-ranges=35.235.240.0/20
    

Vertex AI 기반 생성형 AI에 대한 공개 인터넷 액세스 검증

이 섹션에서는 IAP(Identity-Aware Proxy)를 사용하여 on-prem-client VM 인스턴스에 로그인한 후 공개 Vertex AI 도메인(us-central1-aiplatform.googleapis.com)에 대한 dig 명령어를 실행하여 Vertex AI API(GenAI 포함)에 대한 공개 연결을 검증합니다.

  1. Cloud Shell(탭 1)에서 PROJECT_ID를 프로젝트 ID로 바꿔 다음 명령어를 실행합니다.

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. IAP를 사용하여 on-prem-client VM 인스턴스에 로그인합니다.

    gcloud compute ssh on-prem-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  3. dig 명령어를 실행합니다.

    dig us-central1-aiplatform.googleapis.com
    

    다음과 비슷한 dig 출력이 표시됩니다. 여기서 응답 섹션의 IP 주소는 공개 IP 주소입니다.

    ; <<>> DiG 9.16.44-Debian <<>> us-central1.aiplatfom.googleapis.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42506
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;us-central1.aiplatfom.googleapis.com. IN A
    
    ;; ANSWER SECTION:
    us-central1.aiplatfom.googleapis.com. 300 IN A  173.194.192.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.152.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  172.217.219.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.146.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.147.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.125.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.136.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.148.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.200.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.234.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.251.171.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  108.177.112.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.128.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.251.6.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  172.217.212.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  74.125.124.95
    
    ;; Query time: 8 msec
    ;; SERVER: 169.254.169.254#53(169.254.169.254)
    ;; WHEN: Wed Sep 27 04:10:16 UTC 2023
    ;; MSG SIZE  rcvd: 321
    

Vertex AI 기반 생성형 AI에 대한 비공개 액세스 구성 및 검증

이 섹션에서는 요청을 공개 서비스 엔드포인트(us-central1-aiplatform.googleapis.com)에 전송하면 대신 PSC 엔드포인트로 리디렉션되도록 Vertex AI 기반 생성형 AI에 대한 비공개 액세스를 구성합니다. PSC 엔드포인트에서 다시 요청을 전달합니다.

PSC 엔드포인트를 가리키도록 /etc/hosts 파일을 업데이트합니다.

이 단계에서는 공개 서비스 엔드포인트(us-central1-aiplatform.googleapis.com)로 전송된 요청이 PSC 엔드포인트(192.168.0.1)로 리디렉션되는 /etc/hosts 파일에 줄을 추가합니다.

  1. on-prem-client VM 인스턴스(탭 1)에서 vim 또는 nano와 같은 텍스트 편집기를 사용하여 /etc/hosts 파일을 엽니다.

    sudo vim /etc/hosts
    
  2. 다음 줄을 파일에 추가합니다.

    192.168.0.1 us-central1-aiplatform.googleapis.com
    

    이 줄은 PSC 엔드포인트의 IP 주소(192.168.0.1)를 Vertex AI Google API(us-central1-aiplatform.googleapis.com)의 정규화된 도메인 이름에 할당합니다.

    수정된 파일은 다음과 같습니다.

    127.0.0.1       localhost
    ::1             localhost ip6-localhost ip6-loopback
    ff02::1         ip6-allnodes
    ff02::2         ip6-allrouters
    
    192.168.0.1 us-central1-aiplatform.googleapis.com  # Added by you
    172.16.10.6 on-prem-client.us-central1-a.c.vertex-genai-400103.internal on-prem-client  # Added by Google
    169.254.169.254 metadata.google.internal  # Added by Google
    
  3. 다음과 같이 파일을 저장합니다.

    • vim을 사용하는 경우 Esc 키를 누른 후 :wq를 입력하여 파일을 저장하고 종료합니다.
    • nano를 사용하는 경우 Control+O을 입력하고 Enter를 눌러 파일을 저장한 후 Control+X를 입력하여 종료합니다.
  4. 다음과 같이 Vertex AI 엔드포인트를 핑합니다.

    ping us-central1-aiplatform.googleapis.com
    

    ping 명령어에서 다음 출력을 반환합니다. 192.168.0.1은 PSC 엔드포인트 IP 주소입니다.

    PING us-central1-aiplatform.googleapis.com (192.168.0.1) 56(84) bytes of data.
    
  5. ping에서 종료하려면 Control+C를 입력합니다.

  6. 온라인 예측 요청을 엔드포인트에 전송할 때 다음 tcpdump 명령어를 실행하여 DNS 변환과 IP 데이터 경로를 검증합니다.

     sudo tcpdump -i any port 53 -n or host 192.168.0.1
    

비공개 요청 만들기

이 단계에서는 GenAI REST API로 전송하는 샘플 curl 요청의 페이로드가 포함된 request.json이라는 텍스트 파일을 만듭니다. 샘플 요청에 대한 자세한 내용은 샘플 요청을 참조하세요.

  1. 탭 1에서 tcpdump 명령어를 계속 실행한 상태에서 Cloud Storage의 새 탭 열기를 클릭하여 새 Cloud Shell 세션(탭 2)을 엽니다.

  2. 새 Cloud Shell 세션(탭 2)에서 다음 명령어를 실행하고 PROJECT_ID를 프로젝트 ID로 바꿉니다.

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  3. IAP를 사용하여 on-prem-client VM 인스턴스에 로그인합니다.

    gcloud compute ssh on-prem-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  4. 다음 명령어를 실행하고 PROJECT_ID를 프로젝트 ID로 바꿉니다.

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  5. vim 또는 nano와 같은 텍스트 편집기를 사용하여 다음 텍스트가 포함된 request.json이라는 새 파일을 만듭니다.

    {
       "instances": [
          { "prompt": "Give me ten interview questions for the role of program manager."}
       ],
       "parameters": {
          "temperature": 0.2,
          "maxOutputTokens": 256,
          "topK": 40,
          "topP": 0.95
       }
    }
    
  6. 다음 명령어를 실행하여 요청을 GenAI API에 전달하는 PSC 엔드포인트로 보냅니다. 엔드포인트에서 응답을 수신하면 응답이 on-prem-client VM으로 다시 전달됩니다.

    curl -X POST \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       -H "Content-Type: application/json; charset=utf-8" \
       -d @request.json \
       "https://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/publishers/google/models/text-bison:predict"
    

    다음 예시와 비슷한 응답이 표시됩니다.

    {
       "predictions": [
          {
          "content": " 1. **What is your experience in managing programs?**\n2. **What are your strengths and weaknesses as a program manager?**\n3. **What is your approach to managing a program?**\n4. **How do you handle risks and challenges in a program?**\n5. **How do you communicate with stakeholders in a program?**\n6. **How do you measure the success of a program?**\n7. **What is your experience in working with cross-functional teams?**\n8. **What is your experience in managing budgets and resources?**\n9. **What is your experience in managing change in a program?**\n10. **What are your career goals as a program manager?**",
          "citationMetadata": {
             "citations": []
          },
          "safetyAttributes": {
             "categories": [
             "Finance",
             "Health"
             ],
             "blocked": false,
             "scores": [
                0.6,
                0.1
             ]
          }
          }
       ],
       "metadata": {
          "tokenMetadata": {
             "outputTokenCount": {
                "totalBillableCharacters": 505,
                "totalTokens": 153
             },
             "inputTokenCount": {
                "totalBillableCharacters": 54,
                "totalTokens": 12
             }
          }
       }
    }
    
  7. 탭 1에서 PSC 엔드포인트 IP 주소(192.168.0.1)가 on-prem-client VM 인스턴스(서브넷 172.16.10.0/28)에서 Vertex AI API에 액세스하는 데 사용되었는지 확인합니다.

    Cloud Shell 탭 1의 tcpdump 터미널에서 us-central1-aiplatform.googleapis.com에 대한 DNS 조회가 필요 없음을 알 수 있습니다. /etc/hosts 파일에 추가한 줄이 우선 적용되고 PSC 엔드포인트 IP 주소(192.168.0.1)가 데이터 경로에 사용되기 때문입니다.

    다음과 비슷한 tcpdump 출력이 표시됩니다.

    23:48:49.938797 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [P.], seq 2054:2093, ack 6264, win 501, options [nop,nop,TS val 2943864305 ecr 2340789954], length 39
    23:48:49.938947 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [P.], seq 2093:2117, ack 6264, win 501, options [nop,nop,TS val 2943864305 ecr 2340789954], length 24
    23:48:49.939839 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [F.], seq 2117, ack 6264, win 501, options [nop,nop,TS val 2943864306 ecr 2340789954], length 0
    23:48:49.940292 ens4  In  IP 192.168.0.1.443 > 172.16.10.9.38578: Flags [.], ack 2117, win 272, options [nop,nop,TS val 2340789958 ecr 2943864305], length 0
    23:48:49.940437 ens4  In  IP 192.168.0.1.443 > 172.16.10.9.38578: Flags [F.], seq 6264, ack 2117, win 272, options [nop,nop,TS val 2340789958 ecr 2943864305], length 0
    23:48:49.940442 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [.], ack 6265, win 501, options [nop,nop,TS val 2943864307 ecr 2340789958], length 0
    23:48:49.941193 ens4  In  IP 192.168.0.1.443 > 172.16.10.9.38578: Flags [.], ack 2118, win 272, options [nop,nop,TS val 2340789959 ecr 2943864306], length 0
    

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.

Cloud Shell에서 다음 명령어를 실행하여 프로젝트에서 개별 리소스를 삭제할 수 있습니다.

   projectid=PROJECT_ID
   gcloud config set project ${projectid}
   gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet
   gcloud compute instances delete on-prem-client --zone=us-central1-a --quiet
   gcloud iam service-accounts delete user-managed-sa@$projectid.iam.gserviceaccount.com --quiet
   gcloud compute forwarding-rules delete pscvertex --global --quiet
   gcloud compute addresses delete psc-googleapi-ip --global --quiet
   gcloud compute vpn-tunnels delete vertex-networking-vpc-tunnel0 vertex-networking-vpc-tunnel1 onprem-vpc-tunnel0 onprem-vpc-tunnel1 --region=us-central1 --quiet
   gcloud compute routers nats delete us-central-cloudnat-onprem --router=onprem-vpc-router1 --region=us-central1 --quiet
   gcloud compute routers delete vertex-networking-vpc-router1 onprem-vpc-router1 --region=us-central1 --quiet
   gcloud compute vpn-gateways delete vertex-networking-vpn-gw1 onprem-vpn-gw1 --region=us-central1 --quiet
   gcloud compute networks subnets delete onprem-vpc-subnet1 --region=us-central1 --quiet
   gcloud compute networks delete onprem-vpc --quiet
   gcloud compute networks delete vertex-networking-vpc --quiet

다음 단계