Tại sao VPN đang dần trở nên lỗi thời
Nếu bạn từng mất mười phút vật lộn với một VPN client chập chờn chỉ để kiểm tra dashboard Grafana, bạn sẽ hiểu cảm giác ức chế đó. Ngoài trải nghiệm người dùng, VPN dựa trên mô hình bảo mật “lâu đài và hào nước” (castle-and-moat). Một khi người dùng đã vượt qua được lớp phòng thủ bên ngoài, họ thường có quyền truy cập theo chiều ngang vào toàn bộ mạng lưới. Điều này tạo ra một lỗ hổng bảo mật khổng lồ. Hạ tầng hiện đại đang chuyển dịch sang Zero Trust, một mô hình mà danh tính được xác thực cho mỗi yêu cầu riêng biệt, bất kể người dùng đang ngồi ở đâu.
Identity-Aware Proxies (IAP) như Pomerium giải quyết vấn đề này bằng cách đưa bảo mật lên lớp ứng dụng. Thay vì phải khởi chạy một phần mềm client, người dùng chỉ cần truy cập vào một URL như internal-tool.company.com. Pomerium sẽ chặn lưu lượng truy cập, xác thực phiên làm việc của người dùng với một Nhà cung cấp danh tính (IdP) như GitHub hoặc Okta, và kiểm tra các chính sách truy cập cụ thể. Phương pháp này nhanh hơn, an toàn hơn và dễ quản lý hơn đáng kể.
Tại sao Pomerium là lựa chọn hàng đầu cho môi trường Production
Pomerium đóng vai trò như một người gác cổng tập trung cho các dịch vụ của bạn. Nó đủ nhẹ để chạy như một file thực thi duy nhất nhưng cũng đủ mạnh mẽ để xử lý môi trường doanh nghiệp có lưu lượng truy cập cao. Sau khi thay thế hệ thống OpenVPN cũ bằng Pomerium cho một đội ngũ hơn 150 kỹ sư, chúng tôi đã ghi nhận tỷ lệ ticket hỗ trợ liên quan đến truy cập giảm tới 40%.
Các ưu điểm chính bao gồm:
- Không cần phần mềm Client: Chỉ cần có trình duyệt web là bạn có thể truy cập. Không còn việc phải xử lý lỗi driver VPN trên macOS hay Linux.
- Kiểm soát chi tiết (Granular Control): Bạn có thể viết các chính sách chỉ cho phép truy cập nếu người dùng thuộc team GitHub ‘DevOps’ và kết nối từ một quốc gia cụ thể.
- Nhật ký kiểm tra (Audit Trails) chi tiết: Mọi cú click và yêu cầu đều được ghi lại kèm theo danh tính liên quan. Điều này mang lại mức độ hiển thị mà các VPN ở lớp mạng không thể nào sánh được.
Thiết lập môi trường của bạn
Chúng sẽ sử dụng Docker Compose để xây dựng một mô hình thử nghiệm (PoC). Thiết lập này mô phỏng môi trường thực tế bằng cách bảo vệ một ứng dụng nội bộ giả lập phía sau proxy Pomerium. Bạn sẽ cần một tên miền (hoặc chỉnh sửa file /etc/hosts) và một tài khoản GitHub để đóng vai trò là IdP.
1. Tạo mã khóa mã hóa (Encryption Keys)
Pomerium yêu cầu hai chuỗi base64 32-byte duy nhất để bảo mật cookie và mã hóa giao tiếp nội bộ. Bạn có thể tạo chúng nhanh chóng bằng lệnh sau:
head -c32 /dev/urandom | base64
Chạy lệnh này hai lần. Lưu chuỗi thứ nhất làm COOKIE_SECRET và chuỗi thứ hai làm SHARED_SECRET. Hãy giữ chúng cẩn thận; đây chính là những chiếc chìa khóa quan trọng nhất trong hệ thống của bạn.
2. Cấu hình Docker Compose
Tạo một thư mục tên là pomerium-lab và lưu nội dung sau vào file docker-compose.yaml. File này định nghĩa proxy và một ứng dụng ‘Hello World’ đơn giản cần được bảo vệ.
version: '3'
services:
pomerium:
image: cache.pomerium.io/pomerium/pomerium:latest
container_name: pomerium
volumes:
- ./config.yaml:/pomerium/config.yaml
ports:
- "443:443"
environment:
- COOKIE_SECRET=SECRET_THU_NHAT_CUA_BAN
- SHARED_SECRET=SECRET_THU_HAI_CUA_BAN
internal-app:
image: nginxdemos/hello
container_name: internal-app
expose:
- "80"
Định nghĩa các chính sách truy cập
File config.yaml là nơi bạn định nghĩa logic của mình. Để sử dụng GitHub, trước tiên bạn phải tạo một OAuth App trong phần GitHub Developer Settings. Đặt ‘Authorization callback URL’ thành https://authenticate.tenmiencuaban.com/oauth2/callback.
Cấu hình Proxy
Tạo file config.yaml trong cùng thư mục với cấu trúc như sau:
address: ":443"
authenticate_service_url: https://authenticate.tenmiencuaban.com
idp_provider: github
idp_client_id: "id-github-cua-ban"
idp_client_secret: "secret-github-cua-ban"
routes:
- from: https://internal-tool.tenmiencuaban.com
to: http://internal-app:80
policy:
allow:
and:
- domain:
is: congtycuaban.com
- github:
groups:
- "engineering-team"
Chính sách này rất nghiêm ngặt. Nó đảm bảo rằng chỉ những người dùng có email congtycuaban.com và đồng thời là thành viên của nhóm ‘engineering-team’ trên GitHub mới có thể xem ứng dụng. Những người khác sẽ nhận được trang lỗi 403 Forbidden trước khi họ kịp chạm tới server ứng dụng của bạn.
Xác minh và Hiệu năng
Khởi chạy hệ thống bằng lệnh docker-compose up -d. Khi bạn truy cập vào URL của công cụ, Pomerium sẽ chuyển hướng bạn đến GitHub để đăng nhập OAuth tiêu chuẩn. Sau khi bạn chấp nhận, bạn sẽ được chuyển hướng ngược lại ứng dụng nội bộ một cách mượt mà.
Giám sát truy cập
Khả năng hiển thị là nguyên tắc cốt lõi của Zero Trust. Bạn có thể theo dõi các quyết định truy cập trong thời gian thực bằng cách xem log:
docker logs -f pomerium
Một mục log thành công sẽ hiển thị check_result: allow cùng với GitHub ID của người dùng. Điều này giúp việc kiểm tra tuân thủ (như SOC2 hoặc ISO27001) trở nên dễ dàng hơn nhiều so với việc lục tìm trong log của tường lửa.
Độ trễ và Khả năng mở rộng
Trong các bài kiểm tra thực tế, Pomerium thường chỉ thêm chưa đến 5ms đến 10ms độ trễ cho mỗi yêu cầu. Đối với các công cụ web thông thường, người dùng sẽ không thể nhận ra sự khác biệt này. Nếu bạn đang xử lý hàng nghìn người dùng đồng thời, bạn có thể mở rộng theo chiều ngang bằng cách chạy nhiều instance proxy phía sau một bộ cân bằng tải (load balancer). Đối với người dùng Kubernetes, Pomerium Ingress Controller có thể tự động hóa toàn bộ cấu hình này thông qua các tài nguyên Ingress tiêu chuẩn.
Đơn giản hóa quy trình Offboarding
Lợi ích vận hành lớn nhất là cách hệ thống này xử lý khi nhân viên nghỉ việc. Khi một kỹ sư rời công ty và bạn xóa họ khỏi tổ chức GitHub, quyền truy cập của họ vào mọi công cụ nội bộ sẽ biến mất ngay lập tức. Bạn không còn phải đi tìm các thông tin đăng nhập VPN cũ hay thay đổi các SSH key dùng chung. Bằng cách tập trung quyền truy cập xung quanh nhà cung cấp danh tính chính, bạn vừa giảm thiểu bề mặt tấn công, vừa giảm bớt gánh nặng quản trị cùng một lúc.

