AWS new account hardening checklist
What — Nó là gì?
Hardening là quá trình tăng cường bảo mật và quản trị cho một AWS account mới ngay từ đầu — trước khi tạo bất kỳ resource nào. Gồm 3 nhóm chính: Security (IAM, MFA), Billing (budget alert, cost tracking), Governance ( audit trail, threat detection).
Why — Tại sao cần?
AWS account mới có nhiều điểm yếu mặc định:
- Root account không có MFA → nếu bị compromise, kẻ tấn công có toàn quyền
- IAM user không xem được billing dù có
AdministratorAccess - Không có audit log → không biết ai đã làm gì khi xảy ra sự cố
- Không có budget alert → bill có thể tăng đột biến mà không hay
How — 16 bước theo thứ tự
🔐 Bảo mật (làm ngay)
1. Bật MFA cho root account
Console → tên account → Security credentials → MFA → Assign MFA device → Authenticator appLưu backup codes/seed key ngay sau khi bật. Mất MFA root = mất quyền truy cập account.
2. Xóa access key của root
Security credentials → Access keys → Delete (nếu có)Root không cần programmatic access. Account mới thường chưa có key — kiểm tra cho chắc.
3. Tạo IAM admin user
IAM → Users → Create user → Attach AdministratorAccess → bật MFA → đăng nhập bằng user này từ đây về sauURL login: https://<account-id>.signin.aws.amazon.com/console
4. Thiết lập IAM password policy
IAM → Account settings → Edit password policyMinimum 12 ký tự, require uppercase + lowercase + number + special char, prevent password reuse (5 lần).
5. Đặt account alias
IAM → Dashboard → Create alias → vd: kha-aws-labLogin URL sẽ thành https://kha-aws-lab.signin.aws.amazon.com/console — dễ nhớ hơn account ID 12 số.
💳 Billing (cần dùng root 1 lần nữa cho bước 6)
6. Cho phép IAM user xem billing
Root → Account → IAM user and role access to Billing information → Activate IAM AccessĐây là bước duy nhất trong toàn bộ checklist cần dùng root sau lần setup đầu. Làm xong đăng xuất root ngay.
7. Bật billing alerts
Billing → Billing Preferences → Alert preferences → tick Receive Free Tier alerts + Receive CloudWatch billing alertsBước này chỉ bật tính năng — chưa tạo alarm. Dùng AWS Budget (bước 8) thay vì tạo CloudWatch alarm thêm.
8. Tạo AWS Budget
Billing → Budgets → Create budget → Monthly cost budget → $10 → email alertTemplate mặc định alert tại 85% và 100%. Có thể thêm mốc 50% để cảnh báo sớm hơn. 2 budgets đầu miễn phí.
9. Bật Cost Explorer
Billing → Cost Explorer → EnableChờ ~24h để data hiển thị. Miễn phí hoàn toàn khi xem historical data.
🏗️ Governance
10. Chọn region mặc địnhap-southeast-1 (Singapore) — gần VN nhất, hỗ trợ đầy đủ service.
11. Bật CloudTrail
CloudTrail → Create trail → management-events-trail → S3 bucket mới + CloudWatch Logs → Management events (Read + Write)Không bật Data events (tốn phí). Management events miễn phí.
12. Bật GuardDuty
GuardDuty → Get Started → Enable GuardDuty30 ngày free trial. Sau trial: ~$0.10–0.30/ngày cho account nhỏ ít hoạt động (~$3–9/tháng). Không cần config thêm gì — bật là chạy, tự phân tích CloudTrail + VPC Flow Logs + DNS logs.
13. Điền alternate contacts
Account → Alternate contacts → Billing + Operations + SecurityAWS liên hệ đúng người khi có incident — không phải chỉ email đăng ký root.
14. Bật AWS Config (optional, có phí nhỏ)
AWS Config → Get started → All resource types → S3 bucket mớiPhí: ~$0.003/config item. Track configuration changes theo thời gian.
15. Bật Security Hub (optional, 30 ngày free trial)
Security Hub → Enable → tick AWS Foundational Security Best PracticesCần GuardDuty + Config chạy trước. Dashboard tổng hợp findings từ nhiều service.
16. Cost allocation tags
Billing → Cost allocation tags → Activate user-defined tagsTag phải được activate tại đây trước khi gán cho resource. Sau đó khi tạo resource, gán:
Environment=dev,Project=lab,Owner=<tên>. Chờ 24h để xuất hiện trong Cost Explorer. Account mới chưa có resource → bước này làm sau khi tạo resource đầu tiên.
Gotchas
- IAM billing access: IAM user có
AdministratorAccessvẫn không xem được billing nếu chưa bật bước 6 qua root — đây là setting cấp account, không phải IAM policy. - Billing alerts chỉ hoạt động ở
us-east-1: Khi tạo CloudWatch alarm cho billing phải chuyển sang region này. - CloudTrail Data events tốn phí: Chỉ bật Management events khi mới setup. Data events (S3 object-level, Lambda invoke) = $0.10/100k events.
- GuardDuty per region: Bật GuardDuty ở region nào thì chỉ monitor region đó. Nếu dùng nhiều region phải bật lại.
- Cost allocation tags: Gán tag cho resource trước khi activate = Cost Explorer không nhận ra tag đó. Đúng thứ tự: activate tag → tạo resource → gán tag.
- Security Hub cần data source: Bật Security Hub trước GuardDuty/Config → findings sẽ ít/rỗng. Đúng thứ tự: GuardDuty → Config → Security Hub.
When / When not
Nên làm full 16 bước khi:
- Account dùng cho production hoặc có thể phát sinh chi phí thực
- Account dùng để học cert (cần hands-on với chính các service này)
- Multi-purpose account (học + side project + production)
Có thể bỏ qua bước 14–15 khi:
- Account thuần học tập, không chạy workload liên tục
- Muốn tránh chi phí tích lũy từ Config ($0.003/item)
Connection
| Service | Câu hỏi trả lời |
|---|---|
| CloudTrail | Ai đã làm gì, lúc nào, từ đâu? (audit log) |
| CloudWatch | Hệ thống đang hoạt động thế nào? (metrics + alerts) |
| AWS Config | Resource được cấu hình như thế nào tại thời điểm X? |
| GuardDuty | Có hoạt động bất thường/threat không? (detection) |
| Security Hub | Tổng thể security posture đang ở mức nào? (aggregation) |
Bộ 4 service này (CloudTrail + Config + GuardDuty + Security Hub) là security baseline AWS khuyến nghị cho mọi account — hay xuất hiện trong DOP-C02.
Hands-on
Thực hành đúng thứ tự trong ngày đầu tiên:
- Bước 1–5 (Security): ~20–30 phút
- Bước 6–9 (Billing): ~15 phút, cần đăng nhập root 1 lần ở bước 6
- Bước 10–13 (Governance core): ~20 phút
- Bước 14–16 (Governance optional): làm sau khi có resource thực tế
Để test GuardDuty: GuardDuty → Settings → Generate sample findings — xem các loại finding mẫu mà không cần trigger threat thật.
Glossary
Root account [^root-account]
What: Account chủ của AWS, được tạo bằng email khi đăng ký. Có toàn quyền không thể bị giới hạn bởi bất kỳ IAM policy nào.
Why: Cần thiết cho một số tác vụ đặc biệt (thay đổi billing plan, xóa account, một số marketplace operations) nhưng quá nguy hiểm để dùng hàng ngày.
How: Đăng nhập bằng email + password trực tiếp tại console.aws.amazon.com. Không thể bị restrict bởi SCP hay IAM policy.
Gotchas: Nếu root bị compromise và không có MFA, kẻ tấn công có thể làm mọi thứ — kể cả xóa toàn bộ resource và thay đổi billing info. Không có cách nào revoke nếu không kiểm soát được email.
When: Chỉ dùng để: bật IAM billing access, recover khi bị lock khỏi IAM, một số tác vụ marketplace/support plan.
Connection: Tương đương root user trên Linux — có toàn quyền, không nên dùng cho việc thường ngày.
MFA (Multi-Factor Authentication) [^mfa]
What: Xác thực 2 yếu tố — ngoài password còn cần mã OTP 6 số thay đổi mỗi 30 giây từ app (Google Authenticator, Authy).
Why: Nếu password bị lộ, kẻ tấn công vẫn không đăng nhập được nếu không có MFA device.
How: App tạo TOTP (Time-based One-Time Password) dựa trên seed key và thời gian hiện tại. Seed key được lưu khi quét QR code lần đầu.
Gotchas: Mất điện thoại = mất quyền đăng nhập nếu không có backup seed key. Luôn lưu seed key ở nơi an toàn ngoài điện thoại.
When: Bắt buộc cho root và mọi IAM user có quyền cao. Nên bật cho tất cả IAM user.
Connection: Giống OTP khi đăng nhập internet banking — lớp bảo vệ thứ 2 ngoài password.
Cost allocation tags [^cost-allocation-tags]
What: Key-value labels gán cho AWS resource để phân loại chi phí trong Cost Explorer. Ví dụ: Environment=production, Project=meridian.
Why: Không có tag, Cost Explorer chỉ hiện tổng chi phí theo service. Với tag, có thể filter "tháng này project Meridian tốn bao nhiêu?" hoặc "môi trường staging đang tốn gì?".
How: Activate tag key tại Billing → Cost Allocation Tags → gán tag vào resource khi tạo → sau 24h tag xuất hiện trong Cost Explorer filter.
Gotchas: Activate phải trước khi tạo resource. Nếu gán tag cho resource đã tồn tại, chỉ track chi phí từ thời điểm đó về sau — không backfill.
When: Nên thiết lập ngay từ đầu trước khi tạo resource đầu tiên. Rất quan trọng khi có nhiều project hoặc nhiều môi trường trên cùng một account.