Nguyên tắc số một: rotate trước, dọn lịch sử sau. Nhiều người làm ngược — mất hàng giờ viết lại git history trong khi key vẫn đang sống và đã bị bot quét từ vài phút sau lúc push.
Thứ tự xử lý:
1. Coi như đã lộ hoàn toàn. Repo private, commit đã bị revert, không ai để ý — đều không thay đổi kết luận.
2. Rotate ngay: tạo key mới, cập nhật nơi lưu secret của các môi trường, deploy, rồi thu hồi key cũ. Nếu nhà cung cấp cho phép, revoke trước và chấp nhận downtime ngắn.
3. Điều tra dấu vết: xem audit log của dịch vụ trong khoảng từ lúc commit tới lúc revoke — có request từ IP lạ không, có tài nguyên nào bị tạo/xoá không. Đây là bước quyết định sự cố này có phải báo cáo lên trên hay không.
4. Dọn lịch sử: git filter-repo (hoặc BFG) rồi force-push, yêu cầu mọi người re-clone. Lưu ý điều này không xoá được các fork, bản clone đã tồn tại và cache của GitHub — nên nó chỉ là dọn dẹp, không phải biện pháp khắc phục.
5. Chặn tái diễn: bật secret scanning + push protection, thêm hook quét local, và xem lại vì sao secret production lại nằm trong tầm tay lúc code.
Các nhà cung cấp lớn (AWS, Stripe, GitHub) có chương trình quét công khai và có thể tự vô hiệu hoá key bị lộ — nhưng đừng phụ thuộc vào đó.