Cạm bẫy kiểm định thủ công: Tại sao sự bành trướng Cloud giết chết năng suất
Hạ tầng Cloud mở rộng nhanh hơn khả năng theo dõi của đội ngũ của bạn. Một tuần bạn đang quản lý mười EC2 instance; tuần tiếp theo, tổ chức của bạn đã bùng nổ lên hàng trăm tài khoản trên khắp AWS, Azure và GCP.
Tôi đã chứng kiến những kỹ sư DevOps cấp cao mất cả ngày thứ Sáu để săn lùng các S3 bucket không được mã hóa hoặc xóa các ổ đĩa “thây ma” (zombie disks) bị lãng quên từ nhiều tháng trước. Một volume gp3 1TB bị bỏ rơi trong AWS tiêu tốn khoảng 80 USD mỗi tháng mà không làm gì cả. Nhân con số đó với năm mươi volume tại mười region, bạn đang đốt 4.000 USD hàng tháng cho đống rác kỹ thuật số.
Sự cản trở thường bắt nguồn từ việc thiếu sự thực thi tập trung và tự động. Việc dựa dẫm vào các kỹ sư để ghi nhớ một bản PDF “Best Practices” dài 50 trang là công thức dẫn đến thất bại. Sai sót của con người là không thể tránh khỏi. Để duy trì kiểm soát, bạn cần chuyển đổi các hướng dẫn đó thành mã có thể thực thi. Đây là lúc Cloud Custodian (c7n) trở thành công cụ DevOps giá trị nhất của bạn.
Bắt đầu nhanh: Triển khai chính sách đầu tiên trong 5 phút
Cloud Custodian là một rules engine mã nguồn mở sử dụng YAML để định nghĩa các chính sách hạ tầng. Nó cực kỳ nhẹ. Bạn không cần quản lý một cụm server đồ sộ để chạy nó; một laptop cá nhân hoặc một CI/CD runner cơ bản là quá đủ.
1. Cài đặt
Vì Cloud Custodian dựa trên Python, một môi trường ảo (virtual environment) là cách tốt nhất để giữ cho không gian làm việc của bạn sạch sẽ.
python3 -m venv custodian-venv
source custodian-venv/bin/activate
pip install c7n
2. Viết một chính sách bảo mật
Tạo một tệp có tên encrypt-buckets.yml. Chính sách này sẽ quét bất kỳ S3 bucket nào thiếu mã hóa AES-256 hoặc KMS và áp dụng một tag cảnh báo. Đây là một cách không gây gián đoạn để kiểm định trạng thái bảo mật của bạn.
policies:
- name: s3-unencrypted-report
resource: s3
filters:
- type: no-encryption
actions:
- type: tag
key: SecurityStatus
value: NonCompliant
3. Thực hiện kiểm định
Chạy chính sách đối với tài khoản AWS của bạn. Hãy đảm bảo thông tin xác thực (credentials) của bạn đã được export trong terminal trước khi bắt đầu.
custodian run --output-dir=. encrypt-buckets.yml
Custodian sẽ tạo ra một tệp resources.json. Tệp này liệt kê mọi bucket không vượt qua bài kiểm tra. Không còn cảnh phải click chuột trên AWS Console hàng giờ đồng hồ nữa.
Ba trụ cột: Cách các chính sách được xây dựng
Mỗi chính sách Cloud Custodian tuân theo cấu trúc logic gồm ba phần. Hãy coi nó như một dạng “If-This-Then-That” cho hạ tầng cloud của bạn.
- Resource: Tài sản mục tiêu (ví dụ:
aws.ec2,azure.vm, hoặcgcp.instance). - Filter: Tiêu chí cụ thể để lựa chọn. Bạn có thể nhắm mục tiêu vào “các instance cũ hơn 60 ngày” hoặc “các ổ đĩa không có chủ sở hữu đi kèm”.
- Action: Phản hồi. Bạn có thể dừng (stop), xóa (delete), gắn thẻ (tag), hoặc thậm chí gửi thông báo Slack cho người tạo tài nguyên.
Trong môi trường production, tôi sử dụng logic này để xử lý các EBS volume bị bỏ rơi vào mỗi tối Chủ nhật. Đó là một cách đơn giản để ngăn “nghĩa địa cloud” làm cạn kiệt ngân sách hàng quý.
Quản trị đa đám mây trong thực tế
Cloud Custodian trừu tượng hóa các API riêng biệt của từng nhà cung cấp thành một cú pháp thống nhất. Điều này có nghĩa là bạn không cần phải học ba công cụ CLI khác nhau để quản lý môi trường multi-cloud.
AWS: Tự động hóa tiết kiệm chi phí
Các môi trường phát triển thường vẫn chạy suốt cuối tuần, lãng phí hơn 60 giờ tính toán. Chính sách này nhắm vào các instance được gắn thẻ Env: Dev và tắt chúng vào lúc 6:00 chiều.
policies:
- name: ec2-nightly-stop
resource: ec2
filters:
- type: value
key: "tag:Env"
value: Dev
- type: schedule
schedule: "stop"
default_tz: "utc"
actions:
- stop
Azure: Dọn dẹp Managed Disks
Azure tiếp tục tính phí các managed disk ngay cả khi VM cha đã bị xóa. Chính sách này tự động tìm và gỡ bỏ các ổ đĩa không còn gắn kết (unattached) đó.
policies:
- name: azure-cleanup-unattached-disks
resource: azure.disk
filters:
- type: value
key: properties.diskState
op: eq
value: Unattached
actions:
- type: delete
Chiến lược vận hành thực tế để an tâm hơn
Việc vận hành một công cụ có khả năng xóa hạ tầng đương nhiên là điều đáng e ngại. Để tránh tình trạng ngừng hoạt động ngoài ý muốn, tôi tuân theo một quy trình triển khai nghiêm ngặt.
Lưới an toàn “Dry Run”
Đừng bao giờ chạy một chính sách mới ở chế độ “live” ngay lập tức. Hãy sử dụng cờ --dryrun. Nó mô phỏng quá trình thực thi và cho bạn biết chính xác tài nguyên nào sẽ bị ảnh hưởng mà không thực sự thay đổi bất cứ điều gì.
custodian run --dryrun --output-dir=out policy.yml
Thời gian ân hạn “Thông báo và Chờ đợi”
Việc xóa tài nguyên đột ngột gây khó chịu cho các lập trình viên. Thay vì hành động ngay lập tức, hãy tạo một chính sách hai bước. Chính sách đầu tiên gắn thẻ tài nguyên không tuân thủ và gửi cảnh báo qua Slack. Nếu tài nguyên vẫn không tuân thủ sau thời gian ân hạn 72 giờ, chính sách thứ hai mới thực hiện việc xóa.
Tích hợp CI/CD
Quản trị dài hạn không nên diễn ra trên laptop cá nhân của bạn. Hãy đưa các chính sách YAML vào một kho lưu trữ Git. Sử dụng GitHub Actions hoặc GitLab CI để chạy các chính sách này theo lịch trình—có thể là mỗi giờ cho các kiểm tra bảo mật và mỗi tuần một lần để dọn dẹp chi phí.
Lời kết
Quản trị cloud không phải là đóng vai “cảnh sát hạ tầng”. Đó là việc xây dựng một hệ thống rào chắn cho phép các lập trình viên di chuyển nhanh chóng mà không để cửa trước mở toang. Bằng cách coi chính sách như mã nguồn (policy as code), bạn ngừng việc phản ứng thụ động với các bất ngờ về hóa đơn và bắt đầu quản lý đám mây của mình một cách có chủ đích. Cloud Custodian biến một môi trường hỗn loạn thành một hệ sinh thái tự động và có thể dự đoán được.

