Truy cập Hạ tầng Chuẩn Zero Trust với Teleport: Tập trung Hóa Quản lý SSH và Cụm Kubernetes

DevOps tutorial - IT technology blog
DevOps tutorial - IT technology blog

Bối cảnh & Lý do: Loại bỏ hoàn toàn SSH key tĩnh

Việc phân phối public key tới 50 máy chủ cloud và 3 cụm Kubernetes nghe có vẻ đơn giản cho đến khi ai đó làm mất laptop. Ban đầu, việc chép public key của kỹ sư vào ~/.ssh/authorized_keys bằng Ansible hoặc cloud-init hoạt động khá ổn. Nhưng chẳng mấy chốc, nợ kỹ thuật (technical debt) bắt đầu chồng chất. Private key nằm không mã hóa trên máy cá nhân, các đội ngũ hiếm khi xoay vòng (rotate) key, và quy trình offboarding biến thành một cuộc truy lùng hỗn loạn trên hàng chục máy chủ.

Truy cập Kubernetes cũng tạo ra cơn ác mộng tương tự. Việc bàn giao các file kubeconfig quyền admin tĩnh kèm token có hạn 90 ngày sẽ đi vòng qua các nhà cung cấp định danh tập trung (IdP) và phá vỡ các tiêu chuẩn tuân thủ. Nếu máy trạm của một kỹ sư bị xâm nhập, kẻ tấn công sẽ có ngay quyền truy cập trực tiếp vào mọi cụm production được lưu trong file YAML đó.

Teleport giải quyết triệt để vấn đề này bằng cách đưa vào một proxy truy cập nhận biết danh tính (identity-aware proxy) cùng một Certificate Authority (CA) nội bộ. Thay vì dựa vào thông tin xác thực tĩnh, kỹ sư sẽ xác thực qua SSO, GitHub hoặc Okta. Teleport sau đó sẽ cấp các chứng chỉ mật mã X.509 và SSH chỉ có hiệu lực từ 8 đến 12 giờ. Khi hết khoảng thời gian này, thông tin xác thực tự động hết hạn—không để lại bất kỳ key vĩnh viễn nào trên máy trạm.

Cài đặt: Thiết lập Teleport Proxy và Auth Server

Chúng ta sẽ triển khai Teleport Community Edition trên một máy chủ Ubuntu 22.04 LTS với 2 vCPU và 4 GB RAM. Máy chủ đơn lẻ này sẽ đảm nhận cả Auth Service (chuyên cấp phát chứng chỉ) và Proxy Service (định tuyến lưu lượng HTTPS và SSH gửi tới).

Bắt đầu bằng việc thêm repository chính thức của Gravitational và tải gói cài đặt Teleport:

# Tải và cài đặt public key của Teleport
sudo curl https://apt.releases.teleport.dev/gpg \
  -o /usr/share/keyrings/teleport-archive-keyring.asc

# Thêm repository v15 bản stable
source /etc/os-release
echo "deb [signed-by=/usr/share/keyrings/teleport-archive-keyring.asc] \
  https://apt.releases.teleport.dev/${ID?} ${VERSION_CODENAME?} stable/v15" \
  | sudo tee /etc/apt/sources.list.d/teleport.list > /dev/null

# Cập nhật danh sách gói và cài đặt teleport
sudo apt-get update
sudo apt-get install -y teleport

Tiếp theo, tạo file cấu hình cơ bản. Teleport tích hợp sẵn công cụ CLI hỗ trợ liên kết proxy và auth engine với các chứng chỉ TLS hiện có:

sudo teleport configure \
  --cluster-name=teleport.example.com \
  --public-addr=teleport.example.com:443 \
  --cert-file=/var/lib/teleport/fullchain.pem \
  --key-file=/var/lib/teleport/privkey.pem \
  --output=file:///etc/teleport.yaml

Nếu chưa có sẵn chứng chỉ, hãy thay các cờ file bằng --acme [email protected] để Let’s Encrypt tự động xử lý việc xác thực. Sau đó kích hoạt và khởi chạy systemd service:

sudo systemctl enable --now teleport
sudo systemctl status teleport

Bây giờ, hãy tạo user quản trị đầu tiên với quyền truy cập vào các tài khoản hệ thống root và ubuntu:

sudo tctl users add devops-admin \
  --roles=editor,access \
  --logins=root,ubuntu

Terminal sẽ in ra một liên kết onboarding dùng một lần. Hãy mở liên kết này trên trình duyệt để đăng ký khóa phần cứng WebAuthn (như YubiKey) hoặc thiết lập ứng dụng xác thực (như 1Password hoặc Google Authenticator).

Cấu hình: Kết nối các Linux Node và Cụm Kubernetes

Khi proxy đã hoạt động, chúng ta có thể kết nối hạ tầng của mình. Teleport sử dụng outbound reverse tunnel (đường hầm ngược ra ngoài), do đó các server đích không bao giờ cần phải mở cổng 22 ra internet công cộng.

1. Kết nối một SSH Node bên ngoài

Tạo một join token có hiệu lực trong 1 giờ từ máy chủ Teleport auth:

sudo tctl tokens add --type=node --ttl=1h

Hãy lưu lại token vừa tạo và mã hash CA pin. Trên worker node đích, cài đặt gói Teleport theo các bước apt ở trên, sau đó lưu cấu hình này vào /etc/teleport.yaml:

version: v3
teleport:
  nodename: worker-node-01
  auth_token: "YOUR_GENERATED_JOIN_TOKEN"
  auth_servers:
    - "teleport.example.com:443"
auth_service:
  enabled: "no"
proxy_service:
  enabled: "no"
ssh_service:
  enabled: "yes"
  labels:
    environment: production
    tier: backend

Khởi chạy service: sudo systemctl enable --now teleport. Node sẽ tự động gọi ra teleport.example.com:443. Bạn có thể khóa toàn bộ các quy tắc tường lửa (firewall rule) cho kết nối SSH inbound ngay lập tức.

2. Kết nối một cụm Kubernetes

Kết nối một cụm Kubernetes chỉ mất vài lệnh Helm. Lấy một token kết nối cụm từ máy chủ Teleport:

sudo tctl tokens add --type=kube --ttl=1h

Chuyển sang máy trạm có quyền quản trị đối với cụm đích và cài đặt teleport-kube-agent:

helm repo add teleport https://charts.releases.teleport.dev
helm repo update

helm upgrade --install teleport-kube-agent teleport/teleport-kube-agent \
  --namespace teleport \
  --create-namespace \
  --set kubeClusterName="production-eks" \
  --set proxyAddr="teleport.example.com:443" \
  --set authToken="YOUR_KUBE_JOIN_TOKEN"

Agent sẽ thiết lập một đường hầm outbound tới Teleport. Khi các kỹ sư gửi yêu cầu qua proxy, Teleport sẽ linh hoạt ánh xạ danh tính của họ tới các nhóm Kubernetes RBAC phù hợp tại thời điểm thực thi (runtime).

Kiểm tra & Giám sát: Kiểm thử Truy cập và Kiểm toán Phiên làm việc

Hãy bỏ lại các lệnh ssh thông thường và những file cấu hình tĩnh. Giờ đây, các kỹ sư sẽ tương tác với mọi thứ thông qua client tsh thống nhất.

Xác thực qua Client CLI

Đăng nhập thông qua giao diện dòng lệnh:

tsh login --proxy=teleport.example.com:443 --user=devops-admin

Hệ thống sẽ yêu cầu nhập mật khẩu và mã thử thách MFA. Sau khi xác nhận thành công, Teleport sẽ lưu một chứng chỉ SSH ngắn hạn cùng context kubeconfig đã được cập nhật vào môi trường local của bạn.

Truy cập các SSH Target

Tìm kiếm máy chủ bằng các label metadata và mở một phiên shell:

# Liệt kê tất cả node đã đăng ký trong production
tsh ls environment=production

# Mở shell SSH sử dụng chứng chỉ tạm thời
tsh ssh ubuntu@worker-node-01

Truy cập Kubernetes

Truy vấn các cụm khả dụng và trỏ context của bạn tới production:

# Khám phá tất cả cụm đằng sau proxy
tsh kube ls

# Chuyển context sang cụm đích
tsh kube login production-eks

# Chạy các lệnh kubectl chuẩn như bình thường
kubectl get nodes
kubectl get pods -n kube-system

Bạn không bao giờ phải chia sẻ IAM key của nhà cung cấp cloud hay secret hardcode của service account. Teleport tự động xác thực từng lệnh gọi API kubectl riêng lẻ ngay tức thì.

Kiểm toán và Phát lại Phiên (Session Replay)

Teleport ghi lại toàn bộ các phiên SSH tương tác và theo dõi từng lệnh gọi API Kubernetes nguyên bản. Xem các phiên đang hoạt động hoặc phát lại output terminal đã ghi trực tiếp từ shell của bạn:

# Kiểm tra các phiên SSH đang hoạt động
tsh status

# Phát lại phiên terminal trước đó theo từng khung hình
tsh play <session-id>

Mọi câu lệnh, thao tác chỉnh sửa file và yêu cầu thực thi trên pod đều được lưu tại /var/lib/teleport/log dưới dạng JSON có cấu trúc. Nếu sự cố bảo mật xảy ra vào lúc 2 giờ sáng, đội ngũ của bạn đã có sẵn nhật ký kiểm toán chống can thiệp (tamper-proof) ghi lại từng phím bấm trên toàn bộ hệ thống—mang lại khả năng tuân thủ chuẩn Zero Trust vững chắc mà không làm chậm tiến độ làm việc thường ngày của kỹ sư.

Share: