Looker(Google Cloud 핵심 서비스)를 통한 비공개 IP 네트워킹

비공개 IP만 사용하거나 비공개 IP와 공개 IP를 모두 사용하도록 Looker(Google Cloud 핵심 서비스) 인스턴스를 설정한 후에는 특정 Looker(Google Cloud 핵심 서비스) 기능을 사용하거나 외부 서비스나 인터넷과의 통신을 허용하거나 제한하도록 네트워크를 구성할 수 있습니다.

외부 도메인으로 이메일 전송 제한

기본적으로 비공개 IP만 사용하거나 비공개 및 공개 IP를 모두 사용하는 Looker(Google Cloud 핵심 서비스) 인스턴스는 외부 도메인에 이메일 전송을 허용합니다. Looker 사용자가 이메일을 전송할 수 있는 도메인을 제한하려면 이메일 도메인 허용 목록을 설정하면 됩니다.

비공개 IP Looker(Google Cloud 핵심 서비스) 인스턴스를 외부 서비스에 연결

비공개 IP만 사용하거나 비공개 및 공개 IP를 모두 사용하는 Looker(Google Cloud 핵심 서비스) 인스턴스를 인스턴스의 VPC 네트워크 외부의 서비스 또는 리소스에 연결하려면 추가 구성이 필요할 수 있습니다. 다음 섹션에서는 추가 구성 옵션을 설명합니다.

비공개 서비스 액세스를 사용하여 다른 VPC에 연결

내부 IP를 사용하여 Google 또는 타사에서 호스팅하는 다른 VPC의 서비스에 연결하려면 비공개 서비스 액세스를 사용하면 됩니다.

Looker(Google Cloud 핵심 서비스) 인스턴스 생성 중에 VPC를 Looker(Google Cloud 핵심 서비스) 서비스에 연결하기 위한 비공개 서비스 액세스 연결을 만들었습니다. 또한 트래픽을 중단하지 않고 기존 비공개 서비스 액세스 연결의 IP 할당을 업데이트할 수 있습니다.

비공개 서비스 액세스 연결을 설정하려면 다음 안내를 따릅니다.

  1. VPC 네트워크의 내부 IP 범위를 할당합니다.
  2. 할당된 IP 범위를 사용하여 VPC 네트워크와 서비스 제작자의 네트워크 사이에 비공개 연결을 설정합니다. 이 비공개 연결은 VPC와 다른 네트워크 간에 VPC 네트워크 피어링 연결을 설정합니다.

비공개 연결은 VPC 네트워크와 서비스 프로듀서 간의 일대일 관계입니다. 단일 서비스 프로듀서가 여러 서비스를 제공하는 경우 해당 제작자의 모든 서비스에 대해 하나의 비공개 연결만 있으면 됩니다.

온프레미스 리소스 또는 타사 서비스에 연결

다음 두 가지 옵션 중 하나를 사용하여 비공개 IP만 사용하거나 비공개 및 공개 IP를 모두 사용하여 온프레미스 리소스 또는 타사 서비스에 Looker(Google Cloud 핵심 서비스) 인스턴스를 연결할 수 있습니다.

어느 방법을 사용하든 다음을 수행해야 합니다.

  • 각 온프레미스 리소스의 Looker(Google Cloud 핵심 서비스) VPC에서 동적 경로를 구성합니다.
  • Looker(Google Cloud 핵심 서비스) VPC에 배포된 모든 Cloud Router에 Looker(Google Cloud 핵심 서비스) 비공개 서비스 액세스 서브넷커스텀 경로 공지를 설정합니다.
  • Looker(Google Cloud 핵심 서비스) 서브넷으로 트래픽을 허용하도록 온프레미스 방화벽을 업데이트합니다.
  • Looker(Google Cloud 핵심 서비스)가 모든 온프레미스 리소스에 연결할 수 있도록 하는 DNS 전달을 구성합니다.

Cloud Interconnect와 Cloud Router

다음 네트워크 다이어그램은 Cloud Interconnect와 Cloud Router가 Looker(Google Cloud 핵심 서비스) 서비스와 상호작용하여 온프레미스 네트워크에 연결하는 방법을 보여줍니다.

  1. 비공개 서비스 액세스는 VPC 피어링을 사용하여 Looker(Google Cloud 핵심 서비스) 서비스를 내부 IP 주소를 통해 VPC와 연결합니다.
  2. Cloud Router는 경계 게이트웨이 프로토콜(BGP)을 사용하여 비공개 IP 프리픽스를 공지하고 동종 앱으로부터 수신하는 BGP 공지를 기반으로 동적 경로를 프로그래밍합니다. Cloud Interconnect는 온프레미스 네트워크에 연결하는 데 사용됩니다.

Cloud VPN과 Cloud Router

비공개 및 공개 IP Looker(Google Cloud 핵심 서비스) 인스턴스를 만들고 HA VPN 및 Cloud Router를 사용하여 온프레미스 데이터베이스에 연결하는 방법 둘러보기는 하이브리드 네트워킹을 통해 Looker 연결 Codelab을 참조합니다.

다른 클라우드 서비스 제공업체에서 호스팅하는 데이터베이스에 연결

다른 클라우드 서비스 제공업체에서 호스팅하는 데이터베이스 또는 서비스에 대한 비공개 연결을 설정하려면 데이터 교환을 허용하기 위해 클라우드 서비스 제공업체로 트래픽을 라우팅하도록 Google Cloud 프로젝트를 구성해야 합니다. 다른 클라우드 서비스 제공업체와 Google Cloud의 연결 패턴 문서 페이지에서 클라우드 환경 연결에 대해 자세히 알아봅니다.

비공개 IP 인스턴스에 대한 액세스 권한 부여

비공개 IP만 사용 설정된 Looker(Google Cloud 핵심 서비스) 인스턴스와 VPC 외부 당사자가 상호 작용할 수 있도록 하려면 프록시 서버와 커스텀 도메인을 설정합니다. 이 섹션의 나머지 부분에서는 프록시 서버 설정 방법의 예시를 제공합니다.

시작하기 전에

프록시 서버를 설정하려면 먼저 최신 버전의 Google Cloud CLI를 설치하거나 업데이트해야 합니다.

프록시 서버 설정

다음 예시에서는 명령줄을 사용하여 비공개 IP 네트워크 연결이 사용 설정된 기존 Looker(Google Cloud 핵심 서비스) 인스턴스의 NGINX 프록시 서버를 설정하는 방법을 보여줍니다. NGINX 서버는 공개 IP 또는 비공개 IP(VPN 액세스 허용) 구성으로 인스턴스화할 수 있지만 이 예시에서는 공개 IP 구성을 보여줍니다.

리버스 프록시 서버로 구성할 수 있는 모든 웹 서버를 사용할 수 있습니다. 특별히 NGINX 서버를 설정할 필요는 없습니다.

  1. 커스텀 도메인을 만듭니다. 커스텀 도메인은 이 프로세스의 후반부에서 DNS 레코드를 설정할 때 프록시 서버의 외부 IP에 매핑됩니다.
  2. Cloud Shell을 엽니다.

    Cloud Shell로 이동

  3. 다음 명령어를 실행하여 VPC 네트워크에서 공개 IP가 사용 설정된 서브네트워크와 Ubuntu 18 NGINX VM을 만듭니다.

    • 변수를 설정합니다.

      PROJECT="PROJECT"
      NETWORK="NETWORK"
      SUBNETNAME="SUBNETNAME"
      IP_RANGE=IP_RANGE
      REGION="REGION"
      ZONE="ZONE"
      INSTANCE_NAME="INSTANCE_NAME"
      

      다음을 바꿉니다.

      • PROJECT: Looker(Google Cloud 핵심 서비스) 인스턴스를 만든 Google Cloud 프로젝트의 ID입니다.
      • NETWORK: Looker(Google Cloud 핵심 서비스) 인스턴스에 구성한 VPC 네트워크의 이름입니다.
      • SUBNETNAME: 이 절차에서 만든 새 서브넷 또는 VPC 네트워크의 모든 서브넷일 수 있습니다. Looker(Google Cloud 핵심 서비스) 인스턴스의 서브넷 이름과 일치하지 않아도 됩니다.
      • IP_RANGE: 충돌하지 않는 모든 범위입니다. 최소 /22을 사용합니다(예: 10.10.0.0/22).
      • REGION: 프록시 서버를 만들 리전입니다.
      • ZONE: 프록시 서버를 만들 영역입니다. gcloud compute zones list을 실행하여 사용 가능한 영역을 확인할 수 있습니다.
      • INSTANCE_NAME: 프록시 서버의 이름입니다.
    • 서브넷을 만듭니다(또는 자동 모드를 사용하여 VPC 네트워크를 만든 경우 VPC 네트워크를 만들 때 만든 서브넷을 사용할 수 있음).

      gcloud compute networks subnets create $SUBNETNAME --network=$NETWORK \
      --range=$IP_RANGE --region=$REGION --project=$PROJECT
      
    • 프록시 인스턴스를 만듭니다.

      INSTANCE_EXTERNAL_IP=$(gcloud compute instances create $INSTANCE_NAME \
      --project=$PROJECT --zone=$ZONE --network=$NETWORK --subnet=$SUBNETNAME \
      --format="json" | jq '.[].networkInterfaces[].accessConfigs[].natIP')
      
    • 프록시 인스턴스를 만든 후 다음 명령어를 실행하여 프록시 인스턴스의 공개 IP 주소를 생성합니다.

      echo $INSTANCE_EXTERNAL_IP
      

      이 절차의 뒷부분에서 외부 IP를 기록해 둡니다.

  4. 다음 명령어를 실행하여 포트 80, 443, 22(또는 NGINX가 수신 대기할 기타 포트)에서 인스턴스로 들어오는 트래픽을 허용하는 방화벽을 만듭니다.

    gcloud compute firewall-rules create managementnet-allow-http-https-ssh \
    --direction=INGRESS --priority=1000 --network=$NETWORK --action=ALLOW \
    --rules=tcp:80,tcp:443,tcp:22 --source-ranges=0.0.0.0/0 --project=$PROJECT
    
  5. 이 프로세스의 시작 부분에서 Looker(Google Cloud 핵심 서비스) 인스턴스에 설정한 커스텀 도메인을 사용하고 VM 생성 후에 출력된 NGINX VM의 공개 IP 주소를 가리키는 공개 DNS 레코드를 만듭니다.

  6. 공개 URL에 액세스하기 위해 타사 인증서를 만듭니다. 이 예시에서는 NGINX의 Let's Encrypt를 사용하여 Let's Encrypt 인증서를 생성하지만 모든 암호화 인증서를 사용할 수 있습니다.

    • NGINX VM에 연결합니다.

    • Let's Encrypt 도구를 설치합니다.

      sudo apt-get update
      sudo apt-get install certbot python3-certbot-nginx
      
    • nginx.config 파일에 액세스합니다.

      sudo vi /etc/nginx/sites-available/default
      
    • nginx.config 파일에서 기존 서버 구성을 대체하여 서버 및 포트 80을 수신 대기하도록 설정합니다.

      server {
        listen 80 default_server;
        listen [::]:80 default_server;
        root /var/www/html;
        server_name SERVER_NAME;
      }
      

      SERVER_NAME을 DNS 레코드 이름으로 바꿉니다.

    • NGINX를 새로고침합니다.

      sudo nginx -t && sudo nginx -s reload
      
    • 인증서를 생성합니다.

      sudo certbot --nginx -d SERVER_NAME
      

      SERVER_NAME을 DNS 레코드 이름으로 바꿉니다.

  7. nginx.config 파일에서 이전 단계의 서버 구성을 다음 서버 구성으로 바꿔 트래픽을 Looker(Google Cloud 핵심 서비스) 인스턴스로 전달합니다.

    server {
      listen 443 ssl http2;
      listen [::]:443 ssl http2;
      server_name SERVER_NAME
      ssl_certificate /etc/letsencrypt/live/SERVER_NAME/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/SERVER_NAME/privkey.pem;
      include /etc/letsencrypt/options-ssl-nginx.conf;
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
      location / {
        set $priv_dns "private.lookerapp";
        proxy_pass https://PRIVATE_IP_ADDRESS/$request_uri;
        proxy_set_header Host $server_name;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_ssl_protocols TLSv1.3;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect https://$priv_dns/ https://SERVER_NAME/;
      }
    }
    server {
      if ($host = SERVER_NAME) {
        return 301 https://$host$request_uri;
      }
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name SERVER_NAME;
      return 404;
    }
    

    다음을 바꿉니다.

    • PRIVATE_IP_ADDRESS: Google Cloud 콘솔의 인스턴스 세부정보 페이지에서 수 있는 Looker(Google Cloud 핵심 서비스) 인스턴스에 할당된 비공개 IP 주소입니다.
    • SERVER_NAME: DNS 레코드 이름입니다.
  8. nginx.config 파일의 유효성을 검사하고 새로고침합니다.

    sudo nginx -t && sudo nginx -s reload
    
  9. 구성이 검증되고 트래픽이 Looker(Google Cloud 핵심 서비스) 인스턴스로 라우팅되고커스텀 도메인 설정을 진행한 후에 인스턴스의 커스텀 도메인을승인된 리디렉션 URI OAuth 클라이언트의 섹션에 입력할 수 있습니다. 그런 다음 인스턴스 URL로 이동하여 인스턴스를 보고, 사용자 추가, Looker (Google Cloud 핵심 서비스)를 데이터베이스에 연결을 진행하고 인스턴스 설정을 계속할 수 있습니다.

    다음 단계