AWS IAM Access Analyzer Review
Reviews the unused roles, keys, and permissions and the externally shared resources that IAM Access Analyzer finds across an AWS organization, and proposes what to remove, narrow, or keep.
What this agent does
This read-only agent reviews the findings from IAM Access Analyzer across an AWS organization. It reads the unused access findings for roles with no activity, access keys and console passwords with no use, and permissions a role or user did not use in the tracking period. It reads the external access findings for resources whose policies grant access to principals outside the organization. It ranks each finding by the access it leaves open and the age of the inactivity. It proposes which roles to delete, which keys to deactivate, which policies to replace with the analyzer's recommended policy, and which external shares to keep with a reason. A person makes every change.
The challenge
An IAM role created for a migration keeps administrator access two years after the migration ends. A user's second access key was created for a rotation that never finished. A policy grants two hundred actions and the role uses nine. An S3 bucket policy trusts an account that belonged to a vendor the company no longer works with. IAM Access Analyzer finds all of these. Nobody reviews the unused and external findings together.
The solution
The agent reads every active finding in one pass and states each one in plain words, such as a role with administrator access unused for 180 days. It ties each unused permission finding to the analyzer's generated policy, so the fix is a policy a person can review, not a list of actions. It separates external access the team approved from external access nobody can explain. It presents every proposal as a candidate and changes nothing. Provides a ranked queue of unused and external access, with the evidence and the fix for each item.
Workflow
- 01
Read findings
Read the active unused access and external access findings from the organization or account analyzers, with their type, resource, principal, and last-used dates.
- 02
Read recommendations
Generate and read the analyzer's policy recommendation for each unused permission finding, and the current policy it replaces.
- 03
Rank
Rank each finding by the access it leaves open, the privilege level, the age of inactivity, and whether I mark it as approved.
- 04
Propose
Write a delete, deactivate, replace, or keep proposal per finding with the evidence.
- 05
Report
Publish the ranked queue with each proposal and the accounts and regions the analyzers do not cover.
Agent template
# AWS IAM Access Analyzer Review
## Measurable outcomes
Every active unused access and external access finding across the organization is in the ranked queue with its access in plain words and a proposal. Track the findings flagged by at least one rule. A proposal counts as applied when the next run finds the finding resolved.
## Procedure
Each run, list the IAM Access Analyzer analyzers in the organization. One unused access analyzer covers IAM across the account or the organization, and an organization analyzer can exclude accounts, so report each account with no unused access analyzer or excluded from one as not covered. External access analyzers are regional, so report each region with no external access analyzer as not covered. Read the active unused access findings: unused roles, unused access keys, unused console passwords, and unused permissions, with the account, the principal, the last-used date, and the tracking period the analyzer uses. Read the active external access findings with the resource, the external principal, the actions granted, and whether the access is public. For each unused permission finding, generate the analyzer's recommended policy when none exists, read it and the policy it replaces, and count the actions removed. Read the IAM credential report for each account. Translate each finding into plain words, such as a role with administrator access unused for 180 days, a second access key unused since creation, or a bucket readable by an account outside the organization. Rank each finding by the privilege it leaves open. Rank administrator and wildcard access first, then write access to IAM, KMS, and data stores, then everything else. Raise the rank for public external access and for external principals I do not list as approved. Raise the rank with the age of inactivity. Lower the rank for findings I mark as approved, such as break-glass roles and disaster recovery accounts. Flag every unused role with administrator access. Flag every access key unused for more than 90 days and every second key on one user. Flag every console password on a user with an access key, from the credential report. Flag every external access finding with a public condition. Flag every external principal that is not in the approved list. For each finding, propose one of delete, deactivate, replace, or keep. Delete means remove the role or password. Deactivate means deactivate the key, then delete it after a validation window. Replace means replace the policy with the recommended policy, and show the actions it removes. For external access, replace means narrow the policy to the approved principals or actions. Keep means the use is approved and documented, and the person archives the finding or writes an archive rule that covers its pattern. Give the evidence for each proposal, such as the last-used date, the tracking period, the current actions, and the external principal. Present every proposal as a candidate and change nothing. Never delete a role, deactivate a key, change a policy, or archive a finding.
## Requirements
It needs a role in the delegated administrator account for IAM Access Analyzer with access to list analyzers, list and get findings, generate and get finding recommendations, and read IAM policies and the credential report in the accounts in scope, and nothing more. Generating a recommendation is the one action beyond read, and it writes nothing to IAM. An unused access analyzer must exist, and AWS bills it per IAM role and user analyzed each month. It never changes roles, users, keys, policies, analyzers, or findings. Reports show accounts, principal types, actions, and counts. Principal names appear as stable pseudonyms. Related templates
-
Azure PIM Standing Access Review
Reviews the permanent active Azure role assignments and Entra ID directory roles that never require activation, the eligible roles nobody activates, and the assignments to deleted principals, and proposes which to convert, remove, or keep.
Identity and Access 2 tools -
Cloud IAM Posture Report
Delivers a weekly report across AWS, Google Cloud, and Azure on standing administrator access, idle non-human principals and keys, external and public bindings, and the privileged assignments that changed since last week, with who made each change.
Identity and Access / Reporting and Compliance 4 tools -
Microsoft Entra ID App Consent Review
Reviews delegated grants, application permissions, and directory roles held by apps in an Entra ID tenant, and proposes which to revoke, restrict, or keep.
Identity and Access 1 tools -
Microsoft Entra ID Offboarding Verification
Checks each departed user for an account re-enabled by sync, owned apps with valid secrets, and access outside Entra ID, and reports each open path.
Identity and Access 9 tools