The alarms went off at 2 a.m. A single IAM misconfiguration had opened a hole no one saw coming. But it wasn’t tied to any employee. It was a bot.
AWS access for non-human identities is bigger, messier, and riskier than most people think. These identities—service accounts, CI/CD pipelines, automation scripts, IoT devices, container tasks, SaaS integrations—make up the majority of AWS access in most environments. They don’t change jobs, they don’t quit, and they rarely rotate credentials unless forced. They just keep running. Until they get compromised.
Traditional IAM strategies focus on humans. MFA, password policies, just-in-time access. But in AWS, non-human identities often carry more privilege and have weaker controls. Many are over-permissioned, hidden in automation layers, and survive security audits because no one’s looking for them the way they look for people.
The first rule is to find them. Inventory every role, every access key, every access pattern. Use AWS IAM Access Analyzer, CloudTrail logs, and config data to map active identities. Look for dormant accounts with still-valid credentials. Check which ones can assume powerful roles. Document every trusted entity, internal or external, that can call your APIs.
Next, lock them down. Apply least privilege at the role and policy level. Use role assumption instead of static keys wherever possible. Rotate every credential with an automated policy. Enforce scoped-down IAM policies that grant only the explicit actions and resources needed. Monitor continuously—non-human identities should have activity patterns, and deviations almost always mean trouble.