Security Checklist khi Deploy: 10 việc phải làm trước Production
Security checklist 10 bước trước khi deploy production, từ secrets, authentication, TLS và dependency scanning đến monitoring, backup, rollback và incident response.
ShanverseCập nhật 12 phút đọc— lượt xemĐang tải lượt xem
Web Security
Deployment
DevSecOps
Vì sao phải có security gate trước production?
Production khác môi trường development ở ba điểm: dữ liệu thật, người dùng thật và kẻ tấn công thật. Một biến môi trường bị lộ, endpoint quản trị quên khóa hoặc bucket để public có thể biến một bản release chức năng tốt thành sự cố nghiêm trọng ngay ngày đầu.
Checklist này không thay thế threat modeling, review kiến trúc hay pentest. Nó là cổng phát hành tối thiểu: mỗi mục phải có bằng chứng, người chịu trách nhiệm và tiêu chí đạt rõ ràng. Nếu một mục quan trọng chưa đạt, quyết định đúng là hoãn deploy.
Tóm tắt 10 cổng kiểm soát
Chốt phạm vi, dữ liệu nhạy cảm và bề mặt tấn công
Bình luận
Bảo vệ secrets và cấu hình production
Kiểm tra authentication, session và authorization
Khóa input, output, upload và chống abuse
Bật HTTPS, security headers và chính sách trình duyệt
Quét dependencies, artifact, container và IaC
Hardening hạ tầng theo least privilege
Bật logging, monitoring, alert và xử lý lỗi an toàn
Kiểm thử backup, rollback và incident response
Chạy release gate cuối cùng và ký xác nhận
1. Chốt phạm vi, dữ liệu nhạy cảm và bề mặt tấn công
Trước khi kiểm tra controls, hãy biết chính xác thứ gì sắp được đưa lên Internet. Lập danh sách domain, API, webhook, cổng mạng, bucket, hàng đợi, database, trang quản trị, cron job và tích hợp bên thứ ba. Đánh dấu nơi lưu PII, token, thông tin thanh toán hoặc dữ liệu kinh doanh nhạy cảm.
Phải làm
Vẽ luồng dữ liệu từ client đến API, database và dịch vụ bên thứ ba.
Xác định trust boundary: Internet, CDN/WAF, load balancer, app, worker và data store.
Kiểm tra subdomain cũ, endpoint debug, Swagger, GraphQL playground, health check và admin panel.
Chỉ public những dịch vụ thực sự cần public; mọi thứ còn lại đặt sau private network, VPN hoặc identity-aware proxy.
Ghi owner cho từng tài sản và người có quyền quyết định rủi ro.
Tiêu chí đạt: Có inventory cập nhật, sơ đồ luồng dữ liệu và không còn endpoint/cổng public ngoài chủ đích.
2. Bảo vệ secrets và cấu hình production
Không commit .env, private key, database URL, API token hay credentials cloud vào Git, image hoặc JavaScript gửi xuống browser. Biến có tiền tố public trong framework frontend phải được xem là dữ liệu công khai.
Phải làm
Lấy secrets lúc runtime từ secret manager hoặc cơ chế secrets của nền tảng.
Dùng credentials ngắn hạn và workload identity khi có thể; tránh access key tồn tại lâu.
Tách secrets giữa development, staging và production.
Scope quyền tối thiểu cho từng service account; không dùng một tài khoản admin cho mọi dịch vụ.
Quét Git history, CI logs, image layers và artifact để tìm secrets.
Lập lịch rotation, ghi owner và quy trình revoke khẩn cấp.
Tắt debug mode, sample account, default password và cấu hình thử nghiệm.
Nếu phát hiện secret đã lộ, revoke hoặc rotate trước, sau đó mới dọn Git history. Xóa commit không làm credential cũ mất hiệu lực.
Tiêu chí đạt: Không có secret trong source/artifact/client; mọi secret production có owner, scope và đường rotation.
3. Kiểm tra authentication, session và authorization
Đăng nhập thành công không có nghĩa là người dùng được phép thao tác mọi tài nguyên. Broken Access Control thường xuất hiện khi API chỉ kiểm tra role ở UI hoặc tin vào ID do client gửi lên.
Phải làm
Bật MFA cho cloud console, CI/CD, DNS, registry, database và tài khoản quản trị ứng dụng.
Chặn default/admin account không cần thiết; không dùng tài khoản dùng chung.
Kiểm tra authorization ở server cho từng object và action, kể cả endpoint nội bộ.
Test ngang quyền: user A không đọc/sửa/xóa dữ liệu của user B bằng cách đổi ID.
Test dọc quyền: user thường không gọi được API của admin.
Với cookie session, bật Secure, HttpOnly, SameSite phù hợp; rotate session sau login và privilege change.
Đặt thời hạn token/session hợp lý; revoke được khi logout, mất thiết bị hoặc phát hiện sự cố.
Rate-limit login, reset password, OTP và endpoint nhạy cảm; tránh thông báo làm lộ tài khoản tồn tại.
Tiêu chí đạt: Bộ test authorization âm tính đã chạy; không thể bypass bằng cách gọi API trực tiếp hoặc sửa identifier.
4. Khóa input, output, upload và chống abuse
Mọi dữ liệu bên ngoài đều không đáng tin: body, query, path, header, cookie, file, webhook và dữ liệu trả về từ dịch vụ khác.
Phải làm
Validate schema theo allowlist; từ chối field thừa, sai kiểu, vượt độ dài hoặc ngoài miền giá trị.
Dùng parameterized query/ORM đúng cách; không nối chuỗi để tạo SQL, shell command hoặc template.
Encode output theo context để chống XSS; sanitize rich HTML bằng thư viện đã kiểm chứng.
Bảo vệ CSRF cho thao tác dùng cookie authentication.
Với upload: giới hạn kích thước, loại file, extension, MIME và số lượng; đổi tên file; lưu ngoài web root; quét malware nếu rủi ro yêu cầu.
Đặt request body limit, timeout, pagination và giới hạn concurrency.
Rate-limit theo IP, user, token và hành động kinh doanh; có quota cho API tốn tài nguyên.
Xác minh chữ ký webhook, timestamp và chống replay.
Tiêu chí đạt: Fuzz/boundary tests không tạo 500, injection hoặc thao tác vượt quyền; endpoint nhạy cảm có anti-automation.
5. Bật HTTPS, security headers và chính sách trình duyệt
HTTPS phải bảo vệ toàn bộ đường đi, không chỉ đoạn từ browser đến CDN. Kết nối CDN/load balancer đến origin cũng phải dùng TLS và xác thực certificate.
Phải làm
Redirect HTTP sang HTTPS và triển khai HSTS thận trọng sau khi xác nhận toàn bộ subdomain đã sẵn sàng.
Chỉ dùng TLS hiện đại; tự động gia hạn certificate và cảnh báo trước khi hết hạn.
Bật CSP phù hợp cho trang web; tránh unsafe-inline/wildcard nếu không cần.
Cấu hình X-Content-Type-Options: nosniff, Referrer-Policy, Permissions-Policy và chống clickjacking bằng CSP frame-ancestors.
CORS theo allowlist origin/method/header; không phản chiếu origin tùy ý cùng credentials.
Không tải script, ảnh, font hoặc API qua HTTP trên trang HTTPS.
Cookie nhạy cảm phải có Secure, HttpOnly và SameSite đúng mô hình.
Kiểm tra nhanh
Tiêu chí đạt: Không có mixed content, certificate hợp lệ, origin không truy cập bằng HTTP và headers đã được kiểm tra trên response thực tế.
6. Quét dependencies, artifact, container và IaC
Một repository sạch không đủ nếu artifact production chứa package lỗi thời, binary không rõ nguồn gốc hoặc cấu hình hạ tầng nguy hiểm.
Phải làm
Commit lockfile và dùng npm ci để cài đặt tái lập trong CI.
Chạy SCA như npm audit, Snyk hoặc Dependabot; triage theo reachability, exposure và impact, không chỉ severity.
Chạy SAST, secret scanning và kiểm tra license/provenance theo yêu cầu tổ chức.
Quét image container và Infrastructure as Code trước khi push/deploy.
Pin base image/dependency theo chiến lược có thể cập nhật; không dùng tag trôi nổi cho release quan trọng.
Tạo SBOM và liên kết nó với version/artifact đã phát hành.
Ký artifact hoặc ít nhất lưu digest; production chỉ deploy artifact được CI tạo, không build thủ công trên server.
Không dùng báo cáo “0 vulnerabilities” như bằng chứng tuyệt đối: scanner không phát hiện mọi package độc hại, logic flaw hoặc zero-day.
Tiêu chí đạt: Không còn issue vượt ngưỡng đã định mà chưa có owner, lý do chấp nhận rủi ro và ngày hết hạn.
7. Hardening hạ tầng theo least privilege
Giả định ứng dụng có thể bị khai thác và thiết kế blast radius nhỏ nhất có thể.
Phải làm
Chạy process/container bằng non-root user; bỏ Linux capabilities không cần thiết; filesystem read-only khi khả thi.
Không dùng --privileged, không mount Docker socket và không mở rộng host volume tùy tiện.
Chỉ mở port cần thiết bằng firewall/security group; database, cache và admin interface không public.
Dùng service account riêng cho từng workload, quyền chỉ đủ cho tác vụ cần thiết.
Tách network giữa public edge, app và data tier; kiểm soát egress đến destination cần thiết.
Mã hóa dữ liệu nhạy cảm at rest; quản lý key tách khỏi dữ liệu.
Patch OS, runtime, database, reverse proxy và managed services.
Đặt resource limits, health check và cơ chế chống restart loop gây cạn tài nguyên.
Tiêu chí đạt: Khi một container/app instance bị chiếm quyền, nó không thể mặc định quản trị cloud, đọc toàn bộ secrets hoặc truy cập mọi database.
8. Bật logging, monitoring, alert và xử lý lỗi an toàn
Log không có alert và người trực chỉ là dữ liệu lưu trữ. Ngược lại, log quá nhiều dữ liệu nhạy cảm tạo ra một kho rủi ro mới.
Phải làm
Log authentication failure, authorization failure, thay đổi quyền, thao tác admin, validation failure và sự kiện bảo mật quan trọng.
Dùng request/correlation ID và timestamp đồng bộ để điều tra xuyên dịch vụ.
Không log password, token, session ID, secret, dữ liệu thanh toán hoặc body nhạy cảm.
Encode/sanitize dữ liệu không tin cậy trước khi đưa vào log để chống log injection.
Trả lỗi chung cho client; giữ stack trace và chi tiết nội bộ trong log được bảo vệ.
Bật metrics cho error rate, latency, saturation, traffic bất thường và auth failure.
Alert phải có threshold, owner, kênh nhận và runbook; gửi thử alert trước release.
Bảo vệ log khỏi sửa/xóa trái phép và đặt retention phù hợp.
Tiêu chí đạt: Một login brute-force, spike 5xx hoặc access-control failure tạo tín hiệu mà người chịu trách nhiệm thực sự nhận được.
9. Kiểm thử backup, rollback và incident response
Backup chỉ có giá trị khi restore được. Rollback chỉ đáng tin khi đã thử với migration và schema thật.
Phải làm
Backup database, object storage và cấu hình quan trọng; mã hóa, giới hạn quyền và tách khỏi production account khi phù hợp.
Thực hiện restore test, đo RPO/RTO và xác nhận dữ liệu khôi phục dùng được.
Chuẩn bị rollback hoặc roll-forward; migration phải có chiến lược tương thích ngược.
Lưu version, digest, changelog và SBOM của mỗi release.
Viết runbook cho rò rỉ secret, account takeover, data breach, DDoS và dependency compromise.
Chỉ định incident commander, kênh liên lạc ngoài hệ thống bị ảnh hưởng và danh sách liên hệ nhà cung cấp.
Biết cách revoke token, rotate key, khóa account, cô lập workload và bảo toàn evidence.
Tiêu chí đạt: Đội ngũ đã diễn tập restore/rollback và biết ai quyết định dừng hệ thống khi có sự cố.
10. Chạy release gate cuối cùng và ký xác nhận
Đừng kiểm tra source branch rồi deploy một artifact khác. Tất cả kiểm tra cuối phải chạy trên đúng commit và artifact sẽ vào production.
Release gate đề xuất
Unit, integration, end-to-end và security regression tests đều đạt.
SAST, SCA, secret, image và IaC scan đạt policy.
Staging gần production; smoke test chạy sau deploy canary/blue-green.
Kiểm tra DNS, certificate, redirects, CORS, headers, robots/indexing và admin endpoints.
Xác nhận migrations, feature flags, queue consumers và scheduled jobs.
Ghi rõ known risks, owner và thời hạn xử lý; không có risk critical chưa phê duyệt.
Kiểm tra dashboard, alert, backup và rollback trước khi tăng traffic.
Hai người review thay đổi nhạy cảm: IAM, firewall, secrets, payment và auth.
Tiêu chí đạt: Release có commit SHA, artifact digest, bằng chứng kiểm tra, người phê duyệt và kế hoạch rollback.
Các điều kiện phải dừng deploy
Dừng phát hành nếu có một trong các dấu hiệu sau:
Secret production xuất hiện trong Git, log, image hoặc frontend bundle.
Database/admin interface public ngoài chủ đích.
Lỗ hổng critical có thể khai thác trên đường chạy production mà chưa khắc phục.
Authorization test thất bại hoặc người dùng truy cập được dữ liệu của người khác.
Chưa có HTTPS hợp lệ cho endpoint public.
Không có khả năng rollback/restore hoặc migration có nguy cơ phá dữ liệu không kiểm soát.
Alert quan trọng không có người nhận; đội ngũ không biết ai xử lý incident.
Mẫu sign-off ngắn
Kết luận
Security trước production không phải một lần “quét cho có”. Đó là chuỗi bằng chứng: đúng artifact, đúng cấu hình, quyền tối thiểu, dữ liệu được bảo vệ, tín hiệu giám sát hoạt động và đường lui đã kiểm thử. Tự động hóa các mục có thể tự động, nhưng giữ owner và quyết định con người cho rủi ro không thể đo bằng scanner.
Hướng dẫn quản lý dependency security với npm audit, Snyk, Dependabot và SCA: lockfile, CI policy, triage, remediation, transitive dependencies và supply-chain security.
Hướng dẫn triển khai Idempotency Key cho thanh toán với PostgreSQL: unique constraint, request hash, state machine, xử lý request đồng thời, retry, timeout và chống double charge.
Giải thích kiến trúc Event Sourcing và CQRS trong core banking, từ immutable ledger, double-entry, balance projection, idempotency đến replay, reconciliation và eventual consistency.