[THÀNH PHẦN MẠNG CƠ BẢN TRÊN AWS] PHẦN 4: VPC ENDPOINT
23/11/2021 830

Nằm trong chuỗi bài Thành phần cơ bản mạng trên AWS, trong phần 4 này, CO-WELL Asia sẽ tiếp tục giới thiệu đến một thành phần khác, chính là VPC Endpoint.
Trước khi đọc bài viết này, bạn có thể tham khảo các bài viết trước về thành phần mạng cơ bản của AWS tại đây:
- Phần 1: VPC, Subnet
- Phần 2: Internet Gateway, NAT Gateway và Route Tables.
- Phần 3: Peering Connection, Transit Gateway
1.Một số khái niệm cơ bản
- Elastic network interface (ENI): là một thành phần mạng logic trong VPC đại diện cho một card mạng ảo. Nó có thể bao gồm các thuộc tính như: một địa chỉ IPv4 nội bộ, một public IPv4, một địa chỉ MAC…
- AWS PrivateLink: cung cấp kết nối một cách bảo mật giữa VPC và các dịch vụ của AWS hay các ứng dụng chạy trên on-premises.
2.Một số loại endpoint trong VPC
- Endpoint service: ta có một application được chạy bên trong VPC và thiết lập một endpoint để kết nối với ứng dụng đó. Các AWS Account, dịch vụ khác có thể tạo kết nối từ VPC của chúng đến endpoint của chúng ta.
- Endpoint: 2 loại endpoin thông dụng
- Gateway endpoint: một gateway endpoint được coi là một cánh cổng mà sẽ được khai báo trong bảng định tuyền, chỉ định để các gói tin đi qua để truy cập đến một số dịch vụ được support bởi AWS như S3, DynamoDB.
- Interface endpoint: là một ENI với một địa chỉ IP nội bộ từ dải IP của mạng con, đóng vai trò là điểm đầu vào cho các gói tin đến một số dịch vụ được hỗ trợ. Nó cho phép bạn truy cập một cách bảo mật bằng cách sử dụng các địa chỉ IP nội bộ.
3. Chi tiết về 2 loại VPC Endpoint thông dụng
Ở bài viết này, mình sẽ chỉ giới thiệu đến mọi người 2 loại endpoint thông dụng là interface endpoint và gateway endpoint. Còn về endpoint services có thể mình sẽ chia sẻ với các bạn trong một bài viết riêng.
3.1.Interface endpoint
Giả sử có một yêu cầu đó là, đẩy log của một ứng dụng đang chạy trong server ảo lên Amazon Cloudwatch Logs. Để thực hiện việc này, nếu như ứng dụng đó đang được chạy trong public subnet thì sẽ có 2 cách.
Cách thứ nhất: Qua internet
Trước tiên server được gắn một Role có quyền ghi log lên CloudWatch Logs. Khi gửi log thì dữ liệu sẽ đi qua internet gateway ra ngoài internet và đến DNS công khai của Cloudwatch Logs.
Đẩy log bằng CLI.
Check log trên Cloudwatch Logs.
Cách thứ hai: Qua endpoint
Bước 1: Tạo endpoint
Mở VPC Console → Chọn Endpoints ở menu bên trái → Chọn Create Endpoint → Nhập và chọn nhưng thông tin cần thiết → Chọn Create endpoint
- Service category: lựa chọn service do AWS hỗ trợ, do ta tự tạo ra hay do một bên thứ 3. Ở ví dụ này ta chọn AWS services.
- Service Name: ở đây có rất nhiều service nên ta sẽ lọc để lựa chọn cho nhanh. Ở ví dụ này ta lọc vs từ khóa là “logs” sau đó chọn “com.amazonaws.ap-northeast-1.logs”.
- VPC: chọn VPC mà endpoint sẽ được gắn ở trong đó.
- Subnets: chọn subnets mà server được gắn ở trong (có thể chọn mỗi AZ một subnet).
- Enable DNS name: cho phép tạo DNS cho endpoint.
- Security group: chọn security group sẽ được gắn với endpoint. Ta cần một security group mở cổng 443 cho IP từ 2 subnet đã chọn ở trên.
- Policy: khai báo quyền sẽ được gắn với endpoint dưới dạng JSON. Nếu lười biếng ta có thể chọn Full Access. Còn mình thì khuyên chỉ nên cấp quyền tối thiểu cần thiết đến đúng đối tượng mà thôi.
Sau khi đã tạo xong endpoint và có trạng thái available, ta sẽ thấy có 2 ENI được tạo ra. Có 2 ENI là do ở mỗi subnet được chọn khi tạo endpoint sẽ tạo ra một ENI ở subnet đó.
Bước 2: Đẩy log lên Cloudwatch Logs
Đẩy log bằng CLI.
Check log trên Cloudwatch Logs.
Vậy dữ liệu có thật sự được truyền qua endpoint?
Chúng ta cùng kiểm tra xem có đúng là dữ liệu được truyền qua endpoint
Để có thể kiểm chứng, ta cần sửa một chút ở policy của endpoint sao cho nó có quyền ghi log đến một đối tượng khác nào đó. Cụ thể ở đây là tên của log group, ví dụ đích đến của ta là techsharing-logs nhưng policy chúng ta thiết lập đến techsharing-logs-222 chẳng hạn.
Policy sau khi đã sửa tên log group.
Kết quả khi đẩy log lên.
Từ kết quả trên ta có thể thấy, khi ghi log lên techsharing-logs đã xẩy ra lỗi Access Denied Exception, lỗi truy cập bị từ chối, do endpoint chỉ có quyền ghi log đến techsharing-logs-222 mà thôi.
Vậy là ta có thể khẳng định rằng, dữ liệu đã đến endpoint và sau khi thiết lập endpoint thì AWS sẽ tự động ưu tiên truyền data qua endpoint đến dịch vụ tương ứng mà không truyền qua internet nữa.
Nếu ứng dụng đang chạy trong private subnet thì chỉ có thể thực hiện được theo cách thứ hai.
3.2.Gateway endpoint
Về cơ bản thì giống với interface endpoint, AWS sẽ ưu tiên truyền dữ liệu qua endpoint đến dịch vụ tương ứng chứ không qua internet.
Khi tạo Gateway endpoint sẽ không có option chọn Subnet cũng như Security group thay vào đó ta sẽ chọn bảng định tuyến, sau khi tạo xong endpoint thì ở mỗi bảng định tuyến đã được chọn sẽ tự động được thêm một route với Destination là một tập dải IP của S3 do AWS quản lý và Target là Gateway endpoint vừa tạo.
3.3.Sự khác nhau giữa interface endpoint và gateway endpoint
Trong khi chuẩn bị nội dung cho phần này, mình đã tìm hiểu và bắt gặp một câu hỏi ôn thi chứng chỉ AWS Certified Solutions Architect – Associate với nội dung như sau:
Ta có một lương dữ liệu đang được lưu trữ tại server trong công ty và dữ liệu đó cần được chuyển lên AWS S3. Mạng của công ty đã được kết nối đến một VPC trên AWS thông qua VPN. Có một S3 VPC Endpoint đã được tạo để truy cập S3 thông qua mạng nội bộ của AWS. Ta được yêu cầu chuyển toàn bộ dữ liệu đó lên S3 mà không sử dụng internet. Đâu là cách tốt nhất để thực hiện?
A. Cấu hình một S3 proxy trên một server ảo (EC2) bên trong VPC và chuyển dữ liệu đến S3 qua S3 proxy.
B. Chuyển dữ liệu đến S3 bằng cách sử dùng VPC Gateway endpoint bên trong mạng của công ty.
C. Tạo VPN Gateway endpoint để giải quyết trường hợp này
D. Tạo một route mới trong bảng tuyến hỗ trợ VPN của VPC với VPC endpoint để hỗ trợ truyền trực tiếp từ mạng công ty đến S3.
Ta sẽ loại trừ đáp án sai trước.
- Đáp án B: SAI. Do là VPC Endpoint là một thành phần trong VPC vậy nên không thể tạo VPC endpoint bên trong mạng nội bộ công ty được.
- Đáp án C: SAI. Do không có một dịch vụ nào được gọi là VPN Gateway endpoint.
- Đáp án D: SAI. Đầu tiên, S3 VPC endpoint là một Gateway endpoint. Thứ hai, với Gateway endpoint ta không thể tự tạo route cho VPC Gateway endpoint trong bảng định tuyến.
Đáp án ĐÚNG ở đây là A.
Mình đã vẽ qua sơ đồ để mọi người dễ hình dung.
Theo mình nghĩ thì ở đây có thể lý do là bởi sự khác biệt giữa interface endpoint và gateway endpoint. Trong khi interface endpoint sẽ tạo ra một private DNS có thể sử dụng để gọi từ on-premise còn gateway endpoint thì không tạo ra private DNS do đó ta không biết đâu là đích đến để truyền dữ liệu. Nếu sử dụng public DNS của S3 thì lúc đó dữ liệu sẽ đi qua internet nên không thể dùng cách này được. Thông qua một proxy server thì khác, server này có private DNS để sử dụng.
4.Tạm kết
Việc sử dụng endpoint để kết nối các máy ảo trong VPC đến các dịch vụ của khác của AWS là việc vô cùng cần thiết vì đặc điểm dữ liệu sẽ không đi ra ngoài internet, đảm bảo tính bảo mật. Hy vọng thông qua bài viết này, bạn đã hiểu thêm được về một thành phần nữa của AWS. Đừng quên theo dõi CO-WELL Techblog để được cập nhật thêm nhiều thông tin và kiến thức công nghệ nhé!
Tham khảo