Lợi nhuận:
- Khả năng hiểu khái niệm IaC và chu trình làm việc của Terraform (khởi tạo, lập kế hoạch, áp dụng, trạng thái, mô-đun) và có trí tuệ nhân tạo tạo ra các bản nháp HCL an toàn
- Khả năng kiểm tra từng thay đổi bằng một kế hoạch trước khi áp dụng và nắm bắt các dòng phá hủy/thay thế bất ngờ
- Khả năng áp dụng các nguyên tắc giữ bí mật khỏi mã, giữ trạng thái an toàn và giảm thiểu quyền IAM
Trước đây, việc thiết lập máy chủ chỉ là nhấp chuột qua bảng điều khiển đám mây: tạo máy ảo, thiết lập mạng, thêm quy tắc bảo mật. Phương pháp này chậm, dễ xảy ra lỗi và không thể lặp lại — gần như không thể thiết lập cùng một môi trường lần thứ hai. Ngày nay, cơ sở hạ tầng được quản lý dưới dạng mã. IaC (Cơ sở hạ tầng dưới dạng mã) là một cách tiếp cận để mô tả các tài nguyên đám mây như máy chủ, mạng và cơ sở dữ liệu trong tệp văn bản thay vì theo cách thủ công. Các tệp này nằm trong phần kiểm soát phiên bản (Git); Bạn có thể biết ai đã thay đổi cái gì, khi nào và cái gì; Bạn có thể thiết lập cùng một cơ sở hạ tầng nhiều lần, theo cùng một cách, chỉ bằng một lệnh.
Công cụ IaC phổ biến nhất là Terraform. Terraform lấy các định nghĩa bạn viết bằng ngôn ngữ có thể đọc được gọi là HCL (Ngôn ngữ cấu hình HashiCorp - ngôn ngữ cấu hình của Terraform), dịch chúng sang API của nhà cung cấp đám mây (AWS, Azure, GCP) và tạo tài nguyên. AI biết rất rõ về HCL và tạo ra các khối phức tạp một cách nhanh chóng. Nhưng trong IaC, cái giá phải trả cho một sai lầm là rất cao: một định nghĩa sai có thể xóa sạch toàn bộ cơ sở dữ liệu sản xuất. Đó là lý do tại sao nguyên tắc vàng trong Terraform là xem mọi thay đổi bằng một “kế hoạch” trước khi thực hiện nó.
Thời gian chạy của Terraform
Terraform hoạt động với ba lệnh cơ bản — biết đây là điều kiện tiên quyết để kiểm soát đầu ra AI:
- `terraform init`: Bắt đầu dự án, tải xuống các plugin nhà cung cấp cần thiết.
- `kế hoạch terraform`: So sánh tình hình hiện tại với tình huống mong muốn và hiển thị những gì cần thêm, những gì cần thay đổi, những gì cần xóa. Không thực hiện bất cứ điều gì. Đây là bước bảo mật quan trọng nhất.
- `terraform apply`: Thực tế áp dụng Kế hoạch, tạo/sửa đổi tài nguyên.
Ngoài ra, có hai khái niệm rất quan trọng. State (tệp trạng thái): Đây là tệp mà Terraform lưu giữ trạng thái hiện tại của tài nguyên mà nó quản lý; Nó thường được cất giữ trong một nhà kho hẻo lánh và có khóa để hai người không thể thay đổi hoặc phá hủy nó cùng một lúc. Mô-đun: Gói cấu hình có thể tái sử dụng; Ví dụ: bạn có thể sử dụng mô-đun "thiết lập mạng" trong nhiều dự án.
Mẹo: Dấu hiệu nguy hiểm nhất trong đầu ra Terraform là các dòng hủy hoặc -/+ (thay thế) trong đầu ra kế hoạch. Điều này có nghĩa là tài nguyên sẽ bị xóa. Nếu bạn thấy một kế hoạch bị phá hủy bất ngờ, đừng bao giờ áp dụng, trước tiên hãy hiểu lý do tại sao nó lại xuất hiện.
Từng bước: Viết IaC bằng AI
- Làm rõ cơ sở hạ tầng mong muốn. Hãy cụ thể như "một VPC, hai mạng con, một nhóm bảo mật và một t3.micro EC2 trên eu-central-1".
- Chỉ định nhà cung cấp và phiên bản. Đám mây nào, Terraform và phiên bản nhà cung cấp nào? Nếu bạn không chỉ định phiên bản, AI có thể trả về cú pháp lỗi thời/không tương thích.
- Có dự thảo HCL được sản xuất. Cũng yêu cầu các biến và kết quả đầu ra.
- Đưa Bí mật ra ngoài. Các giá trị như mật khẩu và khóa phải được chuyển đến biến và kho bí mật, không phải mã.
- Chạy `init` + `kế hoạch`. Đọc kế hoạch đầu ra từng dòng; Kiểm tra việc xóa bất ngờ.
- Bắt đầu nhỏ, thực hiện dần dần. Trước tiên hãy áp dụng nó trong tài khoản/môi trường thử nghiệm riêng biệt.
Bảo mật: Rủi ro cụ thể của IaC
IaC vừa mạo hiểm vừa mạnh mẽ. Ba điểm quan trọng:
- Có một bí mật trong hồ sơ trạng thái. Trạng thái Terraform đôi khi giữ các giá trị nhạy cảm, chẳng hạn như mật khẩu cơ sở dữ liệu, ở dạng văn bản gốc. Không bao giờ đặt Trạng thái vào kho lưu trữ công cộng; Sử dụng chương trình phụ trợ từ xa được mã hóa và hạn chế truy cập.
- Không nhúng bí mật vào HCL. Các dòng như pass="prod123" được ghi vĩnh viễn vào lịch sử Git. Thay vào đó, hãy sử dụng một biến và đưa ra giá trị trong thời gian chạy từ biến môi trường (TF_VAR_...) hoặc kho bí mật.
- Quyền IAM rất rộng. AI đôi khi tạo ra các khối như Action: "*" (cho phép mọi thứ) để "làm cho nó hoạt động". Đây là một lỗ hổng; thu hẹp quyền đến mức tối thiểu cần thiết.
Chú ý: Khi một bí mật được đưa vào lịch sử Git, bí mật đó vẫn nằm trong quá khứ và có thể bị xâm phạm, ngay cả khi bạn xóa tệp. Nếu bạn cam kết nhầm, hãy hủy bỏ và xoay bí mật ngay lập tức; Chỉ xóa là không đủ.
Bảng ký hiệu kế hoạch rủi ro
bản in kế hoạch
Ý nghĩa
phải làm gì
+tạo
Tài nguyên mới sẽ được thêm vào
Nói chung là an toàn, hãy xem lại
~ cập nhật tại chỗ
Nguồn sẽ thay đổi trên trang web
Xác minh tác động (sẽ có sự cố ngừng hoạt động không?)
-/+ thay thế
Sẽ bị xóa và tạo lại
THẬN TRỌNG: có thể xảy ra mất dữ liệu
- phá hủy
Tài nguyên sẽ bị phá hủy
DỪNG: không bao giờ nộp đơn nếu bạn không mong đợi nó
ba trường hợp nhỏ
Trường hợp 1 - 2 ngày làm việc trong 3 giờ. Một nhóm định viết Terraform để thiết lập môi trường thử nghiệm mới (VPC, mạng con, cơ sở dữ liệu RDS, cụm ECS) nhưng họ mới chuyển sang HCL. Họ mô tả kiến trúc và các phiên bản của AI và tạo ra một bản thiết kế mô-đun. Họ đã xác minh từng mô-đun theo kế hoạch và thiết lập và chạy nó trong 3 giờ; Họ sẽ mất hai ngày để thử nghiệm và sửa lỗi thủ công.
Trường hợp 2 - kế hoạch bị xóa. Một kỹ sư đã chạy một kế hoạch mà không áp dụng mã cập nhật do AI tạo. Đầu ra chứa -/+ thay thế cho cơ sở dữ liệu sản xuất - AI đã cố gắng thay thế một trường không thể thay thế, nghĩa là xóa và tạo lại cơ sở dữ liệu. Kỹ sư đã ngừng áp dụng và thay đổi phương pháp an toàn. Thói quen lập kế hoạch đã ngăn ngừa được thảm họa.
Trường hợp 3 - rò rỉ bí mật bị chôn vùi. Một đàn em, YZ đã cấp db_password = "S3cret!" Anh ấy đã cam kết đúng đường và đẩy nó. Bị bắt khi xem xét mã; Mật khẩu ngay lập tức bị hủy và thay đổi, giá trị được chuyển sang một biến và được cung cấp từ kho bí mật. Bài học: Không bao giờ có bí mật văn bản gốc trong HCL.
Bốn mẫu có thể sao chép
1) Tạo dự thảo cơ sở hạ tầng:
Viết cơ sở hạ tầng sau trên [CLOUD: AWS] với Terraform (phiên bản ~> 1.7): [ DANH SÁCH NGUỒN]. Vùng [X]. Quy tắc:- Biến tất cả các giá trị nhạy cảm, không nhúng chúng vào HCL.- Sửa phiên bản nhà cung cấp (required_providers).- Giảm thiểu quyền IAM, không sử dụng "*".- Trả về [X, Y] làm đầu ra. Cung cấp mã theo mô-đun và kèm theo giải thích.
2) Giải thích kết quả kế hoạch:
Phân tích đầu ra 'kế hoạch địa hình' bên dưới. Liệt kê cho tôi:(1) những tài nguyên nào đã được thêm/thay đổi/XÓA,(2) các hàng có nguy cơ mất hoặc gián đoạn dữ liệu,(3) 3 câu hỏi tôi nên hỏi trước khi đăng ký. Kế hoạch: [OUTPUT]
3) Kiểm tra HCL hiện có để bảo mật:
Kiểm tra mã Terraform sau để biết tính bảo mật: bí mật được nhúng, quyền IAM quá rộng, quy tắc mạng mở (0.0.0.0/0), bộ nhớ không được mã hóa? Viết mỗi phát hiện theo thứ tự tầm quan trọng và sự điều chỉnh. Mã số: [HCL]
4) Chuyển đổi mã lặp lại thành mô-đun:
Chuyển đổi mã Terraform lặp đi lặp lại sau đây thành một mô-đun có thể tái sử dụng: giá trị nào phải là biến, giao diện mô-đun nên là gì? Cũng hiển thị cách sử dụng ví dụ. Mã số: [HCL]
Dấu nhắc yếu / Dấu nhắc mạnh
Yếu: "Tạo cơ sở dữ liệu với Terraform."
Kết quả: không rõ cloud nào, engine nào, phiên bản nào, có mã hóa hay không; Với cú pháp cũ, AI có thể cung cấp một ví dụ có sẵn công khai để nhúng mật khẩu vào mã.
Mạnh: "Tạo phiên bản RDS PostgreSQL 15 trên AWS với Terraform ~> 1.7. Tạo biến mật khẩu, không nhúng nó vào mã. Bộ nhớ được mã hóa, chỉ có thể truy cập từ mạng con riêng tư, không phải công khai. Sửa phiên bản nhà cung cấp. Trả về điểm cuối làm đầu ra."
Sự khác biệt: lời nhắc thứ hai cung cấp công cụ, phiên bản, mã hóa, ràng buộc mạng và quy tắc bí mật - đầu ra được bảo mật và gần với sản phẩm.
Những lỗi thường gặp
- Để `đăng ký` mà không lập một `kế hoạch`. Sai lầm đắt giá nhất trong IaC; luôn lên kế hoạch trước.
- Nhúng bí mật vào HCL. Tạo rò rỉ vĩnh viễn vào lịch sử Git.
- Lưu trữ trạng thái không an toàn. Trạng thái công khai, không được mã hóa, không khóa là một thảm họa.
- Không sửa phiên bản. Việc sử dụng nhà cung cấp mà không chỉ định phiên bản sẽ dẫn đến những lỗi bất ngờ trong tương lai.
- *`Hành động: Quyền rộng rãi chẳng hạn như ""`.** Vi phạm nguyên tắc đặc quyền tối thiểu.
- Bỏ qua sự `hủy diệt` bất ngờ. Áp dụng các dòng xóa trong Kế hoạch mà không cần thắc mắc.
Tóm lại
IaC biến cơ sở hạ tầng thành mã có thể lặp lại, có thể phiên bản và có thể kiểm tra được; Công cụ phổ biến nhất là Terraform. AI nhanh chóng tạo ra các sơ khai HCL nhưng bạn phải cung cấp phiên bản, thông tin chi tiết dành riêng cho đám mây và các quy tắc bảo mật. Quy tắc không thể sai lầm trong Terraform: xem mọi thay đổi theo kế hoạch, truy vấn các thao tác xóa không mong muốn, giữ bí mật khỏi mã và giữ trạng thái an toàn. Các dòng hủy và thay thế trong đầu ra của kế hoạch là những nơi cần được đọc cẩn thận nhất.
Nhiệm vụ ứng dụng
Yêu cầu AI tạo cơ sở hạ tầng nhỏ (ví dụ: nhóm lưu trữ và chính sách truy cập) bằng cách sử dụng mẫu "Tạo bản phác thảo cơ sở hạ tầng" ở trên. Sau đó: (1) yêu cầu mẫu "kiểm tra" kiểm tra các quyền bí mật hoặc * được nhúng trong mã; (2) nếu có thể, hãy chạy init + plan trong tài khoản thử nghiệm và đọc đầu ra kế hoạch bằng mẫu "giải thích kế hoạch"; (3) lưu ý bất kỳ sự xóa/thay đổi không mong muốn nào.
danh sách kiểm tra
- [ ] Tôi đã thêm đám mây, phiên bản Terraform/nhà cung cấp và các ràng buộc về mã hóa/mạng vào lời nhắc của mình.
- [ ] Không có bí mật văn bản gốc trong mã; biến giá trị chính xác.
- [ ] Tôi đã thu hẹp IAM/quyền xuống mức tối thiểu, * Tôi không sử dụng nó.
- [ ] Tôi đã chạy kế hoạch trước khi áp dụng và đọc từng dòng đầu ra.
- [ ] Tôi đã xác minh rằng không có sự thay thế/hủy bỏ bất ngờ nào trong Kế hoạch.
- [ ] Tôi chắc chắn rằng trạng thái được lưu giữ trong phần phụ trợ được mã hóa, khóa và hạn chế.