Looker PSC 사우스바운드 HTTPS 인터넷 NEG SMTP

1. 소개

이 Codelab에서는 서비스 소비자로서 Looker PSC에서 호출된 FQDN notifications-pa.googleapis.com이 포함된 내부 TCP 프록시 부하 분산기 및 인터넷 네트워크 엔드포인트 그룹 (NEG)을 사용하여 Looker PSC 서비스에 대한 남쪽 경계를 만듭니다.

Private Service Connect는 Google Cloud 네트워킹 기능으로, 소비자가 자신의 VPC 네트워크 내에서 관리형 서비스에 비공개로 액세스할 수 있게 해줍니다. 마찬가지로 이를 이용해 관리형 서비스 프로듀서는 이러한 서비스를 별도의 개별 VPC 네트워크에서 호스팅하고 소비자에게 비공개 연결을 제공할 수 있습니다. 예를 들어 Private Service Connect를 사용하여 Looker에 액세스할 때는 사용자가 서비스 소비자이고 Google이 서비스 프로듀서입니다(그림 1 참고).

그림 1.

145ea4672c3a3b14.png

역방향 PSC라고도 하는 남쪽 경계 액세스를 사용하면 소비자는 게시된 서비스를 생산자로 만들어 Looker가 VPC의 온프레미스 엔드포인트, 관리형 서비스 및 인터넷에 액세스할 수 있습니다. 그림 2에서 볼 수 있듯이 남쪽 바인딩은 Looker PSC가 배포된 위치와 관계없이 모든 리전에 배포할 수 있습니다.

그림 2.

259493afd914f68b.png

학습할 내용

  • 네트워크 요구사항
  • Private Service Connect 프로듀서 서비스 만들기
  • Looker에서 Private Service Connect 엔드포인트 만들기
  • Looker SMTP 서비스에 대한 연결 설정

필요한 항목

def88091b42bfe4d.png

2. 빌드할 항목

PSC (Private Service Connect)를 통해 서비스로 게시된 내부 TCP 프록시 부하 분산기 및 인터넷 NEG를 배포하기 위해 생산자 네트워크인 Looker-psc-demo를 설정합니다. 게시되면 다음 작업을 수행하여 생산자 서비스에 대한 액세스를 검증합니다.

  • Looker에서 프로듀서 서비스 연결과 연결된 PSC 엔드포인트 만들기
  • Looker Console을 사용하여 SMTP 메일 설정 만들기

3. 네트워크 요구사항

다음은 공급자 네트워크의 네트워크 요구사항을 분류한 내용입니다. 이 Codelab의 소비자는 Looker PSC 인스턴스입니다.

구성요소

설명

VPC (looker-psc-demo)

커스텀 모드 VPC

PSC NAT 서브넷

소비자 VPC 네트워크의 패킷은 소스 NAT (SNAT)를 사용하여 변환되므로 원래 소스 IP 주소가 공급자의 VPC 네트워크에 있는 NAT 서브넷의 소스 IP 주소로 변환됩니다.

PSC 전달 규칙 서브넷

리전 내부 TCP 프록시 부하 분산기의 IP 주소를 할당하는 데 사용됩니다.

PSC NEG 서브넷

네트워크 엔드포인트 그룹의 IP 주소를 할당하는 데 사용됩니다.

프록시 전용 서브넷

각 부하 분산기의 프록시 에는 내부 IP 주소가 할당됩니다. 프록시에서 백엔드 VM 또는 엔드포인트로 전송되는 패킷에는 프록시 전용 서브넷의 소스 IP 주소가 있습니다.

인터넷 NEG

부하 분산기의 외부 백엔드를 정의하는 데 사용되는 리소스입니다. 엔드포인트는 Cloud VPN 또는 Cloud Interconnect를 통해서만 연결할 수 없습니다.

백엔드 서비스

백엔드 서비스는 부하 분산기와 백엔드 리소스 사이의 브리지 역할을 합니다. 이 튜토리얼에서는 백엔드 서비스가 인터넷 NEG와 연결됩니다.

Cloud Router

Cloud NAT는 컨트롤 플레인 기능에는 Cloud Router를 사용하지만 BGP 세션 관리에는 사용하지 않습니다.

Cloud NAT

지역 인터넷 NEG는 인터넷 이그레스에 Cloud NAT를 활용합니다.

4. Codelab 토폴로지

a4eb7693cbdbdfd4.png

5. 설정 및 요구사항

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

55efc1aaa7a4d3ad.png

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

7ffe5cbb04455448.png

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

6. 시작하기 전에

API 사용 설정

Cloud Shell 내에서 프로젝트 ID가 설정되어 있는지 확인합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=[YOUR-REGION]
echo $project
echo $region

필요한 모든 서비스를 사용 설정합니다.

gcloud services enable compute.googleapis.com

7. 프로듀서 VPC 네트워크 만들기

VPC 네트워크

Cloud Shell에서 다음을 실행합니다.

gcloud compute networks create looker-psc-demo --subnet-mode custom

서브넷 만들기

PSC 서브넷은 네트워크 주소 변환을 위해 PSC 서비스 연결과 연결됩니다.

Cloud Shell 내에서 PSC NAT 서브넷을 만듭니다.

gcloud compute networks subnets create producer-psc-nat-subnet --network looker-psc-demo --range 172.16.10.0/28 --region $region --purpose=PRIVATE_SERVICE_CONNECT

Cloud Shell 내에서 제작자 전달 규칙 서브넷을 만듭니다.

gcloud compute networks subnets create producer-psc-fr-subnet --network looker-psc-demo --range 172.16.20.0/28 --region $region --enable-private-ip-google-access

Cloud Shell 내에서 생산자 리전별 프록시 전용 서브넷을 만듭니다.

gcloud compute networks subnets create $region-proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=$region \
  --network=looker-psc-demo \
  --range=10.10.10.0/24

Public NAT 게이트웨이 만들기

NAT 게이트웨이는 구성 옵션 –endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB를 사용하여 인터넷 이그레스에 리전 내부 TCP 프록시 부하 분산기에서 사용되므로 동일한 NATGW는 GCE/GKE 인터넷 이그레스를 지원하지 않습니다. GCE/GKE 인터넷 이그레스에 –endpoint-types=ENDPOINT_TYPE_VM을 사용하여 NAT GW를 추가로 배포합니다.

Cloud Shell 내에서 Cloud Router를 만듭니다.

gcloud compute routers create looker-psc-demo-cloud-router --network looker-psc-demo --region $region

Cloud Shell 내에서 TCP 프록시 부하 분산기에 인터넷 이그레스를 사용 설정하는 Cloud NAT 게이트웨이를 만듭니다.

gcloud compute routers nats create looker-psc-demo-natgw \
  --router=looker-psc-demo-cloud-router \
  --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
  --nat-custom-subnet-ip-ranges=$region-proxy-only-subnet \
  --auto-allocate-nat-external-ips \
  --region=$region

부하 분산기의 IP 주소 예약

Cloud Shell에서 부하 분산기의 내부 IP 주소를 예약합니다.

gcloud compute addresses create internet-neg-lb-ip \
  --region=$region \
  --subnet=producer-psc-fr-subnet

Cloud Shell 내에서 예약된 IP 주소를 확인합니다.

gcloud compute addresses describe internet-neg-lb-ip \
  --region=$region | grep -i address:

출력 예시:

user@cloudshell$ gcloud compute addresses describe internet-neg-lb-ip   --region=$region | grep -i address:
address: 172.16.20.2

인터넷 NEG 설정

인터넷 NEG를 만들고 –network-endpoint-type을 internet-fqdn-port(외부 백엔드에 연결할 수 있는 호스트 이름 및 포트)로 설정합니다.

Cloud Shell 내에서 github.com에 사용되는 인터넷 NEG를 만듭니다.

gcloud compute network-endpoint-groups create smtp-internet-neg \
    --network-endpoint-type=INTERNET_FQDN_PORT \
    --network=looker-psc-demo \
    --region=$region

Cloud Shell 내에서 인터넷 NEG smtp-internet-neg를 FQDN notifications-pa.googleapis.com 및 포트 443으로 업데이트합니다.

gcloud compute network-endpoint-groups update smtp-internet-neg \
    --add-endpoint="fqdn=notifications-pa.googleapis.com,port=443" \
    --region=$region

네트워크 방화벽 정책 및 방화벽 규칙 만들기

Cloud Shell에서 다음을 실행합니다.

gcloud compute network-firewall-policies create looker-psc-demo-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy looker-psc-demo-policy --network looker-psc-demo --name looker-psc-demo --global-firewall-policy

다음 방화벽 규칙은 PSC NAT 서브넷 범위의 트래픽이 네트워크의 모든 인스턴스로 전송되도록 허용합니다.

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy looker-psc-demo-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 172.16.10.0/28 --global-firewall-policy --layer4-configs=tcp

8. 프로듀서 서비스 만들기

부하 분산기 구성요소 만들기

Cloud Shell 내에서 다음을 수행합니다.

gcloud compute backend-services create producer-backend-svc  --protocol=tcp --region=$region --load-balancing-scheme=INTERNAL_MANAGED

gcloud compute backend-services add-backend producer-backend-svc --network-endpoint-group=smtp-internet-neg --network-endpoint-group-region=$region --region=$region

Cloud Shell에서 요청을 백엔드 서비스로 라우팅할 대상 TCP 프록시를 만듭니다.

gcloud compute target-tcp-proxies create producer-lb-tcp-proxy \
      --backend-service=producer-backend-svc  \
      --region=$region

다음 구문에서 전달 규칙 (내부 TCP 프록시 부하 분산기)을 만듭니다.

Cloud Shell에서 다음을 수행합니다.

gcloud compute forwarding-rules create producer-smtp-fr \
     --load-balancing-scheme=INTERNAL_MANAGED \
     --network-tier=PREMIUM \
     --network=looker-psc-demo \
     --subnet=producer-psc-fr-subnet \
     --address=internet-neg-lb-ip \
     --target-tcp-proxy=producer-lb-tcp-proxy \
     --target-tcp-proxy-region=$region \
     --region=$region \
     --ports=443

서비스 연결 만들기

Cloud Shell에서 서비스 연결 smtp-svc-attachment를 만듭니다.

gcloud compute service-attachments create smtp-svc-attachment --region=$region --producer-forwarding-rule=producer-smtp-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=producer-psc-nat-subnet

다음으로, 자체 링크 URI에 나열된 서비스 연결을 가져와 기록해 두고 Looker에서 PSC 엔드포인트를 구성합니다.

selfLink: projects/<your-project-id>/regions/<your-region>/serviceAttachments/github-svc-attachment-https

Cloud Shell에서 다음을 실행합니다.

gcloud compute service-attachments describe smtp-svc-attachment --region=$region

예:

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-10-04T14:56:50.409-07:00'
description: ''
enableProxyProtocol: false
fingerprint: KUPXTZjrGkw=
id: '8947818105173563981'
kind: compute#serviceAttachment
name: smtp-svc-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/producer-psc-nat-subnet
pscServiceAttachmentId:
  high: '23100082169578472'
  low: '8947818105173563981'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-smtp-fr

Cloud 콘솔에서 다음으로 이동합니다.

네트워크 서비스 → Private Service Connect → 게시된 서비스

b847b5ee22e3582e.png

b9a7d46c8dea4476.png

9. Looker에서 PSC 엔드포인트 연결 설정

다음 섹션에서는 단일 도메인에 대해 Cloud Shell에서 –psc-service-attachment 플래그를 사용하여 Producers Service 연결을 Looker Core PSC와 연결합니다.

Cloud Shell 내에서 환경에 맞게 다음 매개변수를 업데이트하여 psc 연결을 만듭니다.

  • INSTANCE_NAME: Looker (Google Cloud 핵심 서비스) 인스턴스의 이름입니다.
  • 도메인_1: notifications-pa.googleapis.com
  • SERVICE_ATTACHMENT_1: 서비스 첨부파일을 설명할 때 캡처된 URI, smtp-svc-attachment
  • 지역: Looker (Google Cloud 핵심 서비스) 인스턴스가 호스팅되는 리전입니다.

Cloud Shell 내에서 다음을 수행합니다.

gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

예:

gcloud looker instances update looker-psc-instance \
--psc-service-attachment  domain=notifications-pa.googleapis.com,attachment=projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment \
--region=$region

Cloud Shell 내에서 serviceAttachments connectionStatus가 '수락됨'인지 확인하고 Looker PSC INSTANCE_NAME으로 업데이트하세요.

gcloud looker instances describe [INSTANCE_NAME] --region=$region --format=json

예:

gcloud looker instances describe looker-psc-instance --region=$region --format=json

예:

{
...........................
    "serviceAttachments": [
      {
        "connectionStatus": "ACCEPTED",
        "localFqdn": "notifications-pa.googleapis.com",
        "targetServiceAttachmentUri": "projects/$project/regions/$region/serviceAttachments/smtp-svc-attachment"
      }
    ]
  },
  "pscEnabled": true,
  "state": "ACTIVE",
  "updateTime": "2024-10-04T22:02:31.445761128Z"
}

Cloud Console에서 PSC 엔드포인트 유효성 검사

Cloud 콘솔에서 PSC 연결 검증 가능

Cloud 콘솔에서 다음으로 이동합니다.

Looker → Looker 인스턴스 → 세부정보

2d4684d722d31e4b.png

a7593db722f86642.png

10. SMTP 연결 테스트

다음 단계에서는 Looker Console을 사용하여 SMTP 테스트 및 보고서를 생성하여 SMTP 연결을 확인합니다.

테스트 이메일

Looker는 기본 SMTP 서버인 notifications-pa.googleapis.com을 사용하여 이메일을 전송합니다. 이 경우 추가 단계가 필요하지 않습니다. 알림에 다른 SMTP 서버를 사용하려면 커스텀 SMTP 구성 섹션을 참고하세요.

Looker 콘솔을 열고 다음으로 이동합니다.

관리자 → 플랫폼 → SMTP → '테스트 이메일 보내기'를 선택합니다.

aacb31e399cec9b7.png

다음은 Looker에서 가져온 테스트 이메일입니다.

ff75669fb6993d58.png

생성된 보고서 이메일

다음으로 이동합니다.

탐색 → 시스템 활동 → API 사용 → API 쿼리 유형 → 실행

788f6d6d08f5f055.png

출력 예시:

cebecdf5f2e968d1.png

결과를 이메일로 보내려면 톱니바퀴 아이콘

c6ddb0b234b58ed4.png

'보내기'를 선택하면 새 창이 열립니다.

15b45c5c1bc1b09b.png

이메일 주소를 입력하고 보내기를 선택하세요.

86970bb94247ed62.png

다음은 Looker에서 가져온 테스트 이메일입니다.

c925c8917f8078b3.png

11. 맞춤 SMTP 구성

이 튜토리얼에서는 Looker SMTP 서버를 사용하여 인터넷 이그레스를 수행하는 FQDN notifications-pa.googleapis.com 및 Cloud NAT를 통해 이메일 알림을 전송합니다. 자체 SMTP 서버를 사용하려면 다음과 같이 수정된 새 서비스 첨부파일을 만드시기 바랍니다.

SMTP 서버 FQDN으로 인터넷 NEG를 업데이트합니다.

gcloud compute network-endpoint-groups update smtp-internet-neg \
    --add-endpoint="fqdn=<your SMTP FQDN>,port=443" \
    --region=$region

Looker PSC 인스턴스를 업데이트할 때 SMTP 도메인을 지정합니다.

  • INSTANCE_NAME: Looker(Google Cloud 핵심 서비스) 인스턴스의 이름입니다.
  • DOMAIN_1: <SMTP 서버 FQDN>
  • SERVICE_ATTACHMENT_1: 서비스 연결(smtp-svc-attachment)을 설명할 때 캡처된 URI입니다.
  • 지역: Looker (Google Cloud 핵심 서비스) 인스턴스가 호스팅되는 리전입니다.
gcloud looker instances update INSTANCE_NAME \
--psc-service-attachment  domain=DOMAIN_1,attachment=SERVICE_ATTACHMENT_URI_1 \
--region=REGION

다른 이메일 서비스를 사용하려면 맞춤 메일 설정 사용을 선택합니다.

a3fe7a0b66c80402.png

12. 삭제

단일 Cloud Shell 터미널에서 실험실 구성요소 삭제

gcloud compute service-attachments delete smtp-svc-attachment --region=$region -q

gcloud compute forwarding-rules delete producer-smtp-fr --region=$region -q

gcloud compute target-tcp-proxies delete producer-lb-tcp-proxy --region=$region -q

gcloud compute backend-services delete producer-backend-svc --region=$region -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy looker-psc-demo-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=looker-psc-demo-policy  --name=looker-psc-demo --global-firewall-policy -q

gcloud compute network-firewall-policies delete looker-psc-demo-policy --global -q

gcloud compute routers nats delete looker-psc-demo-natgw --router=looker-psc-demo-cloud-router --router-region=$region -q

gcloud compute routers delete looker-psc-demo-cloud-router --region=$region -q

gcloud compute network-endpoint-groups delete smtp-internet-neg --region=$region -q

gcloud compute addresses delete internet-neg-lb-ip --region=$region -q

gcloud compute networks subnets delete producer-psc-fr-subnet producer-psc-nat-subnet $region-proxy-only-subnet --region=$region -q

gcloud compute networks delete looker-psc-demo -q

13. 축하합니다

축하합니다. Private Service Connect에서 제공하는 Looker Console을 사용하여 Looker SMTP 서비스에 대한 연결을 구성하고 확인했습니다.

프로듀서 인프라를 만들고 프로듀서 서비스에 연결할 수 있는 인터넷 NEG, 프로듀서 서비스, Looker PSC 엔드포인트를 만드는 방법을 알아봤습니다.

Cosmopup은 Codelab이 멋지다고 생각합니다.

c911c127bffdee57.jpeg

다음 단계

다음 Codelab을 확인하세요.

추가 리소스 및 동영상

참조 문서