Skip to main content

Command Palette

Search for a command to run...

AWS - Virtual Private Cloud

Published
•8 min read•View as Markdown

CIDR

CIDR Stand for Classless Inter-Domain Routing - a method for allocating IP addresses.

Sử dụng trong Security Groups rules và AWS networking

A CIDR gồm 2 thành phần dưới dạng <Base IP>/<Subnet Mask>:

  • Base IP

  • Subnet Mask

Ví dụ:

  • 192.168.1.0/24

    • Base IP: 192.168.1.0

    • Subnet Mask: /24

  • 24 bit đầu là phần mạng

  • còn lại là host

Số IP = 2^(32-SubnetMask) = 2^8

IP CALCULATOR → https://www.site24x7.com/tools/ipv4-subnetcalculator.html

Private IP

Là các địa chỉ IP được sử dụng trong mạng nội bộ, không thể truy cập trực tiếp từ Internet.

Dải địa chỉ Private IP (IPv4):

  • 10.0.0.0/8: 10.0.0.0 - 10.255.255.255

  • 172.16.0.0/12: 172.16.0.0 - 172.31.255.255

  • 192.168.0.0/16: 192.168.0.0 - 192.168.255.255

Public IP

Là các địa chỉ IP duy nhất trên toàn cầu, có thể truy cập trực tiếp từ Internet.

Dải địa chỉ còn lại ngoại trừ Private IP

What Is an AWS VPC?

Amazon Virtual Private Cloud (Amazon VPC) là mạng ảo trên AWS cloud mà chúng ta có toàn quyền tự do thiết lập các tài nguyên, Subnet, dãi IP,… Chúng ta có thể sử dụng cả IPv4 và IPv6 để truy cập an toàn và dễ dàng vào tài nguyên và ứng dụng trong VPC.

  • VPC nằm trong duy nhất 1 region. Khi tạo VPC bắt buộc chỉ định 1 IPv4 CIDR và có thể tuỳ chọn có hoặc không IPv6 CIDR.

  • Hiện tại, giới hạn là 5 VPC mỗi region mỗi AWS Account.

  • Min Size /28 (16 IP)

  • Max Size /16 (65536 IP)

Mục đích chính của VPC thường là để tách biệt các môi trường khác nhau (Prod, Dev, Test)

Subnet

  • AWS cho phép tạo nhiều VPC và có thể chia VPC thành các mạng con.

  • Các Subnet nằm trong 1 Availability Zone cụ thể.

  • Khi tạo subnet, chỉ định CIDR là tập con của VPC CIDR.

Mỗi subnet, AWS sẽ giữ lại 5 IP (4 IP đầu và 1 IP cuối). Ví dụ với 10.10.1.0/24:

  • 10.10.1.0 - Địa chỉ mạng

  • 10.10.1.1 - IP cho VPC router

  • 10.10.1.2 - IP cho DNS

  • 10.10.1.3 - giữ lại cho sử dụng trong tương lai

  • 10.10.1.255 - Network Broadcast Address. AWS không hỗ trợ broadcast trong VPC, vì vậy địa chỉ này bị giữ lại

💡
Nếu cần 29 IP thì không thể chọn Subnet size /27 (32 IP), 32 - 5 = 27 < 29

Truy cập Internet

Để truy cập ra Internet từ Public Subnet (Ví dụ từ EC2) ta cần cấu hình một số thứ sau đây:

  • Security Group: firewall của EC2

  • NACL (Network Access Control List): Các rule bảo mật của subnet

  • Internet Gateway gắn vào VPC để cho phép ra ngoài

  • Route Table: hướng dẫn đường đi ra thông qua IGW

Để truy cập từ Private subnet

Internet Gateway

AWS Internet Gateway là một tính năng cung cấp bởi Amazon Web Services (AWS) để kết nối mạng riêng ảo (VPC) trong AWS với internet. Nó cho phép các tài nguyên trong VPC có thể truy cập vào các dịch vụ trên internet và cũng cho phép các dịch vụ trên internet có thể truy cập vào các tài nguyên trong VPC.

💡
Một VPC chỉ được gắn tối đa 1 IGW tại 1 thời điểm.

Route Table

Route Table hay còn gọi là bảng định tuyến, cung cấp hướng dẫn định tuyến và được gán vào các Subnets. Ví dụ khi bạn tạo VPC với lớp mạng 10.10.0.0/16, cùng 2 subnet 10.10.1.0/24,10.10.2.0/24 thì mỗi subnets mặc định sẽ được gán 1 default route table.

Bên trong route table sẽ có route entry destination:10.10.0.0/16 target:local. Route entry này thể hiện các tài nguyên tạo ra trong cùng 1 VPC có thể kết nối với nhau.

Với entry destination:0.0.0.0/0 target:igw-*, Route entry này chỉ ra ngoài việc đi tới 10.10.0.0/16 thì đi tới các địa chỉ còn lại sẽ thông qua Internet Gateway. Lúc này sẽ có thể đi ra bên ngoài thông qua Internet Gateway.

💡
Một Route table có thể gán cho nhiều Subnet trong 1 VPC. Tuy nhiên, 1 Subnet chỉ có thể có 1 Route table tại 1 thời điểm.

Bastion Host

Bastion Host là kỹ thuật giúp ta kết nối SSH một cách bảo mật vào các server nằm trong private subnet không có public IP.

Bối cảnh là bạn có private subnet chứa các private server, các private server này không thể truy cập từ ngoài internet và chúng cũng không có public IP. Bạn cần một phương pháp để kết nối SSH vào các server đó một cách bảo mật nhất.

Một trong những cách làm là sử dụng Bastion Host, bastion host là một server nằm trong public subnet, nhận kết nối SSH từ bên ngoài và làm trung gian kết nối với các server trong private subnet:

Cách thực hiện

# thêm key
ssh-add "key.pem"
# kết nối vào bastion host và forward key
ssh -A ec2-user@xxx.xxx.xxx.xxx
# kết nối vào private host từ bastion host
ssh -A ec2-user@xxx.xxx.xxx.xxx

NAT Instances (Deprecated)

NAT Gateways

NAT Gateway (Network Address Translation Gateway) là một dịch vụ mạng cho phép các tài nguyên trong một mạng riêng (private subnet) truy cập ra ngoài internet (hoặc các dịch vụ khác ngoài VPC), mà không cho phép lưu lượng từ bên ngoài truy cập ngược lại vào tài nguyên đó.

NACL & Security Groups

So sánh

Security GroupNACL
Firewall mức instanceFirewall mức subnet
statefulstateless
PermitPermit/Deny
Đọc hêt rule → có Permit hay khôngĐọc tuần tự gặp thoả thì xác định có Permit hay không luôn

Ví dụ minh họa

1️⃣ Security Group

Giả sử bạn có Security Group với các inbound rules:

RuleProtocolPortSourceAction
1TCP220.0.0.0/0ALLOW
2TCP800.0.0.0/0ALLOW
3TCP4430.0.0.0/0ALLOW

📌 Cách hoạt động của SG:

  • Nếu có một request SSH (port 22) → kiểm tra tất cả các rules và thấy có ALLOW → cho phép.

  • Nếu có request HTTP (port 80) → kiểm tra tất cả rules và thấy có ALLOW → cho phép.

  • Nếu có request vào port 3306 (MySQL) → kiểm tra tất cả rules nhưng không có ALLOW → bị chặn.

✅ Security Group luôn kiểm tra tất cả rules trước khi quyết định.


2️⃣ Network ACL

Giả sử bạn có NACL với các inbound rules:

Rule #ProtocolPortSourceAction
100TCP220.0.0.0/0ALLOW
200TCP800.0.0.0/0DENY
300TCP800.0.0.0/0ALLOW
400TCP4430.0.0.0/0ALLOW

📌 Cách hoạt động của NACL:

  • Nếu có request SSH (port 22) → kiểm tra rule #100 (ALLOW) → cho phép ngay, không cần kiểm tra tiếp.

  • Nếu có request HTTP (port 80) → kiểm tra rule #200 (DENY) → bị chặn ngay, dù có rule #300 (ALLOW) bên dưới.

  • Nếu có request HTTPS (port 443) → kiểm tra rule #400 (ALLOW) → cho phép.

❌ NACL kiểm tra theo thứ tự và dừng ngay khi gặp rule đầu tiên khớp với traffic, kể cả nếu có rule ALLOW bên dưới.


Tóm lại

  • Security Group: Luôn kiểm tra tất cả rules và cho phép nếu có ít nhất một rule ALLOW.

  • NACL: Kiểm tra theo thứ tự rule number và dừng ngay khi gặp rule khớp đầu tiên.

Vì vậy, nếu bạn đặt một rule DENY sớm trong NACL, nó sẽ ngăn traffic, ngay cả khi có rule ALLOW bên dưới.

Stateful vs Stateless Firewalls

  • Security Group có tính chất stateful

  • NACL có tính chất stateless

stateful: khi định nghĩa chiều đi vào sẽ có thể ghi nhớ và cho đi ra

stateless: phải định nghĩa 2 chiều nếu muốn đi ra và vào.

VPC Peering

AWS Backbone là mạng lưới toàn cầu được xây dựng và vận hành bởi Amazon Web Services (AWS) để cung cấp hạ tầng mạng tốc độ cao, độ trễ thấp và đáng tin cậy. Đây là mạng lõi của AWS kết nối các trung tâm dữ liệu và Region AWS trên toàn thế giới.

VPC Peering (Virtual Private Cloud Peering) là một tính năng của AWS cho phép kết nối trực tiếp hai VPC (Virtual Private Cloud) với nhau, giúp các tài nguyên trong hai VPC có thể giao tiếp mà không cần đi qua Internet.

Đặc điểm chính của VPC Peering:

  • Kết nối trực tiếp: Giao tiếp qua hạ tầng AWS Backbone, không sử dụng Internet công cộng.

  • Bảo mật: Giao tiếp giữa các VPC được mã hóa và an toàn.

  • Không cần phần cứng: Không yêu cầu cài đặt thiết bị hoặc cấu hình phức tạp.

Lưu ý:

  • VPC Peering không hỗ trợ truyền tải qua trung gian (transitive routing). Nếu bạn cần kết nối nhiều VPC một cách phức tạp, bạn nên sử dụng AWS Transit Gateway.
💡
A kết nối tới B, B kết nối tới C không có nghĩa là bắt cầu A cũng kết nối tới được C. Không hỗ trợ transitive routing.
  • Hai VPC cần có không gian địa chỉ IP không bị trùng lặp để tránh xung đột.