Đơn vị 6 / 11

Quản lý cơ sở hạ tầng dưới dạng mã (IaC): Kiểm soát Terraform, Ansible và Plan

Lợi nhuận:

  • Khả năng tạo mã IaC (Terraform, Ansible) bằng trí tuệ nhân tạo với các quyền hạn hẹp nhất và các giá trị mặc định an toàn cũng như hiểu cách tiếp cận khai báo
  • Khả năng ngăn ngừa mất dữ liệu bằng cách đọc và ghi lại các dòng xóa và buộc thay thế trước khi áp dụng đầu ra kế hoạch/kiểm tra
  • Khả năng ngăn chặn rò rỉ bí mật bằng cách giữ cho tệp trạng thái được mã hóa, khóa trong phần phụ trợ từ xa và chia các thay đổi thành các bước nhỏ, có thể đảo ngược

Quản lý cơ sở hạ tầng dưới dạng mã (IaC): Kiểm soát Terraform, Ansible và Plan bằng AI

Trước đây, việc thiết lập máy chủ được thực hiện bằng các cú nhấp chuột, lệnh và ghi chú cá nhân thủ công; Kết quả là các máy chủ "bông tuyết" không thể sản xuất được mà không ai biết chính xác cách thiết lập. Cơ sở hạ tầng dưới dạng mã (IaC) là phương pháp chấm dứt sự hỗn loạn này: máy chủ, mạng, quy tắc bảo mật được xác định không phải bằng tay mà bằng các tệp văn bản (mã) có thể phiên bản. Khi bạn chạy mã này, cơ sở hạ tầng sẽ được thiết lập chính xác như bạn đã viết — giống nhau, được ghi lại và có thể lặp lại mọi lúc. Các công cụ phổ biến nhất là Terraform và CloudFormation dành cho cơ sở hạ tầng đám mây và Ansible dành cho cấu hình máy chủ. Ở đây AI rất thành thạo trong việc viết, giải thích và xem xét mã IaC này. Nhưng sức mạnh của IaC cũng chính là mối nguy hiểm của nó: một đường sai có thể xóa sạch toàn bộ cơ sở hạ tầng; nên AI viết mã, bạn đọc “kế hoạch”, phê duyệt và thực hiện.

Trong phần này, chúng ta sẽ thảo luận về cách tiếp cận khai báo, kế hoạch/ứng dụng phân biệt, an ninh nhà nước và quyền bình đẳng; Bạn sẽ học cách tạo IaC bằng AI và kỹ năng quan trọng nhất, "kiểm soát kế hoạch".

Suy nghĩ tuyên bố: “nếu như” chứ không phải “làm thế nào”

Hầu hết các công cụ IaC đều mang tính khai báo: bạn mô tả trạng thái cuối cùng của hệ thống ("giả sử 3 máy chủ web, 1 bộ cân bằng tải"), công cụ tự tính toán cách đạt được trạng thái đó. Điều này khác với việc viết kịch bản ("làm cái này, sau đó làm cái kia" từng bước một). Ưu điểm lớn của cách tiếp cận khai báo là tính tạm thời: ngay cả khi bạn chạy mã mười lần, kết quả vẫn như nhau, vì công cụ sẽ kiểm tra xem trạng thái mong muốn đã tồn tại chưa và nếu có thì nó sẽ không chạm vào trạng thái đó. Hãy nhớ sự khác biệt này khi bạn viết IaC cho AI: bạn nói "hãy để trạng thái cơ sở hạ tầng này", chứ không phải "chạy các lệnh này".

Lập kế hoạch/áp dụng: lan can an toàn quan trọng nhất

Tính năng cứu mạng của IaC là bước lập kế hoạch. Trong Terraform, terraform plan, trong Ansible, --check chế độ tạo bản xem trước "điều gì sẽ thay đổi nếu tôi áp dụng nó" trước khi chạy mã: "2 tài nguyên sẽ được thêm, 1 tài nguyên sẽ thay đổi, 0 sẽ bị xóa". Đây là cách duy nhất để so sánh ý định của bạn với thực tế trước khi thực hiện. Quy tắc quan trọng: không bao giờ nộp đơn mà không đọc kế hoạch. Đặc biệt chú ý đến các dòng "hủy diệt"; Nếu bạn thấy "12 sẽ bị xóa" thay vì "1 sẽ bị thay đổi" do lỗi đánh máy thì kế hoạch đã cứu bạn khỏi thảm họa. Sau khi in mã cho AI, hãy yêu cầu AI nói "kiểm tra từng dòng đầu ra của kế hoạch với tôi, đánh dấu mọi dòng có chứa thao tác xóa/tạo lại."

Thận trọng: Một số thay đổi đối với Terraform "hủy và tạo lại" tài nguyên thay vì "cập nhật tại chỗ". Điều này có nghĩa là mất dữ liệu cho cơ sở dữ liệu. Bỏ qua -/+ hoặc "bắt buộc thay thế" trong đầu ra của kế hoạch là một trong những sai lầm đắt giá nhất.

Hồ sơ nhà nước: hồ sơ bí mật và sự thật

Các công cụ như Terraform giữ trạng thái hiện tại của cơ sở hạ tầng mà chúng quản lý trong một tệp trạng thái. Tập tin này rất quan trọng vì hai lý do. Đầu tiên, nó có thể chứa các bí mật (mật khẩu cơ sở dữ liệu, khóa có thể ở trạng thái ở dạng bản rõ); Do đó, đừng bao giờ dán trạng thái vào kho lưu trữ công cộng hoặc AI, hãy giữ nó ở phần phụ trợ từ xa được mã hóa và hạn chế quyền truy cập. Thứ hai, nếu nhà nước bị hỏng hoặc bị mất, phương tiện sẽ mất đi sự liên kết giữa cơ sở hạ tầng thực và cơ sở hạ tầng tưởng tượng; Vì vậy, việc sao lưu trạng thái và cơ chế khóa (khóa ngăn chặn hai người phá cùng lúc) là rất cần thiết.

Từng bước: Bảo mật IaC bằng AI

  1. Mục đích và nhà cung cấp của nhà nước. “2 máy chủ trên AWS, với Terraform, ở khu vực này, quy mô này và một nhóm bảo mật.” Nếu đám mây, công cụ và phiên bản rõ ràng, AI sẽ tạo ra cú pháp chính xác.
  2. Yêu cầu mặc định bảo mật. "Mở nhóm bảo mật, kích hoạt mã hóa, trích xuất bí mật thành biến, cấp quyền truy cập công khai." AI có thể tạo các mẫu rời theo mặc định.
  3. Đọc và hiểu mã. Hiểu mọi tài nguyên, mọi quyền, từng dòng một. Đừng áp dụng quyền mà bạn không hiểu.
  4. Nhận một kế hoạch và kiểm tra nó. Chạy plan/--check, kiểm tra đầu ra bằng AI, đánh dấu các dòng xóa và xây dựng lại.
  5. Áp dụng nhỏ và có thể đảo ngược. Thực hiện một sự thay đổi lớn theo từng phần nhỏ, không phải tất cả cùng một lúc. Biết đường về từng bước.
  6. Bảo vệ Nhà nước. Sử dụng chương trình phụ trợ và khóa từ xa, được mã hóa; Không bao giờ rò rỉ trạng thái.

ba trường hợp nhỏ

Trường hợp 1 - Kế hoạch đã khôi phục cơ sở dữ liệu. Một kỹ sư muốn tăng kích thước cơ sở dữ liệu bằng mã Terraform mà anh ấy tạo ra bằng AI. Trong khi anh ấy mong đợi "1 để thay đổi" trong đầu ra của sơ đồ địa hình, anh ấy thấy "1 để hủy, 1 để thêm" — tham số anh ấy chọn đang kích hoạt quá trình xây dựng lại chứ không phải cập nhật tại chỗ, nghĩa là tất cả dữ liệu sẽ bị xóa. Kiểm soát kế hoạch đã ngăn chặn việc mất dữ liệu không thể đảo ngược trước khi nó được triển khai.

Trường hợp 2 - Trả lại từ mặc định lỏng lẻo. Một nhóm đã yêu cầu AI cung cấp mã tường lửa. Để chạy ví dụ, AI đã tạo ra một quy tắc đơn giản là 0.0.0.0/0, nghĩa là "công khai trên internet". Kỹ sư nhận thấy điều này khi đọc mã và thu hẹp quyền truy cập chỉ vào phạm vi IP doanh nghiệp. Nếu nó được triển khai mà không được kiểm tra, cơ sở dữ liệu sẽ được mở cho toàn bộ internet.

Trường hợp 3 - Ngăn chặn rò rỉ trạng thái. Một thành viên cấp dưới chuẩn bị dán nguyên vẹn tệp terraform.tfstate vào một công cụ công khai để giải quyết vấn đề về Terraform. Kỹ sư cao cấp đã dừng: trạng thái chứa mật khẩu cơ sở dữ liệu văn bản gốc. Thay vào đó, một bản tóm tắt được giải mã mô tả sự cố đã được chia sẻ và trạng thái được chuyển sang phần phụ trợ được mã hóa từ xa.

Bốn mẫu có thể sao chép

1) Tạo tài nguyên IaC (mặc định an toàn):

Vai trò của bạn: kỹ sư cơ sở hạ tầng đám mây cấp cao. [Đám mây, ví dụ: AWS] cho [công cụ, ví dụ: Terraform] tạo mã. Mục đích: [mục đích]. Quy tắc bảo mật: truy cập công khai (0.0.0.0/0) MỞ;bắt đầu với quyền hạn hẹp nhất; bật mã hóa; trích xuất bí mật thành các biến, không nhúng chúng vào mã; Kiểm tra các cài đặt có thể dẫn đến việc xóa/tạo lại. Giải thích từng nguồn bằng một nhận xét ngắn gọn.

2) Lập kế hoạch kiểm tra đầu ra:

Dưới đây là đầu ra [Kế hoạch Terraform/Kiểm tra Ansible]. Hãy cho tôi biết: (1) có bao nhiêu tài nguyên sẽ được thêm/thay đổi/xóa, (2) cũng đánh dấu các dòng "hủy" hoặc "bắt buộc thay thế" có nguy cơ mất dữ liệu, (3) liệt kê mọi thay đổi có vẻ bất ngờ hoặc nguy hiểm. Đầu ra: [kế hoạch]

3) Đánh giá bảo mật mã IaC:

Kiểm tra mã IaC sau để biết mức độ bảo mật: (1) có quyền truy cập/quyền quá rộng không, (2) mã hóa có bị tắt không, (3) có bí mật nào được nhúng trong mã không, (4) có tài nguyên nào có sẵn công khai không? Đề nghị sửa chữa cho mỗi phát hiện. Mã: [mã đeo mặt nạ]

4) Chia thay đổi thành các phần an toàn:

Tôi không muốn thực hiện sự thay đổi cơ sở hạ tầng lớn này [giải thích] cùng một lúc. Chia nó thành các bước nhỏ, độc lập để dễ dàng quay lại. Đối với mỗi bước: những thay đổi gì, tôi cần chú ý điều gì trong kế hoạch, làm cách nào để hoàn tác nếu có vấn đề?

Dấu nhắc yếu / Dấu nhắc mạnh

Dấu nhắc yếu:

Viết mã Terraform tạo máy chủ trên AWS.

Khu vực, kích thước, bảo mật, mạng, mã hóa không rõ ràng. AI tạo ra các mặc định lỏng lẻo nhất, rõ ràng nhất để hoạt động - nếu được đưa vào sản xuất, nó sẽ là một lỗ hổng.

Lời nhắc mạnh mẽ:

Vai trò của bạn: kỹ sư cơ sở hạ tầng đám mây cấp cao. Xác định máy chủ web bằng Terraform trên AWS eu-central-1: t3.small, chỉ từ dải IP công ty (tôi sẽ cung cấp cho nó một biến), cổng 443 mở, đĩa được mã hóa, không có quyền truy cập công khai, nhãn là bắt buộc. Bí mật được tiết lộ cho biến. Sau đoạn mã: Trước khi triển khai nó, hãy cho tôi biết 3 loại dòng tôi nên chú ý trong kế hoạch và giải thích đường dẫn quay lại.

Sân khấu

Rủi ro

lan can an toàn

viết mã

Mặc định lỏng lẻo (công khai)

Quyền hạn hẹp nhất + đọc

lập kế hoạch/kiểm tra

Xóa mà không nhận ra

Lập kế hoạch kiểm tra, tiêu hủy dấu vết

Áp dụng

Thay đổi lớn một lần

Các bước nhỏ, có thể đảo ngược

hành chính nhà nước

Men rò rỉ, biến dạng

Phần phụ trợ + khóa được mã hóa từ xa

Những lỗi thường gặp

  • Nộp đơn mà không đọc kế hoạch. Kế hoạch báo trước việc xóa bỏ và tái thiết; Nếu bỏ qua việc mất dữ liệu là điều khó tránh khỏi.
  • Không nhận thấy mặc định lỏng lẻo. Các phiên bản AI thường tạo ra 0.0.0.0/0; Nếu nó được chuyển sang sản xuất, điều đó có nghĩa là nguồn mở cho toàn bộ internet.
  • Trạng thái rò rỉ. Xuất tệp trạng thái sang AI hoặc kho lưu trữ mở sẽ làm lộ bí mật văn bản gốc.
  • Nhúng bí mật vào mã. Việc ghi mật khẩu vào mã IaC là sự rò rỉ dai dẳng trong lịch sử phiên bản mã.
  • Nhầm việc xây dựng lại với một bản cập nhật. Bỏ qua dòng thay thế lực sẽ dẫn đến mất dữ liệu trong cơ sở dữ liệu.
Mẹo: Ngay cả khi đưa kết quả kế hoạch cho AI xem xét, hãy đưa ra quyết định cuối cùng dựa trên kiến ​​thức của chính bạn chứ không phải văn bản kế hoạch. AI tóm tắt kế hoạch và đánh dấu các đường nguy hiểm; nhưng câu trả lời cho câu hỏi "việc xóa này có được chấp nhận không" tùy thuộc vào bối cảnh kinh doanh của bạn.

Tóm lại

IaC mang lại khả năng lặp lại và tài liệu bằng cách quản lý cơ sở hạ tầng bằng mã có thể phiên bản thay vì nhấp chuột thủ công. AI là một đối tác mạnh mẽ trong việc viết mã này, mô tả nó và xem xét nó để bảo mật. Nhưng sức mạnh của IaC chính là mối nguy hiểm của nó: một đường dây có thể xóa sạch toàn bộ cơ sở hạ tầng. Hãy suy nghĩ mang tính khai báo, bắt đầu với quyền hạn hẹp nhất, sửa các giá trị mặc định lỏng lẻo, giữ bí mật về mã và trạng thái. Lan can bảo vệ quan trọng nhất là bước lập kế hoạch/kiểm tra: không bao giờ thực hiện mà không đọc các dòng xóa và xây dựng lại. Giữ trạng thái được mã hóa, khóa và điều khiển từ xa. Mã là của AI, quyết định là của bạn.

Nhiệm vụ ứng dụng

Chọn mục tiêu cơ sở hạ tầng nhỏ (ví dụ: một máy ảo duy nhất và quy tắc bảo mật). Với mẫu "Tạo tài nguyên IaC" ở trên, hãy yêu cầu AI cung cấp mã có giá trị mặc định an toàn. Kiểm tra kỹ mã bằng mẫu "Đánh giá bảo mật mã IaC" và cố gắng tìm ít nhất một cài đặt lỏng lẻo. Nếu có thể, hãy chạy kế hoạch/--kiểm tra trên tài khoản thử nghiệm và xem lại kết quả đầu ra bằng mẫu "Kiểm tra đầu ra kế hoạch"; Xem có dòng xóa hoặc tạo lại không. Viết ra những phát hiện của bạn và cách bạn sẽ đảm bảo trạng thái trong 6 điểm.

danh sách kiểm tra

  • [ ] Tôi có chỉ định đám mây, công cụ và phiên bản cho AI và yêu cầu mã có quyền hạn hẹp nhất không?
  • [ ] Tôi đã kiểm tra mã để tìm các giá trị mặc định lỏng lẻo (0.0.0.0/0, mã hóa đóng) chưa?
  • [ ] Tôi đã trích xuất các bí mật của biến thay vì nhúng chúng vào mã chưa?
  • [ ] Tôi đã đọc kế hoạch/kiểm tra đầu ra và đánh dấu các dòng xóa trước khi áp dụng chưa?
  • [ ] Tôi đã đánh giá tác động mất dữ liệu của các dòng "thay thế lực lượng"/xây dựng lại chưa?
  • Không phải tôi đã mã hóa, khóa tệp trạng thái [ ] trong phần phụ trợ từ xa và rò rỉ nó ra ngoài sao?