- Tác giả
- Name
- Nguyễn Đức Xinh
- Ngày xuất bản
- Ngày xuất bản
AWS IAM MFA: Bảo vệ tài khoản với Multi‑Factor Authentication (TOTP, FIDO2) và best practices
Bật và bắt buộc MFA (Multi‑Factor Authentication) là lớp phòng thủ quan trọng nhất để bảo vệ tài khoản AWS khỏi truy cập trái phép. Bài viết này trình bày khái niệm MFA, các loại MFA AWS hỗ trợ, hướng dẫn chi tiết bật MFA cho Root và IAM users, cách enforce bắt buộc MFA bằng IAM Policy, ví dụ CLI/STS cho API access, so sánh Virtual MFA với FIDO2, cùng các best practices và xử lý sự cố.
MFA là gì và vì sao cần trên AWS?
- MFA = “điều bạn biết” (password) + “điều bạn sở hữu” (thiết bị tạo mã/khóa bảo mật).
- Khi bật MFA, kẻ tấn công sẽ không thể đăng nhập chỉ với password bị rò rỉ.
- Trên AWS, MFA giúp bảo vệ: Management Console, API access (thông qua temporary credentials với STS), các thao tác nhạy cảm (xóa tài nguyên, thay đổi cấu hình bảo mật…).
Lợi ích chính
- Giảm thiểu rủi ro lộ mật khẩu, credential stuffing, phishing.
- Nâng mức tuân thủ (CIS AWS Foundations, ISO 27001, SOC 2…).
- Nâng cao kỷ luật bảo mật DevSecOps, đặc biệt với tài khoản có quyền cao.
Nên bật MFA cho ai?
- Bắt buộc cho Root account (tài khoản gốc).
- Tất cả IAM users có quyền truy cập production, quyền quản trị, hoặc dữ liệu quan trọng.
- Khuyến nghị: xem xét chuyển sang AWS IAM Identity Center (AWS SSO) để quản trị người dùng tập trung và MFA nhất quán trong tổ chức.
AWS hỗ trợ những loại MFA nào?
- Virtual MFA (TOTP application): Google Authenticator, Authy, 1Password, Microsoft Authenticator…
- Security key (FIDO2/WebAuthn, U2F): YubiKey, Feitian… — ưu thế chống phishing ở mức giao thức.
- Hardware TOTP token: thiết bị phần cứng tạo mã TOTP chuyên dụng.
- Lưu ý: SMS‑based codes không được khuyến nghị về bảo mật và không hỗ trợ cho IAM users.
So sánh nhanh các lựa chọn MFA trên AWS
Tiêu chí | Virtual MFA (TOTP App) | FIDO2/WebAuthn Security Key | Hardware TOTP Token |
---|---|---|---|
Mức bảo mật | Cao | Rất cao (chống phishing tốt) | Cao |
Trải nghiệm | Tiện lợi trên điện thoại | Cắm/chạm key, rất nhanh | Thiết bị riêng, đơn giản |
Chi phí | Thấp/miễn phí | Trung bình/Cao (mua key) | Trung bình |
Offline | Có | Có | Có |
Dùng cho Console | Có | Có | Có |
Hỗ trợ cho CLI (IAM user) | Dùng với STS GetSessionToken | Dùng tốt qua SSO; với IAM user CLI không nhận mã từ FIDO2 trực tiếp | Dùng với STS GetSessionToken |
Phù hợp | Cá nhân/nhóm nhỏ | Doanh nghiệp, chống phishing | Môi trường kiểm soát chặt |
Cách bật MFA cho Root account (Management Console)
Root không phải IAM user, do đó bật MFA cho Root thực hiện trong AWS Management Console.
Các bước
- Đăng nhập bằng Root email/password vào Console.
- Vào Account Dropdown -> Security Credentials -> Multi‑factor authentication (MFA) -> Activate MFA.
- Chọn loại thiết bị (khuyến nghị: FIDO2 security key hoặc Virtual MFA).
- Thực hiện hướng dẫn trên màn hình (chạm key, hoặc quét QR TOTP và nhập hai mã liên tiếp 6 số).
- Lưu lại thông tin phục hồi
Best practices cho Root
- Bật MFA ngay lập tức sau khi tạo tài khoản.
- Không tạo access key cho Root; dùng IAM role/admin thay thế.
- Lưu thông tin key/thiết bị trong két an toàn; có quy trình thay thế khi mất.
Cách bật MFA cho IAM users
Bạn có thể bật qua Console hoặc CLI.
Bật qua Console
- Đăng nhập với user có quyền quản trị IAM.
- Vào IAM > Users > chọn user > Security credentials.
- Tại Assigned MFA device > Add MFA device.
- Chọn loại thiết bị: Virtual MFA, Security key (FIDO2), hoặc Hardware TOTP.
- Làm theo hướng dẫn (quét QR và nhập 2 mã TOTP, hoặc đăng ký security key).
Bật qua CLI cho Virtual/Hardware TOTP
- Tạo hoặc liệt kê thiết bị MFA:
aws iam list-virtual-mfa-devices
- Kích hoạt MFA cho user (cần 2 mã OTP liên tiếp):
aws iam enable-mfa-device \
--user-name alice \
--serial-number arn:aws:iam::<ACCOUNT_ID>:mfa/alice \
--authentication-code1 123456 \
--authentication-code2 654321
- Vô hiệu hóa khi cần:
aws iam deactivate-mfa-device \
--user-name alice \
--serial-number arn:aws:iam::<ACCOUNT_ID>:mfa/alice
Lưu ý: FIDO2/WebAuthn đăng ký qua Console cho trải nghiệm tốt nhất. Với CLI và IAM users, phiên làm việc qua API thường dùng TOTP với STS thay vì FIDO2 trực tiếp.
Enforce “bắt buộc MFA” bằng IAM Policy
Bạn có thể buộc người dùng phải đăng nhập bằng MFA trước khi gọi API nhạy cảm, hoặc thậm chí chặn hầu hết hành động nếu không có MFA.
Điều kiện thường dùng
- aws:MultiFactorAuthPresent: true/false.
- aws:MultiFactorAuthAge: số giây từ lần MFA gần nhất (hữu ích để yêu cầu re‑auth).
Mẫu policy: deny mọi thứ trừ một số thao tác cho đến khi có MFA
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllExceptListedIfNoMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetCallerIdentity",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } }
}
]
}
Gắn policy này ở Group/Role mà người dùng thuộc về. Người dùng sẽ chỉ có thể gọi các API tối thiểu để tự bật MFA; mọi thao tác khác bị từ chối cho đến khi có MFA.
Yêu cầu re‑auth MFA sau X phút
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenySensitiveIfMFATooOld",
"Effect": "Deny",
"Action": [
"ec2:TerminateInstances",
"rds:DeleteDBInstance",
"iam:DeleteUser"
],
"Resource": "*",
"Condition": { "NumericGreaterThan": { "aws:MultiFactorAuthAge": 3600 } }
}
]
}
Sử dụng MFA cho CLI/API với STS
Đối với IAM users, bạn có thể lấy temporary credentials ràng buộc MFA bằng STS.
Lấy session bằng GetSessionToken
aws sts get-session-token \
--serial-number arn:aws:iam::<ACCOUNT_ID>:mfa/alice \
--token-code 123456
Kết quả trả về AccessKeyId, SecretAccessKey, SessionToken. Thiết lập biến môi trường để dùng với AWS CLI/SDK:
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
AssumeRole với MFA
Nếu bạn dùng mô hình role‑based access:
aws sts assume-role \
--role-arn arn:aws:iam::<ACCOUNT_ID>:role/Admin \
--role-session-name admin-mfa \
--serial-number arn:aws:iam::<ACCOUNT_ID>:mfa/alice \
--token-code 123456
Trong trust policy của role, thêm điều kiện bắt buộc MFA:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::<ACCOUNT_ID>:user/alice" },
"Action": "sts:AssumeRole",
"Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } }
}
]
}
IAM users MFA vs IAM Identity Center (AWS SSO)
Nhiều tổ chức chuyển sang IAM Identity Center để quản lý người dùng, nhóm, và SSO đến nhiều tài khoản/role.
Khác biệt chính
- IAM users MFA: Quản trị phân tán theo từng tài khoản, tự cấu hình policies bắt buộc MFA, dùng STS GetSessionToken cho CLI.
- IAM Identity Center (SSO) MFA: Quản trị tập trung, tích hợp IdP (Azure AD/Entra ID, Okta…), chính sách MFA tập trung, CLI qua
aws sso login
trải nghiệm tốt, dễ enforce security baseline toàn tổ chức.
Khi nào chọn SSO
- Có nhiều AWS accounts, cần quản trị tập trung, audit dễ.
- Yêu cầu UX tốt cho dev/ops khi luân phiên role qua CLI/Console.
- Cần chính sách MFA thống nhất với IdP doanh nghiệp.
Checklist triển khai nhanh (Security Baseline)
- Bật MFA cho Root ngay lập tức; tắt/không dùng root access key.
- Yêu cầu MFA cho tất cả IAM users có quyền hạ tầng/production.
- Áp dụng policy “deny nếu chưa có MFA” ở Group/Role mặc định.
- Tách quyền: dùng Role thay vì cấp quyền trực tiếp cho user; yêu cầu MFA khi AssumeRole.
- Bật CloudTrail, GuardDuty để giám sát hành vi bất thường liên quan đăng nhập.
- Document quy trình mất thiết bị và break‑glass; luyện tập định kỳ.
Troubleshooting thường gặp
Mất điện thoại/thiết bị MFA
- Dùng quy trình nội bộ: xác thực danh tính, vô hiệu hóa thiết bị cũ, đăng ký thiết bị mới.
- Nếu là Root và không đăng nhập được: liên hệ AWS Support với bằng chứng sở hữu tài khoản.
Mã TOTP lệch thời gian
- Đồng bộ thời gian trên điện thoại/thiết bị. Với hardware token, thực hiện resync trong IAM.
Lỗi “AccessDenied” khi chưa có MFA
- Kiểm tra policy “deny unless MFA present”. Đăng nhập với MFA hoặc lấy STS session có MFA.
Thay thiết bị MFA
- Deactivate thiết bị cũ, rồi Add/Enable thiết bị mới. Cập nhật hướng dẫn nội bộ.
Best practices tổng hợp
- Least privilege: cấp quyền tối thiểu cần thiết, kết hợp điều kiện MFA.
- Prefer FIDO2 cho console login để chống phishing; TOTP cho API via STS.
- Role‑based access: người dùng AssumeRole với MFA thay vì quyền trực tiếp.
- Không dùng access key dài hạn; ưu tiên temporary credentials qua STS/SSO.
- Giám sát và cảnh báo đăng nhập không có MFA (CloudWatch/CloudTrail + Security Hub).
- Định kỳ review: ai chưa bật MFA, chính sách enforce đã đúng chưa, logs có bất thường không.
Câu hỏi thường gặp (FAQ)
SMS MFA có nên dùng không?
Không. SMS dễ bị tấn công (SIM swap) và không được hỗ trợ cho IAM users. Hãy dùng TOTP hoặc FIDO2.
Có thể bắt buộc MFA cho một số hành động nhạy cảm không?
Có. Dùng aws:MultiFactorAuthPresent/ aws:MultiFactorAuthAge trong policy cho danh sách hành động cụ thể.
CLI có dùng FIDO2 được không?
FIDO2 tối ưu cho Console/SSO. Với IAM user + CLI, luồng phổ biến là TOTP + STS (GetSessionToken/AssumeRole). Với SSO, aws sso login
sử dụng MFA của IdP.
Có cần MFA cho service account?
Tránh dùng user người/interactive cho automation. Dùng IAM role gán cho workload (EC2/IRSA/Lambda) thay vì secret/access key; MFA không áp dụng cho máy.
Kết luận
Bật và enforce MFA là nền tảng bảo vệ tài khoản AWS trước rủi ro xâm nhập. Hãy kích hoạt MFA cho Root và IAM users ngay, áp dụng policies bắt buộc MFA, ưu tiên FIDO2 cho Console và TOTP với STS cho API/CLI, đồng thời chuyển dần sang IAM Identity Center để chuẩn hóa quản trị và trải nghiệm đăng nhập trong tổ chức.
Hãy dành 30 phút hôm nay để bật MFA và thiết lập policies — chi phí thấp, hiệu quả cao, và là bước khởi đầu cần thiết cho một chiến lược Cloud Security vững chắc.