1. 소개
Looker(Google Cloud 핵심 서비스)는 Google Cloud 콘솔에서 Looker 인스턴스의 단순화되고 간소화된 프로비저닝, 구성, 관리를 제공합니다. 일부 인스턴스 관리 작업은 콘솔에서도 수행할 수 있습니다.
Looker(Google Cloud 핵심 서비스)에는 다음과 같은 세 가지 네트워크 구성이 있습니다.
- 공개: 네트워크 연결이 인터넷에 액세스할 수 있는 외부 IP 주소를 사용합니다.
- 비공개: 네트워크 연결은 Google에서 호스팅하는 내부 Virtual Private Cloud (VPC) IP 주소를 사용합니다.
- 공개 및 비공개: 네트워크 연결은 공개 IP 주소와 비공개 IP 주소를 모두 사용하며, 여기서 수신 트래픽은 공개 IP를 통해 라우팅되고 발신 트래픽은 비공개 IP를 통해 라우팅됩니다.
이 튜토리얼에서는 멀티 클라우드 및 온프레미스 연결에 대한 요구사항을 충족하기 위해 복제할 수 있는 HA VPN을 통한 온프렘 VPC에 대한 Looker 연결을 지원하기 위해 포괄적인 엔드 투 엔드 비공개 네트워크 를 배포합니다.
Looker(Google Cloud 핵심 서비스)는 다음 기준을 충족하는 인스턴스에 대해 비공개 IP를 지원합니다.
- 인스턴스 버전은 엔터프라이즈 또는 삽입이어야 합니다.
빌드할 항목
이 튜토리얼에서는 멀티 클라우드 및 온프레미스와 하이브리드 연결이 있는 독립형 VPC에서 포괄적인 비공개 Looker 네트워크 배포를 빌드합니다.
온프레미스 환경을 나타내는 on-prem-vpc
라는 VPC 네트워크를 설정합니다. 배포 시 온프렘 VPN이 존재하지 않는 대신 온프레미스 데이터 센터 또는 클라우드 제공업체에 대한 하이브리드 네트워킹이 사용됩니다.
다음은 튜토리얼의 주요 단계입니다.
- us-central1에서 독립형 VPC 만들기
- 비공개 서비스 액세스에 IP 서브넷 할당
- 독립형 VPC에 Looker 인스턴스 배포
- 온프렘 VPC 및 하이브리드 네트워킹 만들기
- BGP를 통해 Looker IP 범위 공지 및 유효성 검사
- Looker와 Postgresql 데이터 통신 통합 및 검증
그림 1
학습할 내용
- VPC 및 연결된 하이브리드 네트워킹을 만드는 방법
- 독립형 VPC에 Looker를 배포하는 방법
- 온프렘 VPC 및 관련 하이브리드 네트워킹을 만드는 방법
- HA VPN을 통해 on-prem-vpc를 analytics-vps에 연결
- 하이브리드 네트워킹을 통해 Looker 서브넷을 광고하는 방법
- 하이브리드 네트워킹 인프라를 모니터링하는 방법
- Postgresql 데이터베이스를 Looker Cloud Core와 통합하는 방법
필요한 항목
- Google Cloud 프로젝트
IAM 권한
2. 시작하기 전에
튜토리얼을 지원하도록 프로젝트 업데이트
이 튜토리얼에서는 $variables를 사용하여 Cloud Shell에서 gcloud 구성을 구현합니다.
Cloud Shell 내에서 다음을 수행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. VPC 설정
analytics-vpc 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks create analytics-vpc --project=$projectid --subnet-mode=custom
on-prem-vpc 만들기
Cloud Shell에서 다음을 실행합니다.
gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom
Postgresql 데이터베이스 서브넷 만들기
Cloud Shell 내에서 다음을 수행합니다.
gcloud compute networks subnets create database-subnet-us-central1 --project=$projectid --range=172.16.10.0/27 --network=on-prem-vpc --region=us-central1
Cloud Router 및 NAT 구성
데이터베이스 VM 인스턴스에 외부 IP 주소가 없으므로 소프트웨어 패키지 설치 튜토리얼에서는 Cloud NAT를 사용합니다.
Cloud Shell 내에서 Cloud Router를 만듭니다.
gcloud compute routers create on-prem-cr-us-central1-nat --network on-prem-vpc --region us-central1
Cloud Shell 내에서 NAT 게이트웨이를 만듭니다.
gcloud compute routers nats create on-prem-nat-us-central1 --router=on-prem-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
데이터베이스 테스트 인스턴스 만들기
Looker에 대한 연결을 테스트하고 검증하는 데 사용할 postgres-database 인스턴스를 만듭니다.
Cloud Shell 내에서 인스턴스를 만듭니다.
gcloud compute instances create postgres-database \
--project=$projectid \
--zone=us-central1-a \
--machine-type=e2-medium \
--subnet=database-subnet-us-central1 \
--no-address \
--image=projects/ubuntu-os-cloud/global/images/ubuntu-2304-lunar-amd64-v20230621 \
--metadata startup-script="#! /bin/bash
sudo apt-get update
sudo apt -y install postgresql postgresql-client postgresql-contrib -y"
방화벽 규칙 만들기
IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.
- IAP를 사용하여 액세스할 수 있도록 하려는 모든 VM 인스턴스에 적용됩니다.
- IP 범위 35.235.240.0/20에서 들어오는 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달에 사용하는 모든 IP 주소가 포함됩니다.
Cloud Shell 사용
gcloud compute firewall-rules create on-prem-ssh \
--network on-prem-vpc --allow tcp:22 --source-ranges=35.235.240.0/20
4. 비공개 서비스 액세스
비공개 서비스 액세스는 VPC 네트워크와 Google 또는 서드 파티가 소유한 네트워크 간의 비공개 연결입니다. Google 또는 서드 파티, 즉 서비스를 제공하는 법인은 서비스 프로듀서라고도 합니다. Looker Cloud Core는 서비스 프로듀서입니다.
비공개 연결을 사용하면 VPC 네트워크의 VM 인스턴스와 액세스하는 서비스가 내부 IP 주소를 사용하여 독점적으로 통신할 수 있습니다.
대략적으로 비공개 서비스 액세스를 사용하려면 VPC 네트워크에서 IP 주소 범위(CIDR 블록)를 할당한 다음 서비스 프로듀서에 대한 비공개 연결을 만들어야 합니다.
서비스에 IP 주소 범위 할당
비공개 연결을 만들기 전에 서비스 제작자의 VPC 네트워크에서 사용할 IPv4 주소 범위를 할당해야 합니다. 이렇게 하면 VPC 네트워크와 서비스 프로듀서 네트워크 간에 IP 주소가 충돌하지 않습니다.
VPC 네트워크에서 범위를 할당하면 서브넷 (기본 및 보조 범위)과 커스텀 정적 경로의 대상에는 해당 범위를 사용할 수 없습니다.
비공개 서비스 액세스에서 IPv6 주소 범위를 사용할 수 없습니다.
Google Cloud 콘솔에서 프로젝트의 Service Networking API를 사용 설정합니다. API를 사용 설정할 때는 API가 사용 설정되었는지 확인하기 위해 콘솔 페이지를 새로고침해야 할 수 있습니다.
IP 할당 만들기
주소 범위와 프리픽스 길이 (서브넷 마스크)를 지정하려면 주소와 프리픽스 길이 플래그를 사용하세요. 예를 들어 CIDR 블록 192.168.0.0/22를 할당하려면 주소에 192.168.0.0을 지정하고 프리픽스 길이에 22를 지정합니다.
Cloud Shell 내에서 Looker용 IP 할당을 만듭니다.
gcloud compute addresses create psa-range-looker \
--global \
--purpose=VPC_PEERING \
--addresses=192.168.0.0 \
--prefix-length=22 \
--description="psa range for looker" \
--network=analytics-vpc
Cloud Shell에서 IP 할당을 확인합니다.
gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
예:
userl@cloudshell$ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
NAME: psa-range-looker
ADDRESS/RANGE: 192.168.0.0/22
TYPE: INTERNAL
PURPOSE: VPC_PEERING
NETWORK: analytics-vpc
REGION:
SUBNET:
STATUS: RESERVED
비공개 연결 만들기
할당 범위를 만든 후 서비스 프로듀서인 Looker Cloud Core에 대한 비공개 연결을 만들 수 있습니다. Looker 인스턴스가 설정되면 비공개 연결이 VPC 네트워크와 서비스 제작자의 네트워크 간에 VPC 네트워크 피어링 연결을 설정합니다.
비공개 연결은 VPC 네트워크와 서비스 프로듀서 간의 일대일 관계입니다. 단일 서비스 프로듀서가 여러 서비스를 제공하는 경우 해당 제작자의 모든 서비스에 대해 하나의 비공개 연결만 있으면 됩니다.
여러 서비스 제작자에 연결하는 경우 서비스 제작자마다 고유한 할당을 사용합니다. 이렇게 하면 각 서비스 제작자의 경로 및 방화벽 규칙 같은 네트워크 설정을 관리하는 데 유용합니다.
Cloud Shell 내에서 비공개 연결을 만들고 작업 이름을 기록해 둡니다.
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range-looker \
--network=analytics-vpc
예:
user@cloudshell$ gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=psa-range-looker \
--network=analytics-vpc
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.
Cloud Shell에서 작업이 성공했는지 확인하고 OPERATION_NAME을 이전 단계에서 생성된 이름으로 바꿉니다.
gcloud services vpc-peerings operations describe \
--name=OPERATION_NAME
예:
user@cloudshell$ gcloud services vpc-peerings operations describe \
--name=operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.
5. Looker(Google Cloud 핵심 서비스) 인스턴스 만들기
시작하기 전에
Google Cloud 콘솔에서 프로젝트에 Looker API 를 사용 설정합니다. API를 사용 설정할 때는 API가 사용 설정되었는지 확인하기 위해 콘솔 페이지를 새로고침해야 할 수 있습니다.
인스턴스를 인증하고 액세스하도록 OAuth 클라이언트를 설정합니다.
다음 섹션에서는 OAuth 클라이언트 ID와 보안 비밀번호를 사용하여 Looker 인스턴스를 만들어야 합니다.
승인된 JavaScript 출처 및 리디렉션 URI는 필요하지 않습니다.
Cloud 콘솔 내에서 제공된 스크린샷을 기반으로 인스턴스를 만듭니다.
루커 → 인스턴스 만들기로 이동합니다.
이전에 만든 OAuth 클라이언트 ID 및 보안 비밀을 채웁니다.
만들기를 선택합니다.
인스턴스가 생성되는 동안 콘솔 내의 인스턴스 페이지로 리디렉션됩니다. 새 인스턴스의 상태를 보려면 페이지를 새로고침해야 할 수도 있습니다. Google Cloud 콘솔 메뉴에서 알림 아이콘을 클릭하여 인스턴스 생성 활동을 확인할 수도 있습니다. 인스턴스가 생성되는 동안 Google Cloud 콘솔 메뉴의 알림 아이콘은 로드 아이콘으로 둘러싸입니다.
Looker 인스턴스가 생성되면 인스턴스 URL이 생성됩니다. URL을 기록해 둡니다.
6. OAuth 2.0 클라이언트 ID 업데이트
다음 섹션에서는 인스턴스 URL에 /oauth2callback
를 추가하여 이전에 만든 OAuth 클라이언트 ID 승인된 리디렉션 URI를 업데이트해야 합니다.
완료되면 인스턴스 URL을 사용하여 Looker UI에 로그인할 수 있습니다.
Cloud 콘솔에서 API 및 서비스 → 사용자 인증 정보로 이동합니다.
Oauth 2.0 클라이언트 ID를 선택하고 인스턴스 URL을 업데이트합니다(아래 예 참고).
7. Looker 액세스 권한 확인
Cloud 콘솔에서 Looker로 이동하여 Looker UI를 열 인스턴스 URL을 선택합니다.
실행하면 아래 스크린샷에 따라 Looker Cloud Core에 대한 액세스 권한을 확인하는 방문 페이지가 표시됩니다.
8. 하이브리드 연결
다음 섹션에서는 경계 게이트웨이 프로토콜 (BGP)을 사용하여 Virtual Private Cloud (VPC)와 피어 네트워크 간에 경로를 동적으로 교환할 수 있는 Cloud Router를 만듭니다.
Cloud Router는 Cloud VPN 터널을 통해 BGP 세션을 설정하여 네트워크를 연결할 수 있습니다. Cloud Router는 새 서브넷 IP 주소 범위를 자동으로 학습하여 피어 네트워크에 알립니다.
이 튜토리얼에서는 analytics-vpc와 on-prem-vpc 간에 HA VPN을 배포하여 Looker에 대한 비공개 연결을 보여줍니다.
analytics-vpc의 HA VPN GW를 만듭니다.
각 게이트웨이가 생성되면 게이트웨이 인터페이스마다 외부 IPv4 주소 두 개가 자동으로 할당됩니다. 나중에 구성 단계에서 사용할 수 있도록 이 IP 주소를 기록해 둡니다.
Cloud Shell에서 HA VPN GW 만들기
gcloud compute vpn-gateways create analytics-vpn-gw \
--network=analytics-vpc\
--region=us-central1
on-prem-vpc의 HA VPN GW를 만듭니다.
각 게이트웨이가 생성되면 각 게이트웨이 인터페이스에 하나씩 두 개의 외부 IPv4 주소가 자동으로 할당됩니다. 나중에 구성 단계에서 사용할 수 있도록 이 IP 주소를 기록해 둡니다.
Cloud Shell 내에서 HA VPN GW를 만듭니다.
gcloud compute vpn-gateways create on-prem-vpn-gw \
--network=on-prem-vpc\
--region=us-central1
HA VPN GW 생성 확인
콘솔을 사용하여 하이브리드 연결 → VPN → Cloud VPN 게이트웨이로 이동합니다.
analytics-vpc를 위한 Cloud Router 만들기
Cloud Shell 내에서 us-central1에 Cloud Router를 만듭니다.
gcloud compute routers create analytics-cr-us-central1 \
--region=us-central1 \
--network=analytics-vpc\
--asn=65001
on-prem-vpc의 Cloud Router 만들기
Cloud Shell 내에서 us-central1에 Cloud Router를 만듭니다.
gcloud compute routers create on-prem-cr-us-central1 \
--region=us-central1 \
--network=on-prem-vpc \
--asn=65002
analytics-vpc용 VPN 터널 만들기
각 HA VPN 게이트웨이에 2개의 VPN 터널을 만듭니다.
VPN 터널0 만들기
Cloud Shell 내에서 tunnel0을 만듭니다.
gcloud compute vpn-tunnels create analytics-vpc-tunnel0 \
--peer-gcp-gateway on-prem-vpn-gw \
--region us-central1 \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router analytics-cr-us-central1 \
--vpn-gateway analytics-vpn-gw \
--interface 0
VPN 터널1 만들기
Cloud Shell에서 tunnel1을 만듭니다.
gcloud compute vpn-tunnels create analytics-vpc-tunnel1 \
--peer-gcp-gateway on-prem-vpn-gw \
--region us-central1 \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router analytics-cr-us-central1 \
--vpn-gateway analytics-vpn-gw \
--interface 1
on-prem-vpc용 VPN 터널 만들기
각 HA VPN 게이트웨이에 2개의 VPN 터널을 만듭니다.
VPN 터널0 만들기
Cloud Shell 내에서 tunnel0을 만듭니다.
gcloud compute vpn-tunnels create on-prem-tunnel0 \
--peer-gcp-gateway analytics-vpn-gw \
--region us-central1 \
--ike-version 2 \
--shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
--router on-prem-cr-us-central1 \
--vpn-gateway on-prem-vpn-gw \
--interface 0
VPN 터널1 만들기
Cloud Shell 내에서 터널1을 만듭니다.
gcloud compute vpn-tunnels create on-prem-tunnel1 \
--peer-gcp-gateway analytics-vpn-gw \
--region us-central1 \
--ike-version 2 \
--shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
--router on-prem-cr-us-central1 \
--vpn-gateway on-prem-vpn-gw \
--interface 1
VPN 터널 생성 검사
콘솔에서 하이브리드 연결 → VPN → 클라우드 VPN 터널로 이동합니다.
9. BGP 이웃 설정
BGP 세션 만들기
이 섹션에서는 Cloud Router 인터페이스와 BGP 피어를 구성합니다.
analytics-vpc를 위한 BGP 인터페이스 및 피어링 만들기
Cloud Shell에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface analytics-cr-us-central1 \
--interface-name if-tunnel0-to-onprem \
--ip-address 169.254.1.1 \
--mask-length 30 \
--vpn-tunnel analytics-vpc-tunnel0 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
--peer-name bgp-on-premises-tunnel0 \
--interface if-tunnel1-to-onprem \
--peer-ip-address 169.254.1.2 \
--peer-asn 65002 \
--region us-central1
Cloud Shell에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface analytics-cr-us-central1 \
--interface-name if-tunnel1-to-onprem \
--ip-address 169.254.2.1 \
--mask-length 30 \
--vpn-tunnel analytics-vpc-tunnel1 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
--peer-name bgp-on-premises-tunnel1 \
--interface if-tunnel2-to-onprem \
--peer-ip-address 169.254.2.2 \
--peer-asn 65002 \
--region us-central1
on-prem-vpc용 BGP 인터페이스 및 피어링 만들기
Cloud Shell에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface on-prem-cr-us-central1 \
--interface-name if-tunnel0-to-analytics-vpc \
--ip-address 169.254.1.2 \
--mask-length 30 \
--vpn-tunnel on-prem-tunnel0 \
--region us-central1
Cloud Shell 내에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
--peer-name bgp-analytics-vpc-tunnel0 \
--interface if-tunnel1-to-analytics-vpc \
--peer-ip-address 169.254.1.1 \
--peer-asn 65001 \
--region us-central1
Cloud Shell에서 BGP 인터페이스를 만듭니다.
gcloud compute routers add-interface on-prem-cr-us-central1 \
--interface-name if-tunnel1-to-analytics-vpc \
--ip-address 169.254.2.2 \
--mask-length 30 \
--vpn-tunnel on-prem-tunnel1 \
--region us-central1
Cloud Shell에서 BGP 피어를 만듭니다.
gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
--peer-name bgp-analytics-vpc-tunnel1\
--interface if-tunnel2-to-analytics-vpc \
--peer-ip-address 169.254.2.1 \
--peer-asn 65001 \
--region us-central1
하이브리드 연결 → VPN으로 이동하여 VPN 터널 세부정보를 확인합니다.
HA VPN을 통한 analytics-vpc 학습된 경로 검증
HA VPN 터널과 BGP 세션이 설정되므로 on-prem-vpc의 경로는 analytics-vpc에서 학습됩니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → analytics-vpc → 경로 → 지역 → us-central1 → 보기로 이동합니다.
analytics-vpc가 on-prem-vpc database-subnet-us-central1 172.16.10.0/27에서 경로를 학습했는지 확인
on-prem-vpc가 HA VPN을 통한 경로를 학습하지 않았는지 검증
analytics-vpc에는 서브넷이 없으므로 Cloud Router는 on-prem-vpc에 서브넷을 공지하지 않습니다. 콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-prem-vpc → ROUTES → REGION → us-central1 → VIEW로 이동합니다.
10. 온프레임에 Looker 서브넷 공지
서브넷이 VPC가 아닌 PSA에 할당되어 있으므로 Looker PSA(Private Services Access) 서브넷은 analytics-cr-us-central1 Cloud Router에서 자동으로 공지되지 않습니다.
온프레미스 환경에 공지되고 워크로드에서 Looker에 액세스하는 데 사용할 PSA 서브넷 192.168.0.0/22 (psa-range-looker)에 대한 analytics-cr-central1에서 커스텀 경로 공지를 만들어야 합니다.
콘솔에서 HYBRID CONNECTIVITY → CLOUD ROUTERS → analytics-cr-us-central1로 이동한 다음 EDIT을 선택합니다.
'공지된 경로' 섹션에서 커스텀 경로 만들기 옵션을 선택하고 아래 예시를 기반으로 필드를 업데이트한 후 완료를 선택하고 저장을 클릭합니다.
11. on-prem-vpc가 Looker 서브넷을 학습했는지 확인
이제 on-prem-vpc는 analytics-cr-us-central1에서 커스텀 경로 공지로 공지되었으므로 Looker PSA 서브넷에 액세스할 수 있습니다.
콘솔을 사용하여 VPC 네트워크 → VPC 네트워크 → on-prem-vpc → 경로 → REGION(지역) → us-central1 → 보기로 이동합니다.
analytics-vpc에서 공지된 Looker 경로를 확인합니다.
12. 현재 VPC 피어링 유효성 검사
Looker Cloud Core와 analytics-vpc 간의 연결은 BGP를 통해 학습된 커스텀 경로의 교환을 허용하는 VPC 피어링을 통해 이루어집니다. 튜토리얼에서 analytics-vpc는 온프렘-vpc에서 학습한 경로를 Looker에 게시해야 합니다. 이 기능을 사용 설정하려면 VPC 피어링을 업데이트하여 커스텀 경로를 내보내야 합니다.
현재 가져온 경로와 내보낸 경로의 유효성을 검사합니다.
VPC 네트워크 → VPC 네트워크 피어링 → servicenetworking-googleapis-com으로 이동합니다.
아래 스크린샷은 Google 관리 피어링된 VPC 네트워킹인 servicesnetworking에서 psa-range-looker를 가져오는 analytics-vpc를 자세히 보여줍니다.
내보낸 경로를 선택하면 피어링된 VPC 네트워크로 내보낸 경로가 표시되지 않습니다. 1) analytics-vpc에 서브넷이 구성되어 있지 않습니다. 2) 커스텀 경로 내보내기가 선택되지 않았습니다.
13. VPC 피어링 업데이트
VPC 네트워크 → VPC 네트워크 피어링 → servicenetworking-googleapis-com → 수정으로 이동합니다.
커스텀 경로 내보내기 → 저장을 선택합니다.
14. 업데이트된 VPC 피어링 검증
내보낸 경로의 유효성을 검사합니다.
VPC 네트워크 → VPC 네트워크 피어링 → servicenetworking-googleapis-com으로 이동합니다.
EXPORTED ROUTES(내보낸 경로)를 선택하면 analytics-vpc에서 Looker를 호스팅하는 피어링된 VPC 네트워킹으로 on-prem-vpc 경로(데이터베이스 서브넷 172.16.10.0/27)가 내보내진 것을 확인할 수 있습니다.
15. Looker Postgres 데이터베이스 만들기
다음 섹션에서는 Cloud Shell을 사용하여 postgres-database VM에 SSH를 실행합니다.
Cloud Shell 내에서 postgres-database 인스턴스에 SSH를 통해 연결합니다**.**
gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"
OS 내에서 postgres-database 인스턴스의 IP 주소 (ens4)를 식별하고 기록합니다.
ip a
예:
user@postgres-database:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
link/ether 42:01:ac:10:0a:02 brd ff:ff:ff:ff:ff:ff
altname enp0s4
inet 172.16.10.2/32 metric 100 scope global dynamic ens4
valid_lft 84592sec preferred_lft 84592sec
inet6 fe80::4001:acff:fe10:a02/64 scope link
valid_lft forever preferred_lft forever
OS 내에서 postgresql에 로그인합니다.
sudo -u postgres psql postgres
OS 내에서 비밀번호 메시지를 입력합니다.
\password postgres
OS 내에서 비밀번호를 postgres로 설정합니다 (동일한 비밀번호를 두 번 입력).
postgres
예:
user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.
postgres=# \password postgres
Enter new password for user "postgres":
Enter it again:
OS 내에서 postgres를 종료합니다.
\q
예:
postgres=# \q
user@postgres-database:~$
다음 섹션에서는 아래 스크린샷에 따라 IPv4 로컬 연결 아래의 pg_hba.conf 파일에 postgres-database 인스턴스 IP 주소와 Looker 비공개 Google 액세스 서브넷 (192.168.0.0/22)을 삽입합니다.
sudo nano /etc/postgresql/15/main/pg_hba.conf
다음 섹션에서 아래 스크린샷에 따라 모든 '*' IP 주소를 수신 대기하도록 postgresql.conf의 주석 처리를 삭제합니다.
sudo nano /etc/postgresql/15/main/postgresql.conf
변경 전:
변경 후:
OS 내에서 postgresql 서비스를 다시 시작합니다.
sudo service postgresql restart
OS 내에서 postgresql 상태가 활성 상태인지 확인합니다.
sudo service postgresql status
예:
OS 내에서 postgresql 상태가 활성인지 확인합니다.
user@postgres-database$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
Active: active (exited) since Sat 2023-07-01 23:40:59 UTC; 7s ago
Process: 4073 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 4073 (code=exited, status=0/SUCCESS)
CPU: 2ms
Jul 01 23:40:59 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Jul 01 23:40:59 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.
16. postgres 데이터베이스 만들기
다음 섹션에서는 온프레미스 연결에 대한 Looker의 유효성을 검사하는 데 사용되는 postgres_looker라는 postgres 데이터베이스와 looker_schema 스키마를 만듭니다.
OS 내에서 postgres에 로그인합니다.
sudo -u postgres psql postgres
OS 내에서 데이터베이스를 만듭니다.
create database postgres_looker;
OS 내에서 데이터베이스를 나열합니다.
\l
OS 내에서 비밀번호 룩어로 사용자 룩어를 만듭니다.
create user postgres_looker with password 'postgreslooker';
OS 내에서 데이터베이스에 연결합니다.
\c postgres_looker;
OS 내에서 스키마 looker-schema를 만들고 Cloud Shell 프롬프트로 종료합니다.
create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit
예:
user@postgres-database$ sudo -u postgres psql postgres
psql (15.3 (Ubuntu 15.3-0ubuntu0.23.04.1))
Type "help" for help.
postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
postgres_looker | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | | libc | =c/postgres +
| | | | | | | postgres=CTc/postgres
(4 rows)
postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
CREATE SCHEMA
postgres_looker=# create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
CREATE TABLE
postgres_looker=# exit
OS를 종료하여 Cloud Shell로 돌아갑니다.
\q
exit
17. on-prem-vpc에서 방화벽 만들기
다음 섹션에서는 Looker 서브넷이 postgres-database 인스턴스와 통신할 수 있도록 허용하는 로깅으로 인그레스 방화벽을 만듭니다.
Cloud Shell에서 on-prem-vpc 방화벽을 만듭니다.
gcloud compute --project=$projectid firewall-rules create looker-access-to-postgres --direction=INGRESS --priority=1000 --network=on-prem-vpc --action=ALLOW --rules=all --source-ranges=192.168.0.0/22 --enable-logging
18. analytics-vpc에서 비공개 DNS 만들기
Looker는 Google 관리 VPC에 배포되지만 서비스 네트워킹과의 피어링을 통해 analytics-vpc 비공개 DNS에 대한 액세스가 지원됩니다.
다음 섹션에서는 postgres-database 인스턴스 정규화된 도메인 이름 (postgres.analytics.com)
및 IP 주소)의 A 레코드로 구성된 analytics-vpc에 비공개 DNS 영역을 만듭니다.
Cloud Shell에서 비공개 영역 analytics.com을 만듭니다.
gcloud dns --project=$projectid managed-zones create gcp-private-zone --description="" --dns-name="analytics.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/analytics-vpc"
Cloud Shell에서 postgres-database 인스턴스의 IP 주소를 식별합니다.
gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:
예:
user@cloudshell$ gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:
networkIP: 172.16.10.2
Cloud Shell에서 A 레코드를 만들고 이전에 식별된 IP 주소를 추가합니다.
gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="your-postgres-database-ip"
예:
user@cloudshell$ gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="172.16.10.2"
NAME: postgres.analytics.com.
TYPE: A
TTL: 300
DATA: 172.16.10.2
Cloud Shell에서 dns-suffix analytics.com을 서비스 네트워킹에 피어링하여 Looker가 analytics-vpc 비공개 영역에 액세스할 수 있도록 합니다.
gcloud services peered-dns-domains create looker-com --network=analytics-vpc --service=servicenetworking.googleapis.com --dns-suffix=analytics.com.
19. Postgres postgres-database와 Looker 통합
다음 섹션에서는 Cloud 콘솔을 사용하여 온프레미스 postgres-database 인스턴스에 대한 데이터베이스 연결을 만듭니다.
Cloud 콘솔에서 Looker로 이동하여 Looker UI를 여는 인스턴스 URL을 선택합니다.
실행이 완료되면 아래 스크린샷과 같이 방문 페이지가 표시됩니다.
관리 → 데이터베이스 → 연결 → 연결 추가로 이동합니다.
아래 스크린샷에 따라 연결 세부정보를 작성한 다음 연결을 선택합니다.
이제 연결이 완료되었습니다.
20. Looker 연결 확인
다음 섹션에서는 Looker 'test' 작업과 TCPDUMP를 사용하여 온프레미스 VPC의 postgres 데이터베이스에 대한 Looker 연결을 확인하는 방법을 알아봅니다.
세션의 시간이 초과된 경우 Cloud Shell에서 postgres-database에 로그인합니다.
Cloud Shell 내에서 다음을 수행합니다.
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"
OS에서 psa-range-looker 서브넷 192.168.0.0/22로 TCPDUMP 필터를 만듭니다.
sudo tcpdump -i any net 192.168.0.0/22 -nn
데이터 연결 관리 → 데이터베이스 → 연결 → 선택 → 테스트로 이동합니다.
테스트를 선택하면 Looker가 아래와 같이 postgres 데이터베이스에 연결됩니다.
OS 터미널로 돌아가 TCPDUMP에서 psc-range-looker가 온프레미스 postgres-database 인스턴스에 연결하고 있는지 확인합니다.
PSA 범위의 모든 IP가 Looker에서 표시된다는 메모를 추가합니다.
user@postgres-database$ sudo tcpdump -i any net 192.168.0.0/22 -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
00:16:55.121631 ens4 In IP 192.168.1.24.46892 > 172.16.10.2.5432: Flags [S], seq 2221858189, win 42600, options [mss 1366,sackOK,TS val 4045928414 ecr 0,nop,wscale 7], length 0
00:16:55.121683 ens4 Out IP 172.16.10.2.5432 > 192.168.1.24.46892: Flags [S.], seq 1464964586, ack 2221858190, win 64768, options [mss 1420,sackOK,TS val 368503074 ecr 4045928414,nop,wscale 7], length 0
21. 보안 권장사항
Looker 및 Postgres 데이터베이스 보안과 관련된 보안 권장사항 및 권장사항은 거의 없습니다. 예를 들면 다음과 같습니다.
- Looker가 필요한 기능을 계속 수행할 수 있도록 Looker에 대한 최소 권한 데이터베이스 계정 권한을 설정합니다.
- 클라이언트와 Looker UI 간의 전송 중인 데이터 및 Looker와 데이터베이스 간의 전송 중인 데이터가 TLS 1.2 이상을 사용하여 암호화됨
- 비활성 데이터는 기본적으로 암호화되며 고객은 Looker 인스턴스(https://cloud.google.com/looker/docs/looker-core-cmek) 및 Postgres(https://cloud.google.com/sql/docs/postgres/configure-cmek)에 CMEK를 활용할 수도 있습니다.
- Looker 액세스 제어 - Looker 관리자는 콘텐츠 액세스, 데이터 액세스, 기능 액세스 권한을 부여하여 사용자 또는 사용자 그룹이 Looker에서 보고 수행할 수 있는 작업을 제어할 수 있습니다. 이러한 옵션을 사용하면 Looker 관리자가 모델 및 권한 세트를 포함하는 특정 역할을 정의하고 데이터에 대한 세분화된 액세스 제어를 만들 수 있습니다.
- Looker는 누가 언제 어디에서 무엇을 했는지 파악하는 감사 로그 및 데이터 액세스 로그를 모두 지원합니다. 감사 로그는 기본적으로 사용 설정되어 있지만 데이터 액세스 로그는 명시적으로 사용 설정해야 합니다.
- 현재 VPC-SC는 비공개 IP로만 구성된 엔터프라이즈 및 삽입 인스턴스를 지원합니다.
22. 삭제
Looker Cloud Core 인스턴스를 삭제하고 다음으로 이동합니다.
LOOKER → looker-tutorial → 삭제
Cloud Shell에서 튜토리얼 구성요소를 삭제합니다.
gcloud compute vpn-tunnels delete analytics-vpc-tunnel0 analytics-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet
gcloud compute vpn-gateways delete analytics-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet
gcloud compute routers delete analytics-cr-us-central1 on-prem-cr-us-central1 on-prem-cr-us-central1-nat --region=us-central1 --quiet
gcloud compute instances delete postgres-database --zone=us-central1-a --quiet
gcloud compute networks subnets delete database-subnet-us-central1 --region=us-central1 --quiet
gcloud compute firewall-rules delete looker-access-to-postgres on-prem-ssh --quiet
gcloud dns record-sets delete postgres.analytics.com. --type=A --zone=gcp-private-zone
gcloud dns managed-zones delete gcp-private-zone
gcloud compute networks delete on-prem-vpc --quiet
gcloud compute addresses delete psa-range-looker --global --quiet
gcloud compute networks delete analytics-vpc --quiet
23. 축하합니다
축하합니다. 하이브리드 네트워킹을 통해 Looker 연결을 구성하고 온프레미스 및 멀티 클라우드 환경 간에 데이터 통신을 지원하도록 확인했습니다.
또한 postgres-database 인스턴스에서 Lookers Connect '테스트' 도구와 TCPDUMP를 사용하여 postgres-데이터베이스에 대한 Looker Cloud Core 연결을 성공적으로 테스트할 수 있었습니다.
Cosmopup은 튜토리얼이 멋지다고 생각합니다.