Bạn nhờ agent dọn giúp một mớ file rác đã cũ. Để nó tự làm cho nhanh, bạn cấp cho nó quyền xóa file. Nó dọn đúng cái cần dọn, gọn gàng.
Rồi một lúc sau bạn mới khựng lại: cái quyền "xóa file" bạn vừa trao không hề dừng ở mớ rác đó. Nó với tới mọi file mà tài khoản đó đụng được. Agent chỉ dùng quyền đó cho đúng việc bạn nhờ — lần này. Nhưng bạn vừa đưa một cây kéo cho một đứa không phân biệt được sợi chỉ thừa với sợi dây đang treo cái gì đó nặng.
01Với agent, mọi thứ trong tầm với đều phẳng như nhau
Gốc rễ không phải agent liều. Nó không có ý đồ phá. Gốc rễ là nó không cảm được đâu là vùng cấm.
Bạn có một bản đồ rủi ro ngầm trong đầu: bạn biết thư mục này là rác, thư mục kia là chỗ cả đội đang sống nhờ, và tay bạn tự rén lại trước cái thứ hai. Agent không có bản đồ đó. Mọi thứ trong tầm với của nó nằm trên cùng một mặt phẳng: một file rác và một file gốc trông giống hệt nhau dưới con mắt của một cái quyền "được xóa". Nó không thấy tấm biển "nguy hiểm" — vì với nó tấm biển đó không tồn tại.
Cộng thêm cái tính mất trí nhớ. Kể cả bạn có dặn "đừng đụng thư mục X" trong một câu, thì sang một nhánh suy nghĩ khác, một bước sau đó, nó hoàn toàn có thể quên mất câu dặn ấy. Một hàng rào dựng bằng "nhớ giùm tôi cái này" là hàng rào dựng trên đúng cái mà agent yếu nhất.
02"Dặn đừng đụng" là khóa cửa bằng lời. Hãy khóa bằng tường
Vậy nên cách nghĩ phải lật lại. Đừng cố làm agent ý thức hơn về vùng cấm. Hãy làm cho vùng cấm nằm ngoài tầm với — để cho dù nó có quên, có hiểu sai, có bị một dòng dữ liệu lạ xui khiến, thì cánh cửa kia vẫn đơn giản là không mở được.
✕ Cấp rộng rồi dặn đừng đụng
✓ Thu hẹp cái nó với tới
Cái khác biệt cốt lõi: hàng rào bên trái nằm trong đầu agent (nơi mọi thứ bốc hơi sau một đêm), hàng rào bên phải nằm trong cấu hình (nơi nó đứng yên kể cả khi không ai nhớ tới).
03Ba nước giũa cái tầm với nhỏ lại
Thu hẹp không có nghĩa là trói agent đến mức vô dụng. Nó có nghĩa là cấp đúng cỡ. Ba nước này áp được cho gần như mọi lần trao quyền:
Phần lớn việc chỉ cần đọc, không cần sửa. Bắt đầu bằng quyền chỉ-đọc; chỉ mở quyền ghi/xóa khi việc thật sự đòi, và mở đúng chỗ đó thôi.
"Việc này cần với tới đúng cái gì?" Cho nó một thư mục thì đừng cho cả ổ; cho một dự án thì đừng cho cả tài khoản. Tầm với hẹp lại là bán kính sai sót hẹp lại.
Mật khẩu, khóa, token thật đừng nằm trong cái ngữ cảnh agent đọc được. Cái nó không nhìn thấy là cái nó không thể vô tình dùng — hay vô tình gửi đi.
Cả ba đều trả lời cùng một câu hỏi — "cái này có thực sự cần nằm trong tầm với không?" — và mặc định trả lời là "không, cho tới khi việc đòi". Cấp quyền theo kiểu nới-dần an toàn hơn nhiều so với cấp rộng rồi rút.
04Cái giá của một lần với quá tay
Vì sao đáng làm phiền tới mức này, khi phần lớn lần chạy chẳng có gì xảy ra? Vì sự bất đối xứng. Cấp hẹp tốn của bạn thêm vài giây mỗi lần, và đôi khi một lần mở thêm quyền giữa chừng. Cấp rộng thì chín mươi chín lần trôi qua êm — rồi lần thứ một trăm, một câu hiểu lệch hoặc một dòng dữ liệu xui khiến biến cái quyền rộng đó thành một thứ đã xóa, đã ghi đè, đã gửi đi.
Bạn không phải chọn giữa "thả lỏng cho nó làm được việc" và "trói chặt cho an toàn". Khoanh đúng tầm với cho bạn cả hai: agent vẫn chạy tự do bên trong phạm vi của nó, còn cái ngoài phạm vi thì khỏi cần canh, vì nó vốn không với tới. Đây cũng chính là phiên bản ngoài-đời của việc đọc bán kính ảnh hưởng trước khi sửa — chỉ khác là ở đây bạn vẽ cái bán kính đó trước, bằng chính cái chìa khóa bạn trao. Đứa em cầm kéo kia không cần bạn dặn sợi nào đừng cắt. Nó cần bạn chỉ đưa cho nó đúng đoạn chỉ thừa.