IAM role has not been used for over 365 days
- Severity
- Low
- Service
- IAM
- Check ID
- IAM_ROLE_STALE
What this check finds
Stale IAM roles that are no longer in use still grant permissions and can be assumed by anyone with the right trust policy. Removing unused roles reduces the attack surface and accidental privilege escalation paths.
Passing looks like: No stale IAM roles.
How to fix it
Review the role and delete it if no longer needed.
AWS CLI
Detach its policies first:
aws iam detach-role-policy --role-name ROLE_NAME --policy-arn POLICY_ARNThen delete the role:
aws iam delete-role --role-name ROLE_NAMEIf uncertain, disable by removing all attached policies before deleting.
Names in capitals are placeholders for your own resource. Review a command before you run it.
AWS console
IAM → Roles → select role → check Last activity → Delete.
Compliance controls it is evidence for
A failing result counts against these controls in KloudLytics; a passing one is evidence towards them. How compliance mapping works
| Framework | Controls |
|---|---|
| PCI-DSS v4.0.1 |
|
| HIPAA Security Rule |
|
| NIST SP 800-53 Rev5 (Moderate) |
|
| NIST Cybersecurity Framework 2.0 |
|
| ISO/IEC 27001:2022 Annex A |
|
Checked on every scan
KloudLytics runs this check each time it scans a connected AWS account, through a read-only role, and lists every affected resource with its region. On Pro and Business a fix is written for the specific resource rather than the general case above. The exact access it needs
More IAM checks
- HighDeprecated or flawed AWS managed policy in use
- HighIAM role allows assumption from anywhere
- HighIAM role with admin privileges can be assumed by unexpected principals
- HighIAM role with s3 listing and get privileges can be assumed by unexpected principals
- HighIAM user access key has not been rotated in over 180 days
- HighIncorrect policy used to attempt to enforce MFA
- HighInline policy allows privilege escalation to admin
- HighPrincipal has an attached policy granting administrative access