비공개 인스턴스에서 공개 소스에 연결

이 페이지에서는 파이프라인을 개발할 때 비공개 Cloud Data Fusion 인스턴스에서 Salesforce와 같은 Software-as-a-Service(SaaS) 애플리케이션과 Amazon S3 같은 타사 클라우드 서비스에 연결하는 방법을 설명합니다.

이 가이드에서는 이그레스이그레스 제어라는 용어가 사용됩니다.

  • 이그레스란 공용 인터넷을 통해 Google Cloud에서 나가는 네트워크 트래픽을 의미합니다. 일반적으로 Salesforce와 같은 SaaS 서비스 또는 Amazon S3와 같은 퍼블릭 클라우드 서비스에서 데이터를 읽거나 쓰는 파이프라인을 만들 때 이그레스가 발생합니다.

  • 이그레스 제어에서는 프록시 VM을 사용해 사전 구성된 도메인 집합에 대한 이그레스 트래픽은 성공하고 다른 모든 트래픽은 실패하도록 만드는 이그레스 트래픽의 가드레일을 정의합니다. 이그레스 트래픽의 보안 경계를 강화하면 비공개 인스턴스에서 원치 않는 이그레스를 막을 수 있습니다.

다음 시스템 아키텍처 다이어그램은 파이프라인을 개발할 때 비공개 Cloud Data Fusion 인스턴스가 공용 인터넷에 연결되는 방법을 보여줍니다.

비공개 인스턴스 아키텍처 다이어그램

이 시나리오의 파이프라인을 설계하면 Cloud Data Fusion에서 Cloud Data Fusion 미리보기 또는 랭글러의 고객 프로젝트를 통해 이그레스 트래픽을 라우팅합니다. 이 프로세스에는 다음 리소스가 사용됩니다.

  • 커스텀 VPC 네트워크 경로: 커스텀 VPC 네트워크가 가져온 커스텀 경로를 통해 트래픽을 게이트웨이 VM으로 라우팅하고 게이트웨이 VM은 VPC 피어링을 사용하여 테넌트 프로젝트 VPC로 내보냅니다.

  • 게이트웨이 VM: 게이트웨이 VM은 Google Cloud에서 전송된 이그레스 트래픽을 공용 인터넷을 통해 Cloud Data Fusion 테넌트 프로젝트에서 SaaS 또는 타사 클라우드로 라우팅합니다. 이 VM은 고객 프로젝트에서 관리합니다. 내부 부하 분산기(ILB)를 사용하여 고가용성(HA) 환경에서 구성할 수 있습니다. 동일한 VPC 내에서 여러 비공개 Cloud Data Fusion 인스턴스에 VM을 재사용하는 것이 좋습니다.

설계 및 실행 환경에서 이그레스 제어를 설정하는 방법은 비공개 인스턴스의 이그레스 제어를 참조하세요.

시작하기 전에

인터넷 연결 설정

다음 단계는 랭글러의 비공개 Cloud Data Fusion 인스턴스에서 Amazon S3 버킷에 액세스하는 방법을 설명합니다. 미리보기 또는 랭글러에서 파이프라인을 설계할 때 공용 인터넷을 통해 모든 데이터 소스에 액세스하는 경우 이와 동일한 단계가 적용됩니다.

이 가이드에서는 VM이 하나만 사용되지만 중요한 애플리케이션의 경우에는 부하 분산된 VM을 만드는 것이 좋습니다. 자세한 내용은 고가용성 VM 설정을 참조하세요.

NAT 게이트웨이 만들기

Cloud Data Fusion 비공개 인스턴스와 동일한 리전 및 VPC 네트워크에 Cloud NAT 게이트웨이를 만듭니다.

Cloud NAT로 이동

게이트웨이 VM 인스턴스 및 방화벽 규칙 만들기

콘솔

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 인스턴스 만들기를 클릭합니다. 외부 IP가 없는 VM을 사용하는 것이 좋습니다.

  3. 비공개 Cloud Data Fusion 인스턴스로 네트워크 피어링이 설정된 VPC를 사용합니다. 이 시나리오의 VPC 네트워크 피어링에 대한 자세한 내용은 시작하기 전에를 참조하세요.

  4. Cloud Data Fusion 인스턴스와 동일한 네트워크에 있는 인스턴스에 IP 전달을 사용 설정합니다.

  5. 시작 스크립트 필드에 다음 스크립트를 입력합니다.

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    자세한 내용은 시작 스크립트 실행을 참조하세요.

    할당된 IP 범위를 Cloud Data Fusion 인스턴스에 가져오려면 Cloud Data Fusion 인스턴스 세부정보 페이지로 이동합니다.

    스테이징 이그레스 인터페이스

gcloud

게이트웨이 VM 및 방화벽 규칙을 만들려면 Google Cloud CLI에서 다음 스크립트를 실행합니다.

export CDF_PROJECT=CDF_PROJECT
export GATEWAY_VM=GATEWAY_VM_NAME
export ZONE=VM_ZONE
export SUBNET=SUBNET
export VPC_NETWORK=VPC_NETWORK
export COMPUTE_ENGINE_SA=COMPUTE_ENGINE_SA

gcloud beta compute --project=$CDF_PROJECT instances create $GATEWAY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --network-tier=PREMIUM --metadata=startup-script=\#\!\ /bin/bash$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables-save  --can-ip-forward --no-address --maintenance-policy=MIGRATE --service-account=$COMPUTE_ENGINE_SA --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=http-server,https-server --image=debian-10-buster-v20210316 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=$GATEWAY_VM --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-http --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=CDF_IP_RANGE --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-https --direction=INGRESS --priority=1000 --network=$VPC_NETWORK --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE --target-tags=https-server

다음을 바꿉니다.

  • CDF_PROJECT: 프로젝트에 대한 맞춤설정 가능한 고유 식별자입니다.
  • GATEWAY_VM: 구성하려는 VM의 이름입니다.
  • ZONE: VM의 영역입니다.
  • SUBNET: 서브넷입니다.
  • VPC_NETWORK: VM의 이름입니다.
  • COMPUTE_ENGINE_SA: Compute Engine 서비스 계정의 이름입니다.
  • CDF_IP_RANGE: Cloud Data Fusion 인스턴스에 할당된 IP 범위입니다.

공유 VPC 사용

공유 VPC를 사용해 비공개 Cloud Data Fusion 인스턴스를 공용 인터넷의 소스에 연결하는 경우 VPC 네트워크 피어링이 테넌트 프로젝트로 설정된 호스트 프로젝트에 게이트웨이 VM을 만듭니다.

커스텀 경로 만들기

내가 만든 게이트웨이 VM 인스턴스에 연결할 커스텀 경로를 만듭니다.

콘솔

Google Cloud 콘솔에서 경로를 만들려면 정적 경로 추가를 참조하세요.

경로를 구성할 때 다음을 수행합니다.

  • 우선순위1001 이상으로 설정합니다. 대상을 Cloud Data Fusion 인스턴스에 할당된 IP 범위로 설정합니다.
  • 비공개 Cloud Data Fusion 인스턴스와 동일한 프로젝트 및 VPC를 사용합니다.
  • Cloud Data Fusion 테넌트 프로젝트 VPC가 VPC 네트워크 피어링을 통해 이 커스텀 경로를 가져올 수 있도록 VPC 네트워크 피어링 구성에서 경로 내보내기를 허용하는지 확인합니다.

gcloud

gcloud CLI에서 경로를 만들려면 다음 스크립트를 실행합니다.

export ROUTE=ROUTE
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
    --network=$VPC_NETWORK --priority=1001 \
    --destination-range=0.0.0.0/0 \
    --next-hop-instance=$GATEWAY_VM \
    --next-hop-instance-zone=$ZONE

다음을 바꿉니다.

  • ROUTE: 커스텀 경로의 이름입니다.

설정 확인

이전 단계를 수행한 후 미리보기 및 Wrangler에서 S3 버킷 서비스나 기타 SaaS 또는 퍼블릭 클라우드 서비스에 액세스할 수 있는지 확인합니다.

고가용성 게이트웨이 설정

권장: 중요한 애플리케이션이라면 부하 분산된 VM을 만드는 것이 좋습니다.

상태 확인을 위한 방화벽 규칙 만들기

방화벽 규칙을 만들어 다음을 허용합니다.

  • 모든 소스 범위의 포트 80(HTTP) 및 포트 443(HTTPS)
  • 상태 점검 프로버 IP 주소의 TCP, UDP, ICMP 트래픽. 예를 들면 130.211.0.0/22,35.191.0.0/16입니다.

콘솔

모든 소스 범위의 포트를 허용하는 방화벽 규칙과 130.211.0.0/22,35.191.0.0/16과 같은 상태 확인 프로버 IP 주소의 TCP, UDP, ICMP 트래픽을 허용하는 방화벽 규칙을 만듭니다.

상태 확인 만들기를 참조하세요.

gcloud

상태 확인을 위한 방화벽 규칙 만들기

export CDF_PROJECT=PROJECT_ID
export VPC_NETWORK=VPC_NETWORK

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-http \
    --direction=INGRESS --priority=1000 \
    --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:80 \
    --source-ranges=CDF_IP_RANGE \
    --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-https \
    --direction=INGRESS --priority=1000 --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:443 --source-ranges=CDF_IP_RANGE \
    --target-tags=https-server

gcloud compute --project=$CDF_PROJECT firewall-rules create allow-health-checks \
    --network=$VPC_NETWORK \
    --action=allow --direction=ingress \
    --target-tags=allow-health-checks \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp,udp,icmp

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트에 대한 맞춤설정 가능한 고유 식별자입니다.
  • VPC_NETWORK: VPC 네트워크의 이름입니다.
  • CDF_IP_RANGE: Cloud Data Fusion에 할당된 IP 주소 범위입니다.

게이트웨이 VM 인스턴스 템플릿 만들기

콘솔

콘솔에서 인스턴스 템플릿을 만들려면 다음 안내를 따르세요.

  • Cloud Data Fusion 인스턴스와 동일한 VPC에서 만듭니다.
  • 권장: 비공개 IP 주소가 있는 VM을 사용합니다.
  • HTTP/HTTPS 포트를 사용 설정합니다.
  • IP 전달을 사용 설정합니다.
  • 시작 스크립트 필드에 다음 스크립트를 입력합니다.

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    자세한 내용은 시작 스크립트 실행을 참조하세요.

    할당된 IP 범위를 Cloud Data Fusion 인스턴스에 가져오려면 Cloud Data Fusion 인스턴스 세부정보 페이지로 이동합니다.

gcloud

인스턴스 템플릿을 만듭니다.

export TEMPLATE_NAME=TEMPLATE_NAME
export REGION=REGION
export SUBNET=SUBNET
export SERVICE_ACCOUNT=SERVICE_ACCOUNT

gcloud beta compute --project=$CDF_PROJECT instance-templates create $TEMPLATE_NAME \
--machine-type=e2-medium \
--subnet=projects/$CDF_PROJECT/regions/$REGION/subnetworks/$SUBNET \
--network-tier=PREMIUM --metadata=startup-script=sudo\ bash\ -c\ \"echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward\"$'\n'sudo\ iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'sudo\ bash\ -c\ \"echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf\"$'\n'sudo\ iptables-save \
--can-ip-forward --no-address --maintenance-policy=MIGRATE \
--service-account=$SERVICE_ACCOUNT \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
--region=$REGION --tags=http-server,https-server,allow-health-checks \
--image=debian-10-buster-v20210316 \
--image-project=debian-cloud --boot-disk-size=10GB \
--boot-disk-type=pd-balanced \
--boot-disk-device-name=$TEMPLATE_NAME \
--no-shielded-secure-boot --no-shielded-vtpm \
--no-shielded-integrity-monitoring \
--reservation-affinity=any

상태 확인 만들기

이 게이트웨이 VM 인스턴스에서는 서비스가 실행되지 않으므로 상태 확인에 포트 22를 사용할 수 있습니다.

콘솔

상태 확인 만들기를 참조하세요.

gcloud

상태 확인을 만듭니다.

export HEATH_CHECK=HEALTH_CHECK_NAME

gcloud beta compute health-checks create tcp $HEATH_CHECK --project=$CDF_PROJECT \
--port=22 --proxy-header=NONE --no-enable-logging \
--check-interval=5 --timeout=5 \
--unhealthy-threshold=2 --healthy-threshold=2

인스턴스 그룹 만들기

이전 단계에서 만든 상태 확인을 사용하여 인스턴스 그룹을 만듭니다.

콘솔

관리형 인스턴스 그룹 만들기를 참조하세요.

gcloud

인스턴스 그룹을 만듭니다.

export INSTANCE_GROUP=INSTANCE_GROUP
gcloud beta compute --project=$CDF_PROJECT instance-groups managed create $INSTANCE_GROUP \
--base-instance-name=$INSTANCE_GROUP \
--template=$TEMPLATE_NAME --size=1 --zone=$ZONE \
--health-check=test --initial-delay=300

gcloud beta compute --project "$CDF_PROJECT" instance-groups managed set-autoscaling "$INSTANCE_GROUP" \
--zone "$ZONE" --cool-down-period "60" \
--max-num-replicas "10" --min-num-replicas "1" \
--target-cpu-utilization "0.6" --mode "on"

부하 분산기 만들기

이전 단계에서 만든 인스턴스 그룹에서 TCP 부하 분산기(ILB)를 만듭니다.

부하 분산기에 커스텀 경로 추가

Cloud Data Fusion 인스턴스와 동일한 VPC에서 내부 부하 분산기(ILB)에 커스텀 경로를 추가합니다.

콘솔

VPC 네트워크 페이지로 이동합니다.

VPC 네트워크로 이동

경로 탭에서 경로 만들기를 클릭합니다.

커스텀 경로 추가

gcloud

내부 부하 분산기에 커스텀 경로를 추가합니다.

export ROUTE=ROUTE_NAME
export ILB_FRONTEND=<ip_of_ilb_frontend>
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
--network=$VPC_NETWORK --priority=1001 \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=$ILB_FRONTEND \
--next-hop-ilb-region=$REGION

문제 해결

미리보기 또는 랭글러에서 연결 제한 시간 오류 가져오기

이그레스 제어를 설정할 때 Connection Timeout 오류가 반환될 수 있습니다.

이 문제를 해결하려면 다음과 같이 설정했는지 확인하세요.

인스턴스 그룹 상태 확인 실패

130.211.0.0/22,35.191.0.0/16 소스 범위에서 TCP, UDP, ICMP 트래픽을 허용하는 방화벽 규칙이 존재하는지 확인합니다.

Dataproc에서 실행하는 동안 파이프라인 실패

실행 시 공개 인터넷에 액세스하려면 Dataproc 클러스터와 동일한 리전 및 네트워크에서 Cloud NAT를 사용 설정합니다.

다음 단계