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.

Mở Rộng Amazon EKS Với Hybrid Nodes, IAM Roles Anywhere Và HashiCorp Vault

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: alt text

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)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).

  1. 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.
  2. Cung cấp gói chứng chỉ từ Vault và chọn Create a trust anchor. alt text

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. alt text

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. alt text

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_name dù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ò:

  1. Cài đặt Kubernetes đúng phiên bản.
  2. 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$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