Postmortem: Removing all users from github.com/trivago

Bài tóm tắt trivago 2021 4. Điều chỉnh Độ khó: Dễ

trivago · 2021 · 4. Điều chỉnh · Độ khó: Dễ — bài gốc

Sự cố ở hệ quản lý truy cập (công cụ nội bộ), không phải hệ phục vụ khách. Wiki giữ vì đây là một ví dụ gọn về đồng bộ tự động khuếch đại một thao tác tay sai và về postmortem blameless công khai.

Bối cảnh

  • trivago áp dụng blameless postmortem từ 2019. Mọi nhân viên cần code, PR, CI hay tài liệu đều ở một GitHub organization; quyền vào được đồng bộ tự động từ một security group của Azure Active Directory (AAD) qua SAML SSO và SCIM: thêm vào group thì GitHub gửi lời mời, bỏ khỏi group thì bị gỡ khỏi organization.
  • Ngày 6/9/2021 bật bắt buộc 2FA; ai chưa bật bị gỡ tự động và phải mở ticket xin lại quyền.

Diễn biến

  • Để gửi lại lời mời cho một người, quy trình tay là: bỏ user khỏi group → chờ đồng bộ → thêm lại → chờ đồng bộ. Ở bước đầu, người làm xoá nhầm cả security group thay vì bỏ một user. SCIM làm đúng việc của nó: gỡ toàn bộ user của group khỏi GitHub, kể cả mọi organization owner là người.
  • Timeline (7/9/2021): 16:13 xoá group → 16:17 email "bạn đã bị gỡ" tới, người dùng báo trên Slack → 16:23 phát hiện group mất → 16:33 tạo lại group → 17:32 mọi người được mời lại. Sự cố 1 giờ 19 phút; mỗi người phải tự chấp nhận lời mời và bật lại SSH key, token cho SSO.
  • Phục hồi: AAD security group không khôi phục được. Một bot account dùng cho đồng bộ được gán thẳng vào ứng dụng (không qua group) nên còn quyền owner, nhờ đó trao lại quyền admin. Danh sách người bị gỡ lấy từ log email trên Exchange và log provisioning; GitHub tự khôi phục quyền repo và team khi thành viên cũ quay lại (vài trường hợp phải gán tay; 5–10/430 lời mời lỗi phải gửi lại).

Hành động khắc phục

  • Backup định kỳ, tự động danh sách thành viên security group.
  • Admin GitHub gán thẳng vào ứng dụng, không qua group, để không bị gỡ cùng lúc.
  • Xem lại quyền trong AAD; thao tác phá huỷ đòi đăng nhập lại bằng tài khoản khác.
  • Tự động hoá quy trình xin lại quyền (cổng self-service) để bỏ thao tác tay lặp lại.

Bài học cho SWE

  • Theo trivago, nguyên nhân gốc là lỗi người trong một việc tay lặp lại; việc lặp lại sớm muộn sẽ sai, nên tự động hoá nó (Tự động hoá vận hành và auto-remediation).
  • Đồng bộ tự động không phân biệt "xoá nhầm" và "xoá thật"; một thao tác nhỏ ở nguồn thành tác động toàn bộ ở đích. Thao tác có blast radius lớn cần bước xác nhận hay quyền riêng.
  • Giữ một đường vào khẩn cấp nằm ngoài cơ chế tự động (bot account, admin gán trực tiếp) (Sự cố và postmortem).
  • Kiểm tra trước: thứ gì không có cơ chế khôi phục (ở đây là security group) thì tự backup.
  • Mục "where we got lucky" trong postmortem chỉ ra những phần phục hồi nhờ may mắn, tức là chỗ cần biến thành cơ chế.

Liên quan