Mở Rộng Amazon EKS Với Hybrid Nodes, IAM Roles Anywhere Và HashiCorp Vault
Bài viết hướng dẫn chi tiết cách sử dụng AWS IAM Roles Anywhere kết hợp với HashiCorp Vault PKI để kết nối an toàn các EKS Hybrid Nodes vào một cụm Amazon EKS.
Amazon EKS Hybrid Nodes cho phép các doanh nghiệp linh hoạt sử dụng các tài nguyên máy tính bên ngoài nền tảng AWS bằng cách mở rộng Data Plane của Amazon Elastic Kubernetes Service (Amazon EKS) ra ngoài ranh giới của AWS Cloud. Các trường hợp sử dụng lý tưởng cho EKS Hybrid Nodes bao gồm các doanh nghiệp có yêu cầu về chủ quyền dữ liệu (data sovereignty), giao tiếp độ trễ thấp (low latency communication), hoặc cần tuân thủ các quy định khắt khe của chính phủ và ngành công nghiệp.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách sử dụng AWS Identity and Access Management (IAM) Roles Anywhere, kết hợp với HashiCorp Vault PKI, để hỗ trợ việc kết nối các EKS Hybrid Nodes vào một cụm Amazon EKS Cluster một cách an toàn và bảo mật.
Tổng quan giải pháp
Khi một Node tham gia vào một cụm EKS, nó sử dụng dữ liệu mô tả (metadata) từ cụm đó – chẳng hạn như gói chứng chỉ (certificate bundle) – để xác thực. Quyền truy xuất thông tin này được cấp bởi IAM thông qua quyền eks:DescribeCluster. Quyền này có thể được gắn cho một IAM Role thông qua IAM Policy.
Bởi vì các EKS Hybrid Nodes nằm bên ngoài hệ sinh thái AWS, chúng không thể kế thừa trực tiếp các IAM Policies. Do đó, cần có một cơ chế khác để lấy gói chứng chỉ.
- Một lựa chọn phổ biến là sử dụng AWS Systems Manager (SSM) để cung cấp cho các node thông tin xác thực IAM tạm thời.
- Một lựa chọn tối ưu khác là sử dụng hệ thống Hạ tầng Khóa Công khai (PKI) hiện có kết hợp với AWS IAM Roles Anywhere. Đây cũng chính là nội dung chính của hướng dẫn này.
💡 Lưu ý: IAM Roles Anywhere hỗ trợ thời hạn của thông tin xác thực tạm thời từ mức mặc định là 1 giờ cho đến tối đa 12 giờ.
Yêu cầu trước khi cài đặt
Để thực hiện giải pháp này, bạn cần chuẩn bị sẵn:
- Một tài khoản AWS.
- Một cụm Amazon EKS Cluster.
- Một hoặc nhiều máy chủ Linux sẽ đóng vai trò là EKS Hybrid Nodes.
- Một máy chủ hoặc cụm máy chủ HashiCorp Vault.
Kiến trúc PKI với HashiCorp Vault
Dưới đây là sơ đồ kiến trúc mô tả cách HashiCorp Vault, AWS IAM Roles Anywhere và Amazon EKS tương tác với nhau:

Nếu bạn đang sử dụng HashiCorp Vault để quản lý secret và bảo vệ dữ liệu nhạy cảm, bạn đã có sẵn một hệ thống PKI mạnh mẽ! Vault hỗ trợ tích hợp sẵn PKI như một phần của công cụ secrets engine. Bạn chỉ cần kích hoạt nó bằng lệnh:
vault secrets enable pki
Do bạn sẽ thiết lập sự tin cậy (Trust) giữa IAM Roles Anywhere (IAM-RA) và Vault Certificate Authority (CA), cần lưu ý rằng thời gian sống (TTL - Time To Live) mặc định của Vault CA là 30 ngày. Điều này đồng nghĩa với việc cứ sau mỗi 30 ngày bạn phải làm mới Trust một lần. Bạn hoàn toàn có thể điều chỉnh TTL theo nhu cầu, ví dụ như tăng lên thành 1 năm:
vault secrets tune -max-lease-ttl=365d pki
Khi khởi tạo CA, Vault có thể chấp nhận một chứng chỉ bên ngoài hoặc tự tạo một chứng chỉ nội bộ tự ký (self-signed):
vault write pki/root/generate/internal common_name=hybrid-node.eks
Cấu hình AWS IAM Roles Anywhere
Thông thường, bước tiếp theo sẽ là tạo các chứng chỉ được ký bởi CA. Tuy nhiên, với IAM-RA, bạn cần sử dụng chứng chỉ gốc (root certificate) được trả về từ lệnh trước đó để xây dựng một trust profile (hồ sơ tin cậy).
- Truy cập vào giao diện điều khiển IAM-RA trong tài khoản AWS của bạn (
IAM.Roles.RolesAnywhere) và tạo một trust anchor mới. - Cung cấp gói chứng chỉ từ Vault và chọn Create a trust anchor.

Trước khi rời khỏi giao diện AWS console, bạn phải tạo một Profile. Profile đóng vai trò liên kết một IAM Role, một nhóm quyền IAM (policy) và trust anchor vừa tạo. Dựa vào chuỗi liên kết này, IAM-RA có thể xác nhận yêu cầu có hợp lệ hay không để tiến hành cấp thông tin xác thực tạm thời.

Mỗi IAM Role có thể có một bộ quyền (Actions) riêng biệt cho phép truy cập tài nguyên AWS. Để IAM-RA có thể yêu cầu chứng chỉ cấp cho requestor, bạn phải thiết lập quan hệ Trust Relationship trong IAM cho các Role được tham chiếu.
Lưu ý: IAM Role không yêu cầu quyền (Actions) nào liên quan trực tiếp đến IAM-RA, mà chỉ cần Trust policy.
Trong ví dụ này, việc cấu hình ký tự đại diện * cho Action và Resource giúp Role kế thừa toàn bộ các quyền của IAM Policy hiện tại. Tuy nhiên, khi triển khai thực tế, bạn nên áp dụng nguyên tắc đặc quyền tối thiểu (Least Privilege) theo tiêu chuẩn bảo mật của tổ chức.

Quản lý chứng chỉ với Vault
Các Hybrid Nodes sẽ cần yêu cầu chứng chỉ từ Vault. Thay vì sử dụng quyền root, hãy tạo một Vault role riêng với các quyền PKI cần thiết. Cấu hình allowed_domains mang lại sự linh hoạt để cấp quyền quản lý chứng chỉ cho các nhóm Hybrid Nodes:
vault write pki/roles/hybrid-node.eks \
allowed_domains=hybrid-node.eks \
allow_subdomains=true \
max_ttl=72h
Sau đó, tiến hành yêu cầu cấp một chứng chỉ:
vault write pki/roles/hybrid-node.eks \
common_name="one.hybrid-node.eks"
Chứng chỉ trả về từ Vault sẽ được sử dụng để cấu hình các Hybrid Nodes. Khi IAM-RA nhận được yêu cầu sử dụng chứng chỉ đó, nó sẽ xác minh chữ ký từ chứng chỉ gốc và cấp IAM credentials nếu hợp lệ.
Mẹo: Giá trị
common_namedùng để Node định danh với EKS cluster. Dù không bắt buộc phải duy nhất, bạn nên đặt tên theo quy tắc để dễ quản lý.
Lưu ý: Khi cấu hình nodeadm, thứ tự dữ liệu chứng chỉ phải tuân thủ chuẩn: certificate; intermediate(s); issuer. Tương ứng trong kết quả trả về từ Vault là: certificate; ca_chain; issuing_ca.
Cấu hình EKS Hybrid Nodes
Giờ đây bạn đã sẵn sàng cấu hình để một Hybrid Node tham gia vào EKS cluster. Các bước dưới đây giả định rằng server Linux của bạn hoàn toàn trống và chưa cài đặt công cụ.
Tải xuống file thực thi nodeadm tùy theo kiến trúc của bạn:
(Kiến trúc x86_64)
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm'
(Kiến trúc ARM64)
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/arm64/nodeadm'
Cấp quyền thực thi:
chmod u+x nodeadm
Công cụ nodeadm đảm nhận 2 vai trò:
- Cài đặt Kubernetes đúng phiên bản.
- Kết nối node vào EKS cluster.
Cài đặt Kubernetes bản 1.33 và dùng IAM-RA để xác thực:
./nodeadm install 1.33 --credential-provider iam-ra
Tiếp theo, tạo file cấu hình nodeConfig.yaml. File này cung cấp thông tin để xác định vị trí EKS cluster và lấy thông tin xác thực từ IAM-RA. Hãy thay thế các biến $REGION, $NODE_NAME, $TRUST_ANCHOR_ARN, $PROFILE_ARN và $ROLE_ARN bằng thông tin của bạn:
---
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: hybrid-eks-cluster
region: $REGION
kubelet:
config: # Tùy chỉnh cấu hình kubelet
shutdownGracePeriod: 30s
flags: # Danh sách cờ kubelet (labels, taints,...)
- --node-labels=hybrid.node/test-label=true
hybrid:
iamRolesAnywhere:
nodeName: $NODE_NAME # Phải khớp với Common Name (CN) của chứng chỉ
trustAnchorArn: $TRUST_ANCHOR_ARN
profileArn: $PROFILE_ARN
roleArn: $ROLE_ARN
certificatePath: /etc/iam/pki/server.pem # Đường dẫn tới file chứng chỉ .pem
privateKeyPath: /etc/iam/pki/server.key # Đường dẫn tới file khóa bí mật .key
Khởi tạo kubelet qua nodeadm bằng lệnh:
./nodeadm init --config-source file://nodeConfig.yaml
Kiểm tra trạng thái node trên EKS cluster:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
one-hybrid Not Ready <none> 119s v1.33.1-eks-b9364f6
Node sẽ ở trạng thái Not Ready cho đến khi bạn cài đặt Container Network Interface (CNI) (chẳng hạn như Cilium hoặc Calico) trên cụm.
Kết quả đạt được
Sau khi CNI được cài đặt thành công, trạng thái Node của bạn sẽ chuyển sang sẵn sàng:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
one-hybrid Ready <none> 119s v1.33.1-eks-b9364f6
Xin chúc mừng! Bạn đã tích hợp thành công Hybrid Node vào EKS.
Dọn dẹp tài nguyên
Nếu bạn chỉ đang chạy thử nghiệm, đừng quên xóa các tài nguyên EKS và máy chủ Vault sau khi hoàn tất để tối ưu chi phí AWS.
Kết luận
Việc tích hợp HashiCorp Vault PKI với IAM Roles Anywhere là một giải pháp cực kỳ mạnh mẽ để đưa các Hybrid Nodes vào mạng lưới EKS một cách an toàn.
Mặc dù giải pháp mang lại độ bảo mật cao qua chứng chỉ đáng tin cậy, quy trình này vẫn chưa hoàn toàn tự động. Để tối ưu hóa, bạn có thể viết một đoạn script tự động (Linux init script) gọi API đến Vault lấy chứng chỉ và sau đó gọi IAM-RA lấy credentials. Điều này sẽ giúp máy chủ tự động “gia nhập” cụm EKS y hệt như việc cấp quyền qua user data trong AWS EC2.
Tham khảo Extending EKS with Hybrid Nodes
Bình luận
Bài viết liên quan
Homelab: Hướng dẫn cài đặt Cluster Kubernetes siêu nhẹ với K3s
K3s là gì? Hướng dẫn chi tiết cách cài đặt một cụm Cluster Kubernetes siêu nhẹ (K3s) dành cho hệ thống Homelab, Raspberry Pi hoặc các thiết bị IoT.
MiniStack Là Gì? Giải Pháp Giả Lập AWS Hoàn Hảo Cực Nhẹ Chạy Trên Local
MiniStack là gì? Tìm hiểu công cụ mã nguồn mở giả lập các dịch vụ AWS ngay trên máy tính của bạn. So sánh chi tiết MiniStack và LocalStack dành cho DevOps.
Hướng dẫn toàn tập về AWS Identity and Access Management (IAM)
Tìm hiểu từ A-Z về AWS IAM, các thành phần như User, Group, Role, Policy và cách quản lý quyền truy cập trên AWS an toàn, chuẩn xác.