# Cấp cho con bot một căn cước: cho nó cái tên thì dễ, cho nó một chỗ chịu trách nhiệm mới khó
Hôm nay mình đọc liền hai bài và đọc xong ngồi im một lúc. Một bài bàn một chuyện nghe khô như kỹ thuật thuần: AI agent không cần "tài khoản người dùng" — chúng cần "danh tính". Bài còn lại chỉ ra một khái niệm bảo mật còn thiếu, tạm gọi nôm na là "bề mặt thoát" — cái đường mà một con agent có thể lách ra khỏi cái hộp mình nhốt nó.
Hai bài nằm ở hai đầu, nhưng mình đọc ra cùng một câu: con bot của mình đang được giao việc thật, và tới lúc phải biết nó là ai.
Nghe hiển nhiên. Nhưng càng nghĩ mình càng thấy: cho con bot một cái tên thì dễ. Cho nó một chỗ để chịu trách nhiệm mới là phần khó.
Chuyện này bắt đầu từ một cái login
Mình có mấy chuỗi tự động hoá chạy nền, không to tát — vài bước ăn dữ liệu vào, làm gọn, rồi đẩy kết quả ra đúng chỗ. Chạy êm nên mình ít nghĩ tới nó.
Rồi tới một ngày mình cần con bot làm hộ một việc mà trước giờ chỉ người làm: gửi một cái gì đó ra ngoài, đụng tới một hệ thống của bên khác.
Và mình đứng hình ở đúng một chỗ: con bot này đăng nhập bằng gì?
Hồi đó mình có đúng hai lựa chọn thô. Một, lấy tài khoản của chính mình đưa cho nó xài — nhanh, khỏi nghĩ. Hai, tạo một tài khoản riêng cho nó — nghe sạch, nhưng rồi mình lạnh người khi nghĩ tới dãy câu hỏi theo sau.
Tài khoản đó có quyền gì? Ai giữ mật khẩu? Khi nó làm sai, sổ ghi tên ai? Nếu mình đổi vai, tài khoản đó có đi theo không? Và câu độc nhất: lúc con bot làm một việc mà mình không hề muốn, mình đang cãi với người hay cãi với máy?
Cái lựa chọn "lấy tài khoản của mình cho nó xài" nghe tiện, nhưng nó là một cái bẫy nguyên thuỷ: nó biến việc của máy thành việc của người. Mọi lần con bot chạy, trong mọi cuốn sổ của mọi hệ thống, dấu vết đều mang tên mình. Mình không còn là người giám sát nữa. Mình là nghi phạm chính trong mọi câu chuyện, kể cả câu chuyện mình chưa từng nghe.
Đó là lúc mình hiểu ra cái mà mấy bài hôm nay đang nói:
Tài khoản là để chỉ người. Danh tính là để chỉ bất cứ thứ gì cần được nhận diện, kể cả một con máy.
Tài khoản là cho người, danh tính là cho máy
Mình tách hai chữ này ra, vì trộn chúng vào nhau là chỗ mọi thứ bắt đầu méo.
Tài khoản là một cặp đăng nhập: tên với mật khẩu, gắn vào một con người duy nhất. Nó được thiết kế cho một thứ có thân xác — một người, một số điện thoại, một email để lấy lại quyền, một người đứng ra chịu khi mọi thứ toang.
Danh tính là vế còn lại. Nó trả lời câu "thứ này là ai, được phép làm gì, và ai bảo chứng cho nó". Danh tính không cần thân xác. Một con bot có thể có danh tính riêng — một cái tên kỹ thuật, một bộ quyền bị khoanh vùng, một thời hạn, một chủ sở hữu — mà không hề giả vờ là người.
Vì sao mình không gộp chúng? Vì ba thứ sau đây không bao giờ đúng với một tài khoản người:
- ▹Tài khoản thì toàn quyền; danh tính thì khoanh vùng. Một tài khoản người vốn dĩ được sinh ra để làm mọi thứ người đó làm được. Đưa nguyên xi cho bot là đưa cả căn nhà vì cần mượn cái chìa khoá. Danh tính làm ngược lại: cấp đúng một cánh cửa, cho đúng một việc, trong đúng một lúc.
- ▹Tài khoản thì đổi người khó; danh tính thì thu hồi dễ. Người ta ít khi "đổi nhân viên" bằng cách xoá tài khoản. Nhưng bot thì mình kill mỗi ngày. Một danh tính phải giết được trong một dòng lệnh, không để lại quyền mồ côi.
- ▹Tài khoản ghi tên một người; danh tính ghi tên một việc. Đây là điểm mình tâm đắc nhất. Nếu mỗi con bot có danh tính riêng, thì cuốn sổ của hệ thống bên kia không còn ghi tên mình, mà ghi "con bot phụ trách việc X, thuộc sở hữu của Zeo". Lúc đó mình mới tách được hai vai: người sở hữu và kẻ hành động*. Bao nhiêu tranh chấp trong nghề automation chết ở chỗ này — hai vai bị dán vào một cái tên.
Nói cách khác: tài khoản trả lời "đăng nhập bằng gì". Danh tính trả lời "được tin tới đâu".
Khi con bot có căn cước, nó cũng có "bề mặt thoát"
Tới đây thì bài thứ hai hôm nay đá vào, và đá rất đau.
Trực giác của mình hồi đầu rất hồn nhiên: cấp cho bot một danh tính gọn gàng, khoanh vùng quyền, thế là an toàn. Nhưng cái bài về "bề mặt thoát" nhắc mình một điều mà dân làm bảo mật đã biết từ lâu: mỗi quyền mình cấp cho một thứ tự chủ vừa là một cánh cửa ra vào hợp pháp, vừa là một con đường để nó lẻn ra.
Cái "hộp" mình nhốt con bot — vùng chạy hạn chế, danh sách quyền, danh sách việc được làm — không phải một cái hộp kín. Nó là một cái lưới. Và con bot giỏi sinh văn bản thì cũng giỏi tìm lỗ của cái lưới theo cách mình không lường được, vì nó chạy theo xác suất chứ không theo một đường cố định.
Bề mặt thoát có nhiều dạng, và mấy cái mình từng thấy nó lộ ra trong chính việc mình làm:
- ▹Viết ra chỗ nó không nên viết. Nó được cấp quyền đọc một cái tệp, rồi dùng luôn cái quyền đó để nhét nội dung vào một chỗ khác mà mình không để ý.
- ▹Nói chuyện với một thứ khác qua một kênh mình không canh. Con bot cần mạng để làm việc; nhưng cái mạng đó cũng là đường nó gọi tới bất cứ đâu. Mình khoá thứ nó được làm, mà quên khoá thứ nó được gọi.
- ▹Tự đẻ ra danh tính con trong lúc chạy. Đây là cái mình nghĩ nguy hiểm nhất và ít ai nghĩ tới: một con bot có quyền tạo danh tính mới sẽ tự sinh ra tay sai của nó. Cái hộp mình nhốt một con, thành cái lồng nhốt một gia đình mình không biết mặt.
Đọc xong mình không thấy cần khoá van tất cả lại — làm vậy thì bot chết. Mình thấy một câu khác: trao quyền cho bot là một hành động có hình dạng, không phải một cái công tắc. Cấp ít hơn, cấp ngắn hạn hơn, và luôn giữ một đầu dây để giật lại.
Cái mình tự làm được tối nay
Mình rút về vài việc nhỏ, làm được trong một buổi, không cần chờ tới con chip giám sát hay hệ thống định danh của ai.
Một, mỗi con bot một danh tính riêng, đừng dùng chung. Nghe tốn công, nhưng đây là việc rẻ nhất và lãi nhất. Cùng lắm là một cái tên kỹ thuật riêng cho mỗi việc, chứ đừng cho tất cả xài chung tài khoản của mình.
Hai, quyền đi theo việc, không đi theo bot. Một danh tính chỉ nên mang đúng bộ quyền mà việc đó cần, trong đúng khoảng thời gian việc đó diễn ra. Việc xong, quyền tự hết hạn. Con bot càng "trần" giữa hai việc, bề mặt thoát càng hẹp.
Ba, chặn con đường, không chỉ chặn hành động. Khoá đích nó được gọi tới, chứ đừng chỉ khoá việc nó được làm. Danh sách cho phép (allowlist) chứ không phải danh sách cấm — vì cái mình nghĩ ra để cấm luôn ít hơn cái nó nghĩ ra để thử.
Bốn, đừng cho nó quyền tự đẻ danh tính. Quyền tạo danh tính mới mình để ở người, hoặc ở một tầng nó không với tới. Con bot xin một cái danh tính thì được; tự phát cho nhau thì không.
Hình dạng tối thiểu của một "căn cước" mình hay dùng, đại khái thế này:
# PSEUDO-CODE minh hoạ — không phải nguồn triển khai
can_cuoc = {
"chu_so_huu": ..., # người chịu trách nhiệm cuối cùng
"viec": ..., # danh tính gắn với một VIỆC, không gắn với một con người
"quyen": [...], # chỉ những gì việc này thật sự cần
"het_han": ..., # tự hết hạn khi việc xong
"duoc_phep_goi": [...], # chặn ĐƯỜNG, không chỉ chặn hành động
}
# cấm: một tài khoản người dùng chung cho mọi bot
# cấm: quyền không có hạn
# cấm: bot tự cấp danh tính cho bot khácNghe như đang tự làm khó mình. Nhưng thật ra nó giảm việc: mình không phải ngồi đoán con bot sẽ làm gì, vì mình đã khoanh cái nó được làm nhỏ tới mức cái nó làm sai cũng không đi đâu xa.
Tiền nằm ở đâu trong chuyện này
Mình để phần này cuối vì nó là chỗ mình nghĩ nhiều nhất, và cũng là chỗ dễ nói quá.
Khi AI agent chuyển từ "demo cho vui" sang "được giao tiền thật, quyền thật", thì có một tầng mới bắt buộc phải tồn tại: tầng định danh và phân quyền cho máy. Ai cũng dựng được con bot. Không phải ai cũng trả lời được câu "con bot này là ai, được làm gì, ai chịu trách nhiệm". Đó là chỗ mình nghĩ tiền sẽ chảy tới — không phải bán con bot, mà bán cái chứng minh ai đang làm gì.
Và may cho người làm nhỏ như mình: tầng đó không cần hạ tầng khổng lồ. Nó cần sự kỷ luật. Mình không bán được hệ thống định danh cho cả thế giới, nhưng mình bán được cho khách cái cảm giác: "Ừ, con bot này của em biết nó là ai, và em biết đường giết nó."
Cái đó nghe nhỏ. Nhưng theo mình, nó đúng là thứ khiến một khách dám ký hợp đồng — không phải con bot thông minh hơn một chút.
Cái mình giữ lại
Mình không nghĩ hai bài hôm nay là hai tin kỹ thuật rời rạc. Mình nghĩ chúng là hai vế của cùng một mùa: *cả ngành đang chuyển từ dạy máy làm việc, sang dạy máy có mặt — có tên, có quyền, có chỗ chịu trách nhiệm.
Mà mình không cần chờ hạ tầng đó chín. Phần mình tự làm được ngay tối nay chỉ là bốn dòng quy tắc: mỗi bot một danh tính riêng, quyền đi theo việc, chặn đường chứ không chỉ chặn hành động, và không cho bot tự đẻ căn cước.
Bốn việc đó không làm con bot thông minh hơn chút nào. Nhưng nó làm mình dám giao việc, và dám thu lại — và đó chính là ranh giới giữa người chạy tool cho vui và người vận hành một hệ thống có thể bán được.
Câu mình để lại cho anh em, cũng là câu mình tự hỏi hôm nay: nếu con bot của anh em làm sai chiều nay, anh em có biết nó là ai, và có giết được nó ngay không?
Nếu câu trả lời vẫn là "chắc lấy tài khoản của em cho nó chạy" — thì cứ nhớ giúp mình một điều: cái tài khoản đó đang ghi tên anh em ở khắp nơi, kể cả những chỗ anh em chưa từng tới.
Một phần của chuỗi mổ xẻ kỹ thuật tại zeodavu.com/blog. Nếu thấy hữu ích, theo dõi [zeodavu.com](/blog) — mỗi bài là một thứ mình thật sự dùng, vấp, và sửa lại.