Vì access key của IAM user là credential dài hạn: nó không tự hết hạn, và một khi lọt ra ngoài (commit nhầm lên Git, log ra console, lộ trong image Docker) thì kẻ tấn công dùng được cho tới khi có người phát hiện và thu hồi thủ công.
Cách đúng: gắn IAM role cho máy chạy ứng dụng.
- EC2: tạo IAM role → gắn qua instance profile. Ứng dụng lấy credential tạm thời từ Instance Metadata Service (IMDS), AWS tự xoay vòng theo giờ.
- EKS/pod: dùng IRSA (IAM Roles for Service Accounts) — service account của pod map sang IAM role qua OIDC.
- Lambda / ECS task: execution role / task role.
Điểm quan trọng cho phỏng vấn: không cần sửa code. AWS SDK có default credential provider chain, tự tìm credential theo thứ tự env var → shared profile → container/IMDS. Bỏ hết access key đi thì SDK tự rơi xuống bước IMDS.
// no keys in code: the SDK resolves the instance role automatically
const s3 = new S3Client({ region: 'ap-southeast-1' })Máy dev cá nhân thì dùng IAM Identity Center (SSO) hoặc named profile trong ~/.aws/credentials, không phải key nhúng trong repo.