AILapTrinh.comAI Lập Trình
An toàn mã nguồn và khoá bí mật

Giới hạn quyền tác tử AI trên máy và kho mã: hộp cát, lệnh được phép, quyền hẹp

Tác tử AI chạy lệnh, sửa tệp, đẩy mã với quyền của bạn. Cách đặt hộp cát, danh sách lệnh được phép, mã truy cập quyền hẹp, nhánh bảo vệ để sai sót nhỏ.

Server rack aisle in a small data room in Bac Ninh, a technician seen from behind holding a laptop with a blank screen, cool blue lighting, shallow depth of field

Tác tử AI lập trình làm việc với đúng quyền bạn cấp cho nó: thường là toàn bộ quyền của tài khoản bạn trên máy, cộng với mọi mã truy cập đang có trong môi trường. Nguyên tắc an toàn là cấp quyền tối thiểu đủ cho việc: chạy trong hộp cát tách khỏi máy chính, chỉ cho phép một danh sách lệnh, dùng mã truy cập kho mã chỉ ghi được nhánh riêng, và bảo vệ nhánh chính bằng quy tắc của nền tảng.

Bài này không bàn cách giao việc cho tác tử hay cách làm việc nhóm cùng nó (có danh mục riêng), mà tập trung vào câu hỏi bảo mật: nếu tác tử hiểu sai, bị lừa bởi nội dung độc, hay đơn giản là chạy nhầm một lệnh, thiệt hại lớn tới đâu, và làm sao để thiệt hại đó nhỏ. Tên tuỳ chọn cụ thể khác nhau giữa các công cụ; kiểm tài liệu hiện hành của công cụ bạn dùng.

Tác tử thực ra có quyền gì

Khi bạn chạy một tác tử dòng lệnh trong thư mục dự án, nó là một tiến trình chạy dưới tài khoản người dùng của bạn. Tuỳ cấu hình, nó đọc được mọi tệp mà bạn đọc được, không chỉ trong thư mục dự án: thư mục cá nhân, khoá SSH, tệp cấu hình công cụ dòng lệnh đám mây có lưu thông tin đăng nhập, lịch sử lệnh. Nếu được phép chạy lệnh, nó chạy được mọi lệnh mà bạn chạy được, với cùng biến môi trường.

Tác tử trong trình soạn thảo có cùng câu chuyện, chỉ khác giao diện. Tác tử chạy trên dịch vụ đám mây để tự mở yêu cầu gộp mã thì có quyền theo mã truy cập kho mã mà bạn cấp cho nó, và mã truy cập đó thường được tạo vội với quyền rộng nhất cho chắc chạy.

Phần lớn sự cố với tác tử không đến từ ác ý mà từ hiểu sai: dọn thư mục build thành dọn nhầm thư mục khác, chạy lệnh đặt lại cơ sở dữ liệu trên kết nối đang trỏ tới máy chủ thật, đẩy đè nhánh để “giải quyết xung đột”. Mỗi lệnh đó với quyền rộng là một sự cố lớn; với quyền hẹp chỉ là một lần làm lại. Thiết kế quyền là thiết kế cho ngày tác tử sai, không phải ngày nó đúng.

Bốn lớp giới hạn và nên dùng khi nào

Không phải dự án nào cũng cần đủ bốn lớp. Bảng dưới giúp chọn theo mức độ nhạy cảm của dự án và mức tự chủ bạn muốn cho tác tử.

LớpLàm gìPhù hợp khi
Duyệt từng lệnhTác tử đề xuất lệnh, bạn đọc và cho phép từng lệnh hoặc từng nhóm lệnhMới dùng tác tử, dự án có dữ liệu thật trên máy, việc ngắn có bạn ngồi cạnh
Danh sách lệnh được phépCho chạy tự động một số lệnh an toàn như chạy kiểm thử, kiểm định dạng mã, xem trạng thái git; mọi lệnh khác vẫn phải duyệtĐã quen tác tử, muốn nó tự chạy vòng sửa và kiểm thử mà không hỏi liên tục
Hộp cátChạy tác tử trong container, máy ảo hoặc môi trường phát triển từ xa dùng một lần, chỉ gắn thư mục dự án, không có khoá thậtMuốn tác tử chạy lâu không giám sát, hoặc làm với mã từ nguồn chưa tin cậy
Quyền trên kho mãMã truy cập chỉ cho một kho, chỉ ghi được nhánh riêng, không có quyền quản trị; nhánh chính được bảo vệTác tử tự đẩy mã và mở yêu cầu gộp mã

Một sai lầm hay gặp là bật chế độ cho phép mọi lệnh trên máy chính vì duyệt từng lệnh thấy phiền. Nếu muốn tác tử tự chủ hơn, chuyển sang hộp cát thay vì nới quyền trên máy chính. Hộp cát là thứ cho phép bạn yên tâm bỏ phần duyệt, không phải ngược lại.

Dựng hộp cát đơn giản cho tác tử

Cách dưới đây dùng container, phổ biến và dựng được trong một buổi. Môi trường phát triển từ xa hay máy ảo cũng theo cùng nguyên tắc.

  1. Tạo ảnh container có đúng công cụ dự án cần: ngôn ngữ, trình quản lý gói, công cụ kiểm thử, và tác tử AI. Không cài thêm công cụ đám mây có thông tin đăng nhập.
  2. Chỉ gắn thư mục dự án vào container. Không gắn thư mục cá nhân, không gắn thư mục khoá SSH, không gắn socket điều khiển container của máy chính.
  3. Truyền vào container đúng một khoá cho dịch vụ AI mà tác tử cần, tốt nhất là khoá riêng có hạn mức. Không truyền biến môi trường của máy chính.
  4. Giới hạn mạng nếu công cụ cho phép: chỉ cho tới dịch vụ AI và kho gói cần thiết. Tác tử không cần truy cập mạng nội bộ công ty.
  5. Cho cơ sở dữ liệu thử nghiệm chạy trong container riêng với dữ liệu giả; không để chuỗi kết nối tới cơ sở dữ liệu thật trong môi trường này.
  6. Sau mỗi phiên, xem thay đổi trong thư mục dự án bằng git diff trước khi commit từ máy chính. Container có thể bỏ đi và dựng lại.

Một số tác tử có sẵn chế độ chạy trong hộp cát hoặc có tài liệu hướng dẫn dựng container chính thức; dùng chúng nếu có, vì đã tính tới các chi tiết dễ quên. Kiểm tài liệu phiên bản bạn dùng.

Quyền trên kho mã: mã truy cập và nhánh bảo vệ

Mã truy cập theo từng kho, quyền hẹp. Nhiều nền tảng lưu trữ mã cho tạo mã truy cập giới hạn trong một kho và một nhóm quyền cụ thể. Cho tác tử loại mã này, chỉ quyền đọc mã, ghi nhánh, tạo yêu cầu gộp mã. Không cấp quyền quản trị kho, quyền xoá kho hay quyền với mọi kho của tổ chức.

Đặt hạn dùng. Mã truy cập có hạn dùng ngắn, gia hạn khi cần, giảm thiệt hại khi lỡ lộ. Ghi lại mã nào cấp cho tác tử nào, để thu hồi đúng chỗ.

Bảo vệ nhánh chính. Bật quy tắc không cho đẩy thẳng vào nhánh chính, bắt buộc qua yêu cầu gộp mã, bắt buộc kiểm tra tự động đạt và có ít nhất một người duyệt. Quy tắc này áp cho cả người lẫn tác tử, nên tác tử không thể vô tình đẩy đè lịch sử nhánh chính.

Tách tài khoản của tác tử. Nếu tác tử chạy tự động trên dịch vụ, dùng tài khoản máy hoặc ứng dụng riêng thay vì mã truy cập cá nhân của một lập trình viên. Nhật ký trên kho mã sẽ ghi rõ thay đổi do tác tử làm, và khi người đó nghỉ việc, tác tử không ngừng chạy theo.

Không cho tác tử sửa cấu hình quy trình tích hợp mà không duyệt. Tệp cấu hình quy trình tích hợp liên tục thường chạy với bí mật của dự án. Một thay đổi ở đó có thể in bí mật ra nhật ký. Đặt quy tắc yêu cầu người duyệt riêng cho thư mục cấu hình này.

Những lệnh luôn nên phải duyệt

Dù đã có danh sách lệnh được phép, giữ nhóm lệnh dưới ở chế độ luôn hỏi. Đây là những lệnh có hậu quả khó đảo ngược.

  • Xoá tệp hoặc thư mục theo mẫu, đặc biệt xoá đệ quy.
  • Mọi thao tác git viết lại lịch sử hoặc đẩy đè: reset cứng, rebase trên nhánh đã đẩy, push có tuỳ chọn force.
  • Lệnh di chuyển cơ sở dữ liệu, đặt lại, xoá bảng, nhập dữ liệu hàng loạt.
  • Cài gói mới hoặc nâng phiên bản gói.
  • Lệnh gửi dữ liệu ra ngoài: tải tệp lên, gọi tới địa chỉ lạ, gửi thư.
  • Lệnh triển khai lên máy chủ thật, lệnh với công cụ dòng lệnh đám mây.
  • Thay đổi quyền tệp, sửa cấu hình hệ thống, sửa tệp ngoài thư mục dự án.

Khi tác tử đề xuất một lệnh trong nhóm này, đọc nó đủ chậm để hiểu từng tham số. Nếu không hiểu, hỏi tác tử giải thích trước khi cho chạy, hoặc tự chạy sau khi đã hiểu.

Dọn máy phát triển trước khi cho tác tử chạy tự do hơn

Nếu chưa dựng hộp cát mà muốn nới quyền cho tác tử trên máy chính, ít nhất hãy biết trên máy đang có gì. Mở thư mục cá nhân và tự hỏi: những tệp nào ở đây mà một chương trình chạy dưới tên mình đọc được thì nguy hiểm? Danh sách thường gồm khoá SSH, tệp lưu thông tin đăng nhập của công cụ dòng lệnh đám mây, tệp cấu hình kết nối cơ sở dữ liệu có mật khẩu, lịch sử lệnh có khoá gõ trực tiếp, các tệp .env của những dự án khác nằm cùng thư mục làm việc.

Một cách giảm rủi ro mà không cần container là tạo tài khoản người dùng riêng trên máy cho công việc có tác tử. Tài khoản này chỉ có thư mục các dự án đang làm, không có khoá SSH cá nhân của bạn, không đăng nhập công cụ đám mây bằng tài khoản quản trị. Hệ điều hành sẽ tự ngăn tác tử đọc thư mục của tài khoản chính.

Với khoá SSH dùng để đẩy mã, cân nhắc dùng khoá riêng cho máy hoặc tài khoản có tác tử, chỉ thêm vào kho cần thiết, có cụm mật khẩu và chạy qua trình giữ khoá yêu cầu xác nhận khi dùng. Khi đó, mỗi lần có gì định đẩy mã, bạn được hỏi.

Theo dõi và rút kinh nghiệm

Giữ nhật ký phiên làm việc của tác tử nếu công cụ có: các lệnh đã chạy, tệp đã sửa, kết quả. Khi có gì bất thường, nhật ký là thứ đầu tiên cần xem. Với tác tử chạy tự động trên dịch vụ, nhật ký của nền tảng lưu trữ mã và của quy trình tích hợp ghi lại các thay đổi do tài khoản tác tử thực hiện.

Định kỳ, ví dụ mỗi tháng, xem lại danh sách lệnh được phép và mã truy cập đang cấp. Danh sách lệnh được phép có xu hướng phình ra theo thời gian vì mỗi lần thấy phiền lại thêm một lệnh. Rà lại giúp giữ nó gọn.

Khi tác tử làm sai một việc nghiêm trọng, ghi lại như một sự cố nhỏ: lệnh nào, vì sao tác tử chạy, lớp nào lẽ ra phải chặn. Thường câu trả lời là nới quyền quá tay ở một lúc vội. Sửa cấu hình, không chỉ nhắc nhau cẩn thận hơn.

Câu hỏi thường gặp

Tác tử đã có chế độ hỏi trước khi chạy lệnh, vẫn cần hộp cát à?

Chế độ hỏi đủ an toàn khi bạn đọc kỹ từng lệnh. Vấn đề là sau vài chục lần, người ta bấm cho phép theo phản xạ. Hộp cát bảo vệ đúng lúc sự chú ý của bạn giảm.

Chạy tác tử trong container có làm chậm công việc không?

Lần dựng đầu tốn thời gian, sau đó khác biệt thường nhỏ. Lợi ích là bạn có thể để tác tử chạy lâu hơn mà không phải ngồi duyệt, nên tổng thời gian thường giảm.

Có nên cho tác tử quyền đọc cơ sở dữ liệu thật để gỡ lỗi không?

Nên tránh. Dùng bản sao đã che dữ liệu cá nhân, hoặc dữ liệu giả có cùng cấu trúc. Nếu buộc phải xem dữ liệu thật, dùng tài khoản chỉ đọc, giới hạn bảng, và tự chạy truy vấn thay vì để tác tử chạy.

Mã truy cập cho tác tử nên có hạn dùng bao lâu?

Không có con số chung. Nguyên tắc là ngắn nhất mà không gây phiền quá mức, và có lịch gia hạn rõ ràng. Với tác tử dùng thử, hạn vài ngày là hợp lý; với tác tử chạy định kỳ, dùng tài khoản ứng dụng có cơ chế xoay vòng.

Tác tử chạy trên máy chủ thật để sửa lỗi gấp có được không?

Rủi ro cao. Nếu bắt buộc, làm trên bản sao của máy chủ, hoặc để tác tử đề xuất lệnh còn người có quyền tự chạy từng lệnh. Không để tác tử có quyền ghi trên hệ thống thật đang phục vụ khách.

Nhóm nhỏ ba người có cần làm đủ bốn lớp?

Không bắt buộc đủ. Tối thiểu nên có duyệt lệnh nguy hiểm, mã truy cập quyền hẹp và nhánh chính được bảo vệ. Hộp cát thêm vào khi bắt đầu cho tác tử chạy lâu không giám sát.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138