GCP에서 VPN 접속

GCP에서 VPN 접속 (VPN access from GCP)

HashiCorp Cloud Platform(HCP)과 기본(native) 연결을 지원하지 않는 클라우드 프로바이더에서 실행 중인 서비스를 어떻게 연결할 수 있는지 보여주는 예시 문서예요. 이 문서의 개념과 단계는 네트워크 토폴로지와 구성에 대한 고급 이해를 전제로 합니다.

HCP는 여러 공용 클라우드 프로바이더와 기본 연결 솔루션을 지원해요. 지원되는 클라우드 프로바이더를 통해, 트랜짓 네트워크(transit network)라는 개념을 이용해서 HCP가 아직 기본 지원하지 않는 프로바이더의 워크로드까지 지원하는 공통 하이브리드 클라우드 네트워킹 모델을 활성화할 수 있습니다. 트랜짓 네트워크는 여러 네트워크 사이의 다리 역할을 해요. 흔히 서로 다른 VLAN이나 VXLAN 네트워크를 연결하는 데 사용됩니다.

여러 공용 클라우드 프로바이더에서 워크로드를 실행할 때는 지원되는 네트워킹 서비스를 통해 공용 클라우드 프로바이더를 연결해 이 모델을 확장할 수 있어요.

Google Cloud Platform에서 실행되는 컴퓨트 리소스는 GCP와 트랜짓 AWS VPC 사이에 VPN을 만들고, HCP HashiCorp Virtual Network(HVN)를 트랜짓 AWS VPC와 연결하고, 네트워크 사이의 트래픽을 지시하는 필요한 라우팅을 구성해서, HCP Vault Dedicated 클러스터 같은 프라이빗 HCP 리소스에 접근할 수 있어요.

이 문서를 따라 하면 AWS와 GCP 사이에 Virtual Private Network(VPN)를 만들고, HCP와 AWS 사이에 트랜짓 게이트웨이 연결을 만들고, 세 플랫폼 사이의 라우팅을 구성하게 됩니다. 네트워크 연결이 완료되면 HCP Vault Dedicated 프라이빗 인스턴스를 배포하고 GCP VM 인스턴스에서 접근해 연결을 검증해요.

이 페이지의 지시사항 대부분은 AWS, GCP, HCP의 사용자 인터페이스(UI)를 따라 진행되요.

참고 (Note): GCP, AWS, HCP 모두 테스트 계정으로 이 문서를 따라 하는 것을 권장해요. 기존 서비스의 연결에 영향을 줄 수 있는 변경이 이뤄지거든요. 프로덕션 환경에서 구성 변경이 지원될지 반드시 검증하세요.

출처: 문서

본문

사전 요구 사항 (Prerequisites)

  • 기본 구성으로 된 AWS와 GCP 계정
  • HCP 계정
  • HCP HVN, AWS, GCP VPC 간에 겹치지 않는 네트워크 CIDR 범위

다음 리소스를 만들어요.

  • HVN, HCP Vault Dedicated 클러스터, 트랜짓 게이트웨이 어태치먼트 생성
  • HVN 라우트 테이블 갱신
  • 트랜짓 게이트웨이, 커스터머 게이트웨이, 사이트 투 사이트 VPN, 공유 리소스 액세스 매니저 생성
  • 트랜짓 게이트웨이 연결 수락
  • 클라우드 라우터, VPN, VM 인스턴스 생성

GCP VPN 만들기 (Create GCP VPN)

VPN 터널의 GCP 쪽 구성을 시작해요. GCP 쪽에서 충분한 정보를 얻으면 AWS 쪽 VPN을 구성한 다음, 다시 돌아와 GCP에서 설정을 마무리합니다.

  1. 웹 브라우저를 열고 GCP 계정에 로그인해요.
  2. Google Cloud 콘솔에서 햄버거 메뉴를 클릭하고 Networking >> Hybrid Connectivity >> VPN으로 이동해요.
  3. Create VPN Connection을 클릭해요.
  4. High-availability (HA) VPN을 선택하고 Continue를 클릭해요.
  5. VPN Gateway name: gcp-vpn-to-aws
  6. Network: default 선택
  7. Region: us-east1 선택
  8. VPN tunnel inner IP stack type: IPv4 (single stack) 선택
  9. Create & Continue를 클릭해요.
  10. 새 VPN 게이트웨이에 제공된 IP 주소를 기록해 두세요.
  11. GCP 계정에 로그인한 상태를 유지해요. 구성 계속하려면 이 페이지로 돌아오게 됩니다.

AWS VPN 만들기 (Create AWS VPN)

이제 GCP VPN 게이트웨이의 IP 주소가 있으니 AWS 쪽 VPN 설정을 시작할 수 있어요.

  1. 새 브라우저(또는 브라우저 탭)를 열고 AWS 계정에 로그인해요.
  2. us-east-1(N.Virginia) 지역인지 확인해요.
  3. AWS 콘솔에서 Services 메뉴를 클릭하고 Networking & Content Delivery >> VPC로 이동해요.
  4. 왼쪽 탐색 메뉴에서 Customer gateways를 클릭해요.
  5. Name tag - optional: cgw-in-gcp
  6. BGP ASN: 65100
  7. IP address: GCP VPN 게이트웨이의 interface 0 IP 주소를 입력해요.
  8. Create customer gateway를 클릭해요.
  9. 왼쪽 탐색 메뉴에서 Transit gateways를 클릭해요.
  10. Name tag: tgw-for-hcp
  11. Amazon side Autonomous System Number (ASN): 64512
  12. Create transit gateway를 클릭해요.
  13. 왼쪽 탐색 메뉴에서 Site-to-Site VPN connections를 클릭해요.
  14. Name tag - optional: aws-vpn-to-gcp
  15. Target gateway type: Transit gateway 선택
  16. Transit gateway: tgw-for-hcp 선택
  17. Customer gateway: Existing 선택
  18. Customer gateway ID: cgw-in-gcp 선택
  19. Create VPN connection을 클릭해요.
  20. State가 Pending에서 Available로 바뀔 때까지 기다린 다음 aws-vpn-to-gcp를 선택해요.
  21. Download configuration을 클릭해요.
  22. Vendor 드롭다운 메뉴에서 Generic을 선택하고 Download를 클릭해요. 이 구성 파일에 제공된 값들을 GCP 쪽 VPN·라우팅 설정을 완료하는 데 사용하게 됩니다.

AWS 구성 파일 검토하기 (Review the AWS configuration file)

VPN 설정을 완료하려면 다운로드한 구성 파일에서 관련 VPN 구성을 가져와야 해요.

  1. 선호하는 텍스트 편집기에서 구성 파일을 열어요.
  2. IPSec Tunnel #1 섹션을 찾아요.
  3. 섹션 #1: Internet Key Exchange Configuration에서 Pre-Shared Key를 기록해 두세요.
#1: Internet Key Exchange Configuration

...snip...

  - IKE version              : IKEv1
  - Authentication Method    : Pre-Shared Key
  - Pre-Shared Key           : CJ.ykyfeSOr61oWvjk2C5dbecuAW2wVs
  - Authentication Algorithm : sha1
  - Encryption Algorithm     : aes-128-cbc
  - Lifetime                 : 28800 seconds
  - Phase 1 Negotiation Mode : main
  - Diffie-Hellman           : Group 2
  1. 섹션 #3: Tunnel Interface Configuration을 찾아요.
  2. Outside IP Addresses와 Inside IP Addresses를 기록해 두세요.
#3: Tunnel Interface Configuration

...snip...

Outside IP Addresses:
  - Customer Gateway                : 35.242.15.66
  - Virtual Private Gateway         : 3.212.197.15

Inside IP Addresses
  - Customer Gateway                   : 169.254.221.74/30
  - Virtual Private Gateway            : 169.254.221.73/30

Configure your tunnel to fragment at the optimal size:
  - Tunnel interface MTU     : 1436 bytes
  1. AWS 계정에 로그인한 상태를 유지해요. 구성 계속하려면 이 페이지로 돌아오게 됩니다.

GCP와 AWS 사이의 VPN 연결 (Connect VPN between GCP and AWS)

  1. GCP 콘솔로 돌아가요.

참고 (Note): GCP VPN 만들기 섹션으로 돌아가야 해요.

  1. Peer VPN gateway 아래에서 On-prem or Non Google Cloud를 선택해요.
  2. Peer VPN gateway name 드롭다운 메뉴에서 Create new peer VPN gateway를 선택해요.
  3. Name: cgw-in-aws
  4. Interfaces: one interface 선택
  5. Interface 0 IP address: 다운로드한 AWS 구성 파일의 Virtual Private Gateway outside IP 주소를 입력해요. 위 샘플 구성을 사용하면 3.212.197.15를 입력하면 돼요.
  6. Create를 클릭해요. Create a VPN 마법사로 돌아오며, Create a single VPN tunnel이 자동으로 선택되어 있어요.
  7. Routing options 아래에서 Cloud Router 드롭다운 메뉴를 클릭하고 Create new router를 선택해요.
  8. Name: gcp-default-cr
  9. Google ASN: 65100

참고 (Note): 이 예시에서는 **Advertise all subnets visible to the Cloud Router (Default)**를 사용해요. 프로덕션 구성에서는 모든 라우트를 광고할지, 커스텀 라우트를 만들지를 조직의 네트워크·보안 관행에 따라 선택하세요.

  1. Create를 클릭해요. Create a VPN 마법사로 돌아옵니다.
  2. Name 텍스트 박스에 aws-vpn-tunnel-1을 입력해요.
  3. IKE pre-shared key 텍스트 박스에 AWS 구성 파일의 pre-shared key를 입력해요. 위 샘플 구성을 사용하면 CJ.ykyfeSOr61oWvjk2C5dbecuAW2wVs를 입력하면 돼요.
  4. Create & continue를 클릭해요.
  5. Configure BGP sessions 아래에서 Configure BGP session을 클릭해요.
  6. Name: aws-bgp-peer
  7. Peer ASN: 64512
  8. Save and continue를 클릭해요. Create a VPN 마법사로 돌아옵니다.
  9. Save BGP configuration을 클릭해요.
  10. Summary and reminder 아래에서 OK를 클릭해요.
  11. Cloud VPN Tunnels 탭에서 aws-vpn-tunnel-1을 클릭해요.
  12. Edit BGP session을 클릭해요.
  13. Cloud Router BGP IPv4 address를 다운로드한 AWS 구성 파일의 Customer Gateway inside IP 주소로 바꿔요. 위 샘플 구성을 사용하면 Customer Gateway의 Inside IP Address인 169.254.221.74를 입력하면 돼요.
  14. BGP peer Router BGP IPv4 address를 다운로드한 AWS 구성 파일의 Virtual Private Gateway inside IP 주소로 바꿔요. 위 샘플 구성을 사용하면 Virtual Private Gateway의 Inside IP Address인 169.254.221.73을 입력하면 돼요.
  15. Save and continue를 클릭해요.
  16. BPG session 상태가 BGP established로 바뀌어야 해요.

팁 (Tip): 상태가 바뀌지 않으면 브라우저 페이지(또는 브라우저 탭)를 새로고침해 보세요.

HCP 리소스 만들고 연결하기 (Create and connect HCP resources)

이제 GCP 계정에서 트랜짓 네트워크로 쓰는 AWS 계정으로의 연결을 확립했으니, HashiCorp Virtual Network(HVN)를 배포·구성하고 HVN을 AWS 트랜짓 게이트웨이에 연결해요.

HVN과 트랜짓 게이트웨이 어태치먼트 만들기

참고 (Note): 각 HVN은 사용자가 선택한 지역에 기반한 프로젝트에 만들어져요. HVN이 HCP Vault Dedicated 클러스터 같은 다른 HCP 리소스를 호스팅합니다.

  1. 새 브라우저(또는 브라우저 탭)를 열고 HCP 계정에 로그인해요.
  2. 왼쪽 탐색 메뉴에서 HashiCorp Virtual Networks를 클릭해요.
  3. Network name: hvn
  4. Provider: Amazon Web Services 선택
  5. Region selection: N. Virginia (us-east-1) 선택
  6. Create network를 클릭해요. HVN이 Stable 상태가 될 때까지 기다렸다가 진행해요.
  7. 왼쪽 탐색 메뉴에서 Transit gateway attachments를 클릭해요.
  8. Create attachment를 클릭하고 Web console 탭을 클릭해요.
  9. Attachment ID 필드에 tgw-attach-hcp를 입력해요.
  10. AWS Account ID를 복사해요.
  11. HCP 계정에 로그인한 상태를 유지해요. 구성 계속하려면 이 페이지로 돌아오게 됩니다.

AWS 리소스 공유 만들기 (Create AWS resource share)

  1. AWS 콘솔로 돌아가 Resource Access Manager로 이동해요.
  2. Create a resource share를 클릭해요.
  3. Name 필드에 hcp-tgw-ram을 입력해요.
  4. Resources - optional 아래에서 Transit Gateways를 선택해요.
  5. tgw-for-hcp 체크박스를 클릭해요.
  6. Next를 클릭하고 Next를 다시 클릭해요.
  7. Principals 아래에서 HCP 포털에서 복사한 AWS 계정 ID를 붙여 넣고 Add를 클릭해요.
  8. Next를 클릭해요.
  9. Create resource share를 클릭해요.
  10. 리소스 공유의 ARN을 복사해요.
  11. VPC 콘솔로 돌아가 왼쪽 탐색 메뉴에서 Transit gateways를 클릭해요.
  12. tgw-for-hcp의 트랜짓 게이트웨이 ID를 복사해요.

트랜짓 게이트웨이 어태치먼트 완료하기 (Complete transit gateway attachment)

  1. HCP 포털로 돌아가요.
  2. Transit gateway ID: 이 튜토리얼에서 앞서 만든 트랜짓 게이트웨이의 ID
  3. Resource share ARN: 이 튜토리얼에서 앞서 만든 리소스 공유의 ARN
  4. Create attachment를 클릭해요.
  5. AWS VPC 콘솔로 돌아가 왼쪽 탐색 메뉴에서 Transit gateway attachments를 클릭해요.
  6. 리소스 유형이 VPC인 어태치먼트의 체크박스를 클릭해요. Pending Acceptance 상태에 있어야 해요.
  7. Actions 드롭다운 메뉴를 클릭하고 Accept transit gateway attachment를 선택해요.
  8. Accept를 클릭해요.
  9. 상태가 Pending에서 Available로 바뀔 때까지 기다려요.

HCP 라우트 테이블 갱신하기 (Update HCP route table)

  1. HCP 포털로 다시 전환해요.
  2. 왼쪽 탐색 메뉴에서 Route table을 클릭해요.
  3. Route ID: route-aws-vpc
  4. Destinations: AWS VPC의 서브넷을 입력해요. (AWS 콘솔에서 Your VPCs를 클릭하면 가져올 수 있어요)
  5. Target: tgw-attach-hcp 선택
  6. Create route를 클릭해요.
  7. Route ID: route-gcp-vpc
  8. Destinations: GCP VPC의 서브넷을 입력해요. (GCP 콘솔에서 VPC network >> VPC networks를 클릭하면 가져올 수 있어요)
  9. Target: tgw-attach-hcp 선택
  10. Create route를 클릭해요.

참고 (Note): 단순함을 위해 AWS와 GCP의 전체 VPC에 대한 라우트를 만들었어요. 프로덕션 구성에서는 전체 VPC 또는 특정 서브넷에 대한 라우트를 만들지를 조직의 네트워크·보안 관행에 따라 선택하세요.

네트워킹 구성 검증하기 (Validate networking configuration)

AWS, GCP, HCP 계정에 필요한 리소스를 모두 만들었어요. 구성을 검증하려면 이제 프라이빗 Vault Dedicated 클러스터를 배포하고 GCP에 VM 인스턴스를 만들어 AWS 트랜짓 VPC를 가로질러 접근을 테스트해요.

  1. HCP 포털에 로그인한 상태에서 Back to Networks를 클릭하고 왼쪽 탐색 메뉴에서 Vault를 클릭해요.
  2. Start from scratch 아래에서 Create cluster를 클릭해요.
  3. 모든 기본값을 유지하고 AWS 트랜짓 게이트웨이에 연결한 HVN이 선택됐는지 확인해요.
  4. Allow public connections from outside your selected network 슬라이더를 클릭해 공개 접근을 비활성화해요.
  5. Create cluster를 클릭해요.
  6. 클러스터가 생성되는 동안 GCP 콘솔로 다시 전환해요.
  7. 햄버거 메뉴를 클릭하고 Compute Engine >> VM instances로 이동해요.
  8. Name: test-hcp
  9. Region: us-east1 선택
  10. 다른 기본값은 모두 유지하고 Create를 클릭해요.
  11. 인스턴스가 사용 가능해지면 SSH를 클릭해요. 새 창이 열리고 VM에 로그인됩니다.
  12. HCP 포털에서 Generate token을 클릭한 다음 Copy를 클릭해 토큰을 복사해요.
  13. GCP VM 인스턴스의 SSH 세션에서 VAULT_TOKEN이라는 환경 변수를 만들어요.
$ export VAULT_TOKEN=<copied-token-value>
  1. HCP 포털의 Cluster URLs 아래에서 Private를 클릭해 프라이빗 Vault Dedicated 주소를 복사해요.
  2. GCP VM 인스턴스의 SSH 세션에서 VAULT_ADDR이라는 환경 변수를 만들어요.
$ export VAULT_ADDR=<copied-address-value>
  1. 값이 admin인 VAULT_NAMESPACE 환경 변수를 만들어요.
$ export VAULT_NAMESPACE=admin
  1. cURL을 사용해 토큰 정보를 조회해서 프라이빗 Vault Dedicated 클러스터에 대한 연결을 검증해요.
$ curl \
 --header "X-Vault-Token: $VAULT_TOKEN" \
 --header "X-Vault-Namespace: $VAULT_NAMESPACE" \
 --request LIST \
 $VAULT_ADDR/v1/auth/token/accessors
  1. 조회는 제공된 토큰에 대한 정보를 돌려줘요.

예시 출력:

$ curl \
 --header "X-Vault-Token: $VAULT_TOKEN" \
 --header "X-Vault-Namespace: $VAULT_NAMESPACE" \
 --request LIST \
 $VAULT_ADDR/v1/auth/token/accessors

{"request_id":"36116197-e3f1-17c0-1b63-b7b0cb1c7f9a","lease_id":"","renewable":false,"lease_duration":0,"data":{"keys":["7G9uBnJW08zEwjnQBs73b0q8.BZD6Q"]},"wrap_info":null,"warnings":null,"auth":null}

GCP VM 인스턴스에서 트랜짓 AWS VPC를 통해 프라이빗 HCP Vault Dedicated 클러스터로 요청을 성공적으로 보냈어요.

정리하기 (Cleanup)

불필요한 요금을 피하려면 이 튜토리얼에서 만든 리소스를 정리해야 해요.

GCP

  • test-hcp VM 인스턴스 삭제
  • Cloud VPN 터널 삭제
  • Cloud VPN 게이트웨이 삭제
  • 피어 VPN 게이트웨이 삭제
  • 클라우드 라우터 삭제

AWS

  • 사이트 투 사이트 VPN 삭제
  • 트랜짓 게이트웨이 어태치먼트 삭제
  • 트랜짓 게이트웨이 삭제
  • 커스터머 게이트웨이 삭제

HCP

  • Vault Dedicated 클러스터 삭제
  • HVN 삭제

도움말과 참고 (Help and reference)

  • Build HA VPN connections between Google Cloud and AWS
  • Connect an Amazon Transit Gateway to your HashiCorp Virtual Network

더 알아보기 (Learn more)