Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Site-to-site VPN between GCP và AWS

Bản quyền thuộc về FPT techinsight

Hôm nay mình chia sẻ đến mọi người một case study liên quan đến việc tạo connection giữa 2 nền tảng cloud khác nhau.


Công ty ABC phát triển một công cụ communication trong lĩnh vực tài chính tương tự như Slack, Skype nhưng tích hợp tính năng bảo mật mã hóa message nhiều tầng. Ứng dụng được rất nhiều ngân hàng lớn như HSBC, CitiBank ưa chuộng, đặc biệt trong thời buổi Covid, mọi người buộc phải Work from Home.


Thời kì đầu, ứng dụng được deploy lên VM trên Google Cloud. Hệ thống CI/CD với nền tảng chính là Jenkins cũng được xây dựng trên K8S của Google. Tuy nhiên với sự phát triển mạnh mẽ của cloud AWS, các server EC2 của AWS được sử dụng bên cạnh nền tảng VM cũ trên GCP.


Điều này đã đặt ra một bài toán
Làm thế nào để resources trên GCP cũ (VM, K8S cluster) có thể đảm bảo connection private, secure với resources trên AWS (EC2…)


Ví dụ một agent Jenkins được launch trên K8S cluster của GCP có thể connect (ping, curl …) tới 1 EC2 nằm trên VPC của AWS




Gii pháp dùng Cloud NAT gateway

Do các worker của K8S cluster đều nằm trong private sub-net nên Cloud NAT được sử dụng để kết nối ra ngoài network của GCP


NAT hay Network Address Translation giúp địa chỉ mạng cục bộ (Private) truy cập được đến external network


Cụ thể về NAT các bạn có thể tham khảo trên internet 
Cloud NAT: Deep dive into our new network address translation ...


Như vậy Jenkins k8s cluster được setup thêm 1 NAT gateway để có thể truy cập ra ngoài mạng GCP
Bạn có thể tham khảo ở đây





Bạn có thể để gcp tự allocate IP cho cho NAT hoặc manual tạo external IP cho NAT


Trên AWS EC2, configure security group, set inbound rules để allow connection, ví dụ dưới là mở cổng 443 HTTPs cho NAT


Như vậy là Jenkins Agent trên K8S của GCP có thể connect tới EC2 trên AWS qua cổng HTTPS 443
gcloud compute routers nats create nat-qa \

    --router=qa-cloud-router \

    --auto-allocate-nat-external-ips \

    --nat-custom-subnet-ip-ranges=SUBNET_1,SUBNET_3 \

    --udp-mapping-idle-timeout=60s \

    --icmp-mapping-idle-timeout=60s \

    --tcp-established-connection-idle-timeout=60s \

    --tcp-transitory-connection-idle-timeout=60s

Site-to-site VPN between GCP and AWS with dynamic BGP routing

Do NAT vẫn là public IP, exposed ra internet. Do đó công ty ABC muốn tạo một đường truyền bảo mật giữa GCP và AWS, không đi ra public internet. Một VM trên GCP có thể connect (Ping, curl…) tới EC2 của AWS dùng private IP (internal network)
Giải pháp VPC site-to-site được sử dụng




VM của GCP và EC2 của AWS đều nằm trong VPC, yêu cầu đặt ra là VM và EC2 có thể ping hoặc curl thông qua private IP. 
Overal steps như sau


  1. Trên GCP, tạo ra 1 Cloud VPN gateway và VPN tunnel 
  2. Trên AWS, create Virtual Private Gateway và Site to Site VPN connection


Step 1) Tạo classic VPN gateway và VPN Tunnel


VPN tunnel là một đường truyển bảo mật giữa 2 network. Các gói tin qua lại giữa 2 network được đóng gói secure và gửi trên tunnel này. 




gcloud compute target-vpn-gateways create gw-name \

    --network network \

    --region region \

    --project project-id



gcloud compute addresses create gw-ip-name \

    --region region \

    --project project-id



gcloud compute vpn-tunnels create tunnel-name \

    --peer-address on-prem-ip \

    --ike-version ike-vers \

    --shared-secret shared-secret \

    --local-traffic-selector=local-ip-ranges \

    --remote-traffic-selector=remote-ip-ranges \

    --target-vpn-gateway gw-name \

    --region region \

    --project project-id


Sau khi tạo thành công thì được kết quả như sau




Step 2) Trên AWS, create Virtual Private Gateway, Customer gateway và Site to Site VPN connection




Tạo virtual private gateway và attach vào VPC


Sẽ được kết quả như ở dưới




Tạo site-to-site VPN connection
Có thể run qua cli hoặc console nhập id của customer-gateway-id và vpn-gateway-id bạn vừa tạo


aws ec2 create-vpn-connection --type ipsec.1 --customer-gateway-id cgw-<id> --vpn-gateway-id vgw-<id>
Sẽ thấy trạng thái UP chỉ thị connection VPN giữa 2 cloud đã thành công


Như vậy resources trên GCP có thể connect với resources trên AWS qua đường internal IP, ko public ra internet, đường truyền được bảo mật


Kết luận


2 phương pháp trên đều có những ưu nhược điểm riêng. Giải pháp Cloud Nat có ưu điểm là thực hiện khá đơn giản. Tuy nhiên Cloud Nat IP là public address nên có rủi ro về bảo mật. Ngược lại, giải pháp VPN sử dụng một đường truyền riêng, private nên đảm bảo security tuy nhiên việc thực hiện tương đối phức tạp. Người quản trị sẽ tùy vào nhu cầu mà lựa chọn phương pháp phù hợp

Đăng nhận xét

0 Nhận xét