고정 외부 IP를 사용하여 비공개 네트워크의 외부 리소스에 액세스

이 페이지에서는 고정 외부 IP를 통해 외부 리소스에 액세스하도록 비공개 풀을 설정하는 방법을 설명합니다.


Google Cloud 콘솔에서 이 태스크에 대한 단계별 안내를 직접 수행하려면 둘러보기를 클릭합니다.

둘러보기


시작하기 전에

  • API Cloud Build, Compute Engine, and Service Networking 사용 설정

    API 사용 설정

  • 비공개 연결을 설정하는 데 필요한 권한을 얻으려면 관리자에게 VPC 네트워크가 있는 Cloud 프로젝트에 대한 Compute Engine 네트워크 관리자(roles/compute.networkAdmin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

  • 이 페이지에서 gcloud 명령어를 사용하려면 Google Cloud CLI를 설치합니다.

VPC 네트워크 만들기

콘솔

Google Cloud 콘솔을 사용하여 VPC 네트워크를 만들려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지를 엽니다.

    VPC 네트워크로 이동

  2. VPC 네트워크 만들기를 클릭하여 새 네트워크를 만듭니다.

    VPC 네트워크 만들기 페이지가 표시됩니다.

  3. 네트워크의 이름을 입력합니다.

  4. 서브넷 생성 모드에서 자동을 선택합니다.

  5. 다른 필드를 추가로 맞춤설정하려면 VPC 네트워크 만들기 및 관리를 참조하세요. 그렇지 않으면 모든 필드를 그대로 둡니다.

  6. 만들기를 클릭하여 VPC 네트워크를 만듭니다.

    만들기를 클릭하면 VPC 네트워크 페이지에 새 VPC 네트워크가 표시됩니다.

gcloud

gcloud 명령줄 도구를 사용하여 VPC 네트워크를 만들려면 터미널에 다음 명령어를 입력합니다. 여기서 NETWORK_NAME은 VPC 네트워크의 이름입니다.

gcloud compute networks create NETWORK_NAME \
  --subnet-mode=auto

만들기를 클릭하면 VPC 네트워크 페이지에 새 VPC 네트워크가 표시됩니다.

VPC 네트워크 만들기 및 관리에 대한 자세한 내용은 VPC 네트워크 만들기 및 관리를 참조하세요.

비공개 연결 만들기

콘솔

VPC 네트워크와 서비스 제작자 네트워크 간에 비공개 연결을 만들려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 VPC 네트워크 페이지를 엽니다.

    VPC 네트워크로 이동

  2. 네트워크 이름을 클릭합니다.

    VPC 네트워크 세부정보 페이지가 표시됩니다.

  3. 비공개 서비스 연결 탭을 클릭합니다.

    1. 서비스에 할당된 IP 범위 탭을 선택합니다.

    2. IP 범위 할당을 클릭합니다.

      내부 IP 범위 할당 팝업이 표시됩니다.

      1. IP 범위의 이름을 입력합니다.

      2. IP 범위에서 자동을 선택합니다.

      3. 프리픽스 길이 필드에 네트워크의 프리픽스 길이를 입력합니다.

      4. 할당을 클릭하여 IP 범위를 할당합니다.

    3. 서비스에 대한 비공개 연결 탭을 선택합니다.

    4. 연결 만들기를 클릭합니다.

      비공개 연결 만들기 팝업이 표시됩니다.

      1. 지정된 할당에서 IP 범위를 선택합니다.

      2. 연결을 클릭합니다.

      이제 서비스에 대한 비공개 연결 탭 아래의 표에 연결이 표시됩니다.

      사용 설정(커스텀 경로 내보내기)을 클릭하여 VPC 경로가 비공개 풀 인스턴스가 실행되는 네트워크에 적용되도록 합니다.

이제 네트워크가 구성되었습니다.

gcloud

VPC 네트워크와 서비스 제작자 네트워크 간에 비공개 연결을 만들려면 다음 단계를 완료합니다.

  1. 터미널에 다음 명령어를 입력하여 서비스의 IP 범위를 할당합니다.

        gcloud compute addresses create RESERVED_RANGE_NAME \
          --global \
          --prefix-length=PREFIX_LENGTH \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    각 항목의 의미는 다음과 같습니다.

    • RESERVED_RANGE_NAME은 할당된 범위의 이름입니다. 예를 들면 my-allocated-range입니다.
    • PREFIX_LENGTH는 네트워크의 프리픽스 길이입니다. 프리픽스 길이는 /24 이하여야 합니다(예: /22, /21 등).
    • VPC_NETWORK는 VPC 네트워크의 이름입니다(예: my-vpc-network).
    • PROJECT_ID는 VPC 네트워크가 포함된 프로젝트의 ID입니다.
  2. 터미널에서 다음 명령어를 입력하여 비공개 연결을 만듭니다.

        gcloud services vpc-peerings connect \
          --service=servicenetworking.googleapis.com \
          --ranges=RESERVED_RANGE_NAME \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    각 항목의 의미는 다음과 같습니다.

    • RESERVED_RANGE_NAME은 이전 단계에서 만든 할당 범위의 이름입니다.
    • VPC_NETWORK는 VPC 네트워크의 이름입니다(예: my-vpc-network).
    • PROJECT_ID는 VPC 네트워크가 포함된 프로젝트의 ID입니다.
  3. 터미널에 다음 명령어를 입력하여 VPC 경로가 비공개 풀 인스턴스가 실행되는 네트워크에 적용되도록 합니다.

        gcloud compute networks peerings update servicenetworking-googleapis-com \
          --export-custom-routes \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    각 항목의 의미는 다음과 같습니다.

    • VPC_NETWORK는 VPC 네트워크의 이름입니다(예: my-vpc-network).
    • PROJECT_ID는 VPC 네트워크가 포함된 프로젝트의 ID입니다.

이제 네트워크가 구성되었습니다.

네트워크 구성에 대한 자세한 내용은 VPC 네트워크와 서비스 프로듀서 네트워크 간의 비공개 연결 설정을 참조하세요.

비공개 풀 만들기

콘솔

Google Cloud 콘솔을 사용하여 비공개 풀을 만들려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔에서 작업자 풀 페이지를 엽니다.

    Cloud Build 작업자 풀 페이지 열기

  2. 비공개 풀을 만들 프로젝트를 선택합니다.

  3. 작업자 풀 페이지에서 만들기를 클릭합니다.

    비공개 풀 만들기 패널이 표시됩니다.

  4. 비공개 풀 만들기 측면 패널에서 다음 정보를 입력합니다.

    1. 비공개 풀의 이름을 입력합니다.

    2. 드롭다운 메뉴에서 리전을 선택합니다.

    3. 네트워크에 다음 정보를 입력합니다.

    • 프로젝트: 프로젝트 ID 또는 번호를 입력합니다.
    • 네트워크: VPC 네트워크의 이름을 입력합니다.
    1. (선택사항) 가장 제한적인 네트워크 구성을 위해 외부 IP 할당 체크박스를 선택 해제합니다.

이제 비공개 풀이 생성되었습니다.

gcloud

gcloud 명령줄 도구를 사용하여 비공개 풀을 만들려면 터미널에 다음 명령어를 입력합니다.

      gcloud builds worker-pools create PRIVATEPOOL_ID \
        --project=PRIVATEPOOL_PROJECT_ID \
        --region=REGION \
        --peered-network=PEERED_NETWORK \
        --no-public-egress

각 항목의 의미는 다음과 같습니다.

  • PRIVATEPOOL_ID: 비공개 풀의 고유 식별자입니다.
  • PRIVATEPOOL_PROJECT_ID: 비공개 풀을 만들려는 Google Cloud 프로젝트의 ID입니다.
  • REGION: 지원되는 리전 중 하나입니다.
  • PEERED_NETWORK: 네트워크 리소스 URL입니다.
  • --no-public-egress: 이 플래그가 설정되면 외부 IP 주소 없이 비공개 풀이 생성됩니다.

이제 비공개 풀이 생성되었습니다.

비공개 풀을 만들고 관리하는 방법에 대한 자세한 내용은 비공개 풀 만들기 및 관리를 참조하세요.

비공개 네트워크의 외부 리소스에 액세스

기본적으로 Cloud Build 비공개 풀과 연결된 외부 IP 주소는 고정되지 않거나 구성될 수 없습니다. 이 주소는 Google Cloud에서 할당됩니다. 고정 외부 IP로 비공개 네트워크의 외부 리소스에 액세스할 수 있도록 비공개 풀을 설정하려면 프로젝트에서 가상 머신(VM)이 자기 관리형 NAT 게이트웨이 역할을 하여 공개 인터넷에 대한 요청을 프록시하도록 설정합해야 합니다. 그런 다음 경로가 이러한 요청을 서비스 네트워킹 프로젝트와 교환되도록 VM에 전달하도록 커스텀 경로를 설정해야 합니다.

이 섹션에서는 다음 단계를 완료하여 고정 외부 IP를 통해 외부 리소스에 액세스하도록 비공개 풀을 설정하는 방법을 간략하게 설명합니다.

  1. VM으로 라우팅되는 모든 트래픽을 프록시하도록 VM을 구성하는 시작 스크립트를 만들고 이 트래픽을 IP 주소에서 시작되는 것으로 매스커레이드합니다.

    #! /bin/bash
    set -e
    
    sysctl -w net.ipv4.ip_forward=1
    IFACE=$(ip -brief link | tail -1 | awk  {'print $1'})
    iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
    
  2. VPC를 통해 요청을 프록시할 수 있도록 허용하는 규칙을 사용하여 비공개 풀과 동일한 VPC에서 VM을 설정합니다.

    gcloud compute instances create VM_NAME \
      --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \
      --network=NETWORK_NAME \
      --private-network-ip=INTERNAL_IP --can-ip-forward \
      --zone=ZONE \
      --subnet=SUBNETWORK \
      --tags=NAT_TAG  \
      --metadata-from-file=startup-script=STARTUP_SCRIPT
    

    각 항목의 의미는 다음과 같습니다.

    • VM_NAME은 VM에 제공할 이름입니다.
    • NETWORK_NAME이전 섹션에서 만든 네트워크의 이름입니다.
    • INTERNAL_IP는 VM 리전의 서브네트워크 범위 내에 있는 유효한 내부 IP 주소입니다. 예를 들면 10.128.0.2입니다.
    • ZONE은 네트워크와 연결된 영역입니다(예: us-central1-a).
    • (선택사항) SUBNETWORK는 서브네트워크의 이름입니다. 서브네트워크의 이름은 서브넷의 동등한 REST에서 확인할 수 있습니다(형식: projects/project-id/regions/region/subnetworks/subnetwork-name). VPC 네트워크를 만들 때 서브넷 연결 모드에서 자동을 선택한 경우 이 필드를 지정할 필요가 없습니다.
    • NAT_TAG은 이 VM의 태그가 있는지 여부에 따라 조건부로 요청을 라우팅할 수 있는 NAT 게이트웨이 태그의 이름입니다. 태그 이름을 지정할 수 있습니다.
    • STARTUP_SCRIPT는 이전 단계에서 만든 시작 스크립트의 이름입니다. 예를 들면 startup-script-example.sh입니다. 이 예시에서는 --metadata-from-file 플래그를 사용하여 시작 스크립트의 콘텐츠를 startup-script라는 키에 전달합니다.

    이 명령어를 실행하면 외부 IP 값이 포함된 출력이 표시됩니다. 외부 IP 값을 기록해 둡니다. 비공개 풀에서 외부 리소스로 전송되는 모든 트래픽은 이 주소를 통해 전송됩니다. 외부 네트워크에서 방화벽 규칙을 구성하는 등 추가 구성을 위해 이 주소를 사용할 수도 있습니다.

  3. 외부 리소스에 대한 모든 요청을 이전 단계에서 만든 인스턴스로 이동하도록 경로를 설정하여 요청이 비공개 풀 인스턴스에 전달되도록 합니다.

    gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-address=INTERNAL_IP \
      --network=NETWORK_NAME \
      --priority=POOL_ROUTE_PRIORITY
    

    각 항목의 의미는 다음과 같습니다.

    • PRIVATE_POOL_ROUTE_NAME은 경로에 지정할 이름입니다.
    • DESTINATION_RANGE은 라우팅할 대상이 포함된 유효한 CIDR 주소 범위입니다. 예를 들어 GitHub Enterprise Edition 인스턴스가 있습니다. 예를 들면 8.8.8.0/24입니다.
    • INTERNAL_IP는 이전 단계에서 가져온 내부 IP 값입니다. 예를 들면 10.128.0.2입니다.
    • NETWORK_NAME이전 섹션에서 만든 네트워크의 이름입니다.
    • POOL_ROUTE_PRIORITY는 경로에 지정하려는 우선순위 번호입니다.

    이 명령어는 비공개 풀 인스턴스 내의 빌드에서 발생하는 트래픽이 공개 인터넷으로 직접 라우팅되지 않고 생성된 프록시 VM으로 라우팅되도록 보장합니다.

  4. 태그가 지정된 인스턴스에서 외부 대상 IP 범위로 프록시의 요청을 전달하는 경로를 설정합니다. 다음 명령어는 비공개 풀 인스턴스와 연결된 공개 인터넷에 요청을 전달하는 경로를 만듭니다.

    gcloud compute routes create NAT_EGRESS_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-gateway=default-internet-gateway \
      --network=NETWORK_NAME \
      --priority=NAT_ROUTE_PRIORITY \
      --tags=NAT_TAG
    

    각 항목의 의미는 다음과 같습니다.

    • NAT_EGRESS_ROUTE_NAME는 NAT 게이트웨이 경로에 지정할 이름입니다.
    • DESTINATION_RANGE는 라우팅할 대상의 주소입니다. 예를 들어 GitHub Enterprise Edition 인스턴스가 있습니다. 예를 들면 8.8.8.0/24입니다.
    • NETWORK_NAME이전 섹션에서 만든 네트워크의 이름입니다.
    • NAT_TAG은 이 VM의 태그가 있는지 여부에 따라 조건부로 요청을 라우팅할 수 있는 NAT 게이트웨이 태그의 이름입니다. 태그 이름을 지정할 수 있습니다.
    • NAT_ROUTE_PRIORITY는 경로에 지정하려는 우선순위 번호입니다.

    이 명령어는 프록시 VM의 모든 트래픽이 공개 인터넷으로 전달될 수 있도록 합니다.

  5. 비공개 풀의 트래픽을 NAT 게이트웨이 VM으로 허용하는 방화벽 규칙을 추가합니다.

    gcloud compute firewall-rules create RULE_NAME \
      --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \
      --network=NETWORK_NAME \
      --source-ranges=RESERVED_RANGE \
      --target-tags=NAT_TAG
    

    각 항목의 의미는 다음과 같습니다.

    • RULE_NAME은 방화벽 규칙에 지정할 이름입니다.
    • FIREWALL_PRIORITY는 방화벽 규칙에 지정하려는 우선순위 번호입니다.
    • NETWORK_NAME이전 섹션에서 만든 네트워크의 이름입니다.
    • RESERVED_RANGEVPC 네트워크를 구성할 때 할당한 CIDR 범위입니다.
    • NAT_TAG은 이 VM의 태그가 있는지 여부에 따라 조건부로 요청을 라우팅할 수 있는 NAT 게이트웨이 태그의 이름입니다. 태그 이름을 지정할 수 있습니다.

이제 VPC에서 자체 관리형 NAT 게이트웨이의 고정 IP 주소로부터 외부 리소스에 액세스할 수 있습니다.

다음 단계