Một chuyến cài WAF
Trước yêu cầu nâng cao tổng thể tính bảo mật từ tập đoàn, vừa qua dự án chúng tôi cũng triển khai một vài biện pháp kỹ thuật để tăng cường an toàn cho sản phẩm team phụ trách. Bài viết ghi lại một kỷ niệm triển khai tác vụ liên quan đến mục đích vừa nêu.
I. Đưa tác vụ vào Backlog:
Sau nhiều trao đổi với team Infra, phân tích ưu nhược điểm, bàn bạc với khách hàng (KH) , team đã chốt được một gói WAF (Web application firewall) hợp lý cho phép nhận diện và block các rủi ro bảo mật. Thời gian triển khai cài đặt gói WAF này cũng đã được xác nhận với KH là trong khoảng 3 – 14 của tháng Z.
Để chuẩn bị thực hiện, Product Owner (PO) của team đã tiến hành confirm với team dự án cũng như team Infra về thời gian, nhân sự cần thiết cho tác vụ này và phản ánh vào một ticket trên Backlog như sau:
- .Nhân sự: TL (technical leader) của team dự án và một người Infra team
- .Cần 5 ngày để cài đặt WAF cho một môi trường (Dev./Stg./Prod.)
- .Cụ thể nội dung làm những gì: TL và Infra team sẽ chủ động cụ thể hoá
- .Goal: WAF được cài đặt và bắt đầu hoạt động trên môi trường Production muộn nhất 14 tháng Z
II. Sprint Planning với 3 PO 🙂 !!!
Ngày 19 tháng Z-1, với hình dung là trước khi cài đặt và kích hoạt trên Production thì gói WAF này cần phải được kiểm định ổn thoả trên môi trường Dev/ Staging, PO nhận thấy thời điểm cần xúc tiến hành tác vụ trên đã cận kề nên đưa ticket nói trên vào Sprint Backlog.
Cũng trong thời gian này, phát sinh tình huống là PO hiện tại sẽ nghỉ một thời gian dài vì lý do cá nhân, PO mới (PO New) được bố trí thay thế đồng thời một PO Support cũng được chỉ định để đồng hành.
Cuộc họp Sprint Planning được tiến hành vào ngày 22 tháng Z vì thế do PO New chủ trì và có sự tham gia của cả PO Support và PO hiện tại (mà từ giờ sẽ được gọi là PO Go). Tại đây, PO New giải thích một lượt Sprint Backlog, cuối cùng đến ticket cài WAF nói trên. Sau khi giải thích, PO New hỏi TL có thể hoàn thành tác vụ trước 14 tháng Z được không? TL trả lời chắc là được, sẽ làm việc với Infra abcd … PO ghi nhận và chuẩn bị kết thúc bằng cách hỏi thêm phía Dev. hay QA có câu hỏi gì nữa không? Không có phản hồi và PO New chuẩn bị tuyên bố kết thúc cuộc họp.
III. Xuất hiện câu hỏi “tò mò”
Đến đây PO Support, vốn là một người “tò mò”, nêu ý kiến: Chúng ta có 3 môi trường, nghĩa là sẽ phải cài đặt 3 lần, vậy xin hỏi đã có ngày dự kiến cụ thể của các lần cài đặt đó chưa? Đã có kế hoạch cụ thể các bước? ai thực hiện bước nào và vào ngày nào chưa? PO cần biết trước có phải xác nhận hay liên lạc gì với KH trong quá trình thực hiện kế hoạch đó không.
Sau một hồi không ai nói gì thì TL lên tiếng trả lời đại khái là kế hoạch cụ thể hiện chưa có, hôm trước đã trao đổi với Infra một lần thì hình như Infra đã tiến hành cài trên Dev. rồi nhưng các bước tiếp theo cụ thể như thế nào thì TL sẽ làm việc tiếp với Infra để liệt kê sau.
Nghe vậy, PO Support tỏ ý lo ngại nếu không có các bước và kế hoạch cụ thể thì chưa đạt được yêu cầu của Planning (làm rõ plan). PO New lúc đó cảm nhận được lo ngại này cũng như sự thiếu chắc chắn trong kế hoạch nên quyết định ứng biến nhanh tại chỗ.
IV. Gọi điện cho người thân và spin off WAF meeting
PO New lập tức gọi Slack cho leader của Infra team và nhờ mọi người tiếp tục ở lại họp. Infra team leader join vào meet, mô tả chung chung cơ chế WAF và các bước cần làm. PO Support note lại các bước đó lên chat và hỏi leader của Infra ngày cụ thể cho từng bước. Câu trả lời đại khái vẫn là chưa có kế hoạch theo ngày và sẽ lên plan sau, vì thế PO Support nêu ý kiến team cần nhanh chóng họp một buổi khác để quyết định thời gian biểu cụ thể cho tác vụ này. Team nhất trí. Hy vọng chỉ cần thêm một cuộc họp nữa !
Ngày 23 tháng Z-1 Dev. và Infra tổ chức họp, để cẩn thận các PO vẫn tham gia dù không bắt buộc. Cuộc họp bắt đầu với một danh sách các bước cần làm do Infra liệt kê, có khá nhiều bước vì có đến 3 môi trường lần lượt, chưa có ngày trừ bước đầu tiên:
Bất ngờ sớm xuất hiện khi ngay từ bước thứ 2 trong danh sách với nội dung: Test hệ thống. Infra giải thích bước này có mục đích ra soát hệ thống để phát hiện các request từ người dùng bị nhận nhầm là request tấn công, việc này sẽ do toàn bộ team hoặc QA làm với phạm vi là “toàn bộ hệ thống”. Bước này cần bao nhiêu thời gian thì ……. không ai đưa ra được câu trả lời.
Ten ten ten tèn ….Lâu rồi team không có những tác vụ rà soát toàn bộ hệ thống kiểu này và cho đến lúc này các PO cũng không hình dung vụ cài WAF sẽ cần một nỗ lực có vẻ to lớn như vậy! Điều không yên tâm nhất là vẫn chưa có cơ sở phán đoán liệu có kịp hoàn thành mục tiêu triển khai WAF đúng hạn cho KH trên Production hay không.
Ít nhất đến đây team có một hình dung là sẽ cần QA phụ trách tác vụ “test hệ thống” này, dù sao các bạn QA cũng là người quen thuộc hệ thống và biết cách thao tác nhanh nhất. Để đi tiếp, QA có ý kiến cần nhờ bên Dev. liệt kê các chức năng của hệ thống có sử dụng API, sau đó QA sẽ đưa ra estimate thời gian cần thiết cho bước này.
Nghĩa là lại cần thêm một cuộc họp nữa! Một cuộc họp nữa để biết riêng bước thứ hai đó tốn bao nhiêu thời gian thì mới quay lại họp bàn tiếp được kế hoạch!
V. Ý kiến “kiểu Nhật” vào cuộc
Trong lúc cuộc họp tạm thời đóng băng vì không có gì cụ thể để bàn tiếp, PO Support chia sẻ ý kiến:
- Nếu giả sử plan có 10 bước mà ngay từ bước thứ 2 chúng ta đã phải đợi kết quả bước đó rồi mới biết bao giờ bắt tay làm tiếp được kế hoạch cho các bước tiếp sau thì như vậy sẽ rất rủi ro về mặt kiểm soát tiến độ.
- Vậy với tình trạng kiểu này thì làm thế nào? Người Nhật có một cách làm tạm gọi là “just plan it”, gọi theo cách trần trụi hơn thì người Nhật sẽ yêu cầu: Không có gì thì vẫn phải có kế hoạch.
- Đề xuất: Chúng ta hãy tạm giả định rough estimate cho bước 2 nói trên mất 1 tuần (cho dù chưa biết chính xác phạm vi phải làm và chưa biết estimate cụ thể) rồi trên cơ sở giả định đó điền toàn bộ kế hoạch để xem có kịp thời gian đã hứa với khách hàng không?
- + Nếu không —> Phải lên phương án liên lạc sớm với khách hàng
- + Nếu kịp —> Tập trung vào mục tiêu giữ được kế hoạch giả định (thay vì chỉ nghĩ: Làm cái này bao giờ xong? thì đổi sang nghĩ: Làm thế nào để xong cái này trước ngày ….)
Với ý kiến trên, tạm thời team điền được ngày hoàn thành bước thứ 2 và team cũng điền được ngày dự kiến của các bước sau.
Lúc này team và Infra mới xem tiếp lại một lượt các step do Infra nháp, phát hiện một số bước trên môi trường Production đang copy y hệt bước trên Dev. env. nhưng khả năng không làm được, ví dụ là bước “test các chức năng hệ thống” (vì môi trường Prod là để dùng chứ không thể yêu cầu KH test gì ở trên đó được, FV lại càng không được phép), qua đó sửa lại thành bước Monitor định kỳ.
VI. Xông lên
Vậy là với một plan dù tạm thời/ giả định, đến đây ít nhất team đã tiến được kha khá với tác vụ cài WAF. Nhân có đà, PO Go đề xuất team bàn tiếp luôn về phạm vi phải “test các chức năng hệ thống”, chính là phạm vi công việc của bước thứ hai đang được giả định tốn 1 tuần trên plan tạm. Chỉ trong vòng vài phút, PO Go đã list up luôn tại chỗ toàn bộ các màn hình của hệ thống lên một danh sách dài gần …. 50 mục.
Trên cơ sở danh sách này, với từng phần của hệ thống team bắt đầu bàn cách:
- Chiến lược hiệu quả nhất để “test chức năng” phần này là thế nào? Sửa 1 record? sửa nhiều record?
- Các chức năng grid có cần thao tác ko? Phải edit toàn bộ các item hay 1 bộ phận?
- Khả năng dùng lại automation test hồi làm load test ….
Sau khi bàn một hồi, team thống nhất được hình dung về cách “test chức năng” và làm rõ được phạm vi công việc của bước này, PO Support hỏi QA vậy bước đó tốn bao lâu thì xong? Trong lúc QA đang suy nghĩ câu trả lời thì PO Support nêu luôn ý kiến: Việc “test” ở mức độ này thực chất không cần phải là QA mới làm được mà Dev hay Comtor. cũng làm được, tuy nhiên nếu huy động cả Dev. team thì các việc khác đã đưa vào Sprint backlog sẽ bị đình trệ nên trước tiên Comtor./ PO cùng QA có thể chia nhau ra mỗi người nhận một ít để tiến hành. Các bạn Comtor. và PO khác đồng ý với đề xuất đó, xung phong nhận việc trước, ghi tên phần mình phụ trách vào danh sách 50 mục nói trên, sau đó QA nhận nốt các phần còn lại và thấy thực ra có thể hoàn thành việc này nhanh hơn dự kiến (so với plan tạm là 1 tuần).
Cuộc họp kết thúc, nhiều thứ được làm rõ và được triển khai luôn với độ ưu tiên cao hơn, PO chỉnh lại thứ tự ưu tiên các task trong Sprint.
Như vậy từ cách hiểu đầu tiên:
- .Nhân sự: TL (technical leader) của team dự án và 1 người Infra team
- .Cần 5 ngày để cài đặt WAF cho một môi trường (Dev./Stg./Prod.)
- .Phạm vi công việc cụ thể: chưa có
- .Kế hoạch cụ thể: chưa có
sau 2 cuộc họp team với sự vào cuộc quyết liệt của 3 PO và khách mời Infra, nội dung tác vụ được chuyển thành
- .Nhân sự: 2 QA + 2 PO + 1 Comtor. + TL (technical leader) của team dự án và 1 người Infra team
- .Cần 6 ngày để cài đặt WAF cho Dev., 3 ngày cho Stg. và 3 ngày cho Prod.
- .Phạm vi công việc cụ thể: có 2 danh sách với tổng cộng khoảng 50 mục
- .Kế hoạch cụ thể: có ngày và người phụ trách, tự tin kịp lịch đã hẹn với KH
Một kỷ niệm với nỗ lực và kết thúc có ích, có lẽ vậy!
Cảm ơn bạn đã kiên nhẫn đọc bài 🙂