AWS IAM Role/Policy permission viewer — see what a role or policy can do
Project description
catrole
AWS IAM visibility tool — inspect roles, policies, users, groups, and AWS Identity Center permission sets across your organization.
Architectural Diagram
Requirements
- Python >= 3.11
- AWS credentials configured (via
~/.aws/credentials, environment variables, or SSO) - A cross-account IAM role you can assume in target account(s)
Installation
From PyPI
pip3 install catrole
From source
git clone https://github.com/RajChowdhury240/catrole.git
cd catrole
pip3 install .
For development (editable install):
pip3 install -e .
How it works
catrole uses -R to specify an IAM role to assume in the target account via STS. All API calls are made using the temporary credentials from that assumed role.
If -R is not provided, catrole reads the role name from ~/.catrole.
Setting a default assume role
echo "readonly-role" > ~/.catrole
Once set, you can omit -R from all commands. -R on the command line always takes precedence over ~/.catrole.
Modes
1. Scan a role
Shows all attached (managed + inline) policies for an IAM role, flattened into individual permission rows.
catrole -R readonly-role -a 123456789012 -r AppRole
2. Scan a policy
Shows all statements in a customer-managed or AWS-managed policy.
catrole -R readonly-role -a 123456789012 -p MyPolicy
3. Scan by ARN
Directly specify the full ARN of a role or policy — account ID is extracted automatically.
catrole -R readonly-role -A arn:aws:iam::123456789012:role/AppRole
catrole -R readonly-role -A arn:aws:iam::123456789012:policy/MyPolicy
4. Search by name pattern across accounts
Wildcard search across all active accounts in the AWS Organization (or scope to one account with -a).
By default -s searches roles and policies. Add type-filter flags to restrict the search to specific entity types — each flag is used without a value in search mode:
| Filter flag | Searches |
|---|---|
-r |
IAM roles |
-p |
IAM customer-managed policies |
-u |
IAM users |
-g |
IAM groups |
-idc |
AWS Identity Center permission sets (uses --region) |
If any filter flag is supplied, the search is restricted to those type(s). If none are supplied, the default scope (roles + policies) applies.
# Default: roles + policies, org-wide
catrole -R readonly-role -s '*lambda*'
# Roles only
catrole -R readonly-role -s '*admin*' -r
# Users only
catrole -R readonly-role -s '*admin*' -u
# Groups only
catrole -R readonly-role -s '*dev*' -g
# IDC permission sets (specify the region of your IDC instance)
catrole -R readonly-role -s '*PowerUser*' -idc --region us-east-1
# Combine filters
catrole -R readonly-role -s '*admin*' -r -u -g
# Scope to a single account
catrole -R readonly-role -s '*admin*' -a 123456789012 -r -u
Wildcards: * matches any sequence of characters, ? matches a single character.
Note: IDC permission-set search only returns results in accounts where an Identity Center instance is discoverable (typically your management or delegated-admin account). Other accounts are silently skipped.
5. Find roles by IAM action
Search for roles whose policies grant a specific IAM action. Supports wildcards. Searches all org accounts or a single account.
# Find all roles that can create S3 buckets
catrole -R readonly-role -f 's3:CreateBucket'
# Find all roles with any S3 permission
catrole -R readonly-role -f 's3:*'
# Scope to a single account
catrole -R readonly-role -f 's3:*' -a 123456789012
Matching is bidirectional: a policy with s3:* matches a search for s3:CreateBucket, and a search for s3:* matches a policy with a specific action like s3:PutObject.
6. Scan an IAM user
Shows a complete profile for an IAM user including:
- User metadata (ARN, User ID, path, creation date, password last used)
- Access keys — Key ID, status (Active/Inactive), creation date, last used date, region, and service
- MFA devices — serial number and enabled date (warns if no MFA is configured)
- Group memberships
- Direct permissions — all attached managed and inline policies directly on the user
- Group-inherited permissions — policies from every group the user belongs to, shown per group
catrole -R readonly-role -a 123456789012 -u john.doe
The CSV export includes a Source column indicating whether each permission row comes from Direct attachment or a specific Group:<name>.
7. Scan an IAM group
Shows a complete profile for an IAM group including:
- Group metadata (ARN, Group ID, path, creation date)
- All members (user name, ARN, creation date)
- All permissions — attached managed and inline policies, flattened into individual rows
catrole -R readonly-role -a 123456789012 -g MyDevGroup
8. Scan an AWS Identity Center permission set
Shows a complete profile for an IDC permission set including:
- Permission set metadata (ARN, instance ARN, identity store ID, description, session duration, relay state)
- AWS managed policies attached to the permission set
- Customer managed policy references
- Inline policy (pretty-printed JSON)
- All provisioned accounts and principal assignments — every user and group assigned to the permission set across all provisioned accounts, with names resolved via the Identity Store
catrole -R readonly-role -a 123456789012 -P MyPermissionSet --region us-east-1
--regionis required when your Identity Center instance is not in your shell's default AWS region. Thesso-adminandidentitystoreAPIs are regional and must target the region where IDC was set up (commonlyus-east-1).
Output
Every scan prints a colour-coded Rich table to the terminal and automatically saves results to a timestamped CSV file in the current directory.
| Mode | CSV filename pattern |
|---|---|
| Role | iam-role_<account>_<name>_<ts>.csv |
| Policy | iam-policy_<account>_<name>_<ts>.csv |
| Search | iam-search_<pattern>_<ts>.csv |
| Action search | iam-action-search_<pattern>_<ts>.csv |
| User | iam-user_<account>_<name>_<ts>.csv |
| Group | iam-group_<account>_<name>_<ts>.csv |
| Permission Set | idc-permset_<account>_<name>_<ts>.csv |
All flags
-R, --assume-role ROLE IAM role to assume in target account(s) (or set via ~/.catrole)
-a, --account ACCOUNT AWS account ID (12 digits)
-r, --role ROLE IAM role name to scan
-p, --policy POLICY IAM policy name to scan
-A, --arn ARN Full ARN of an IAM role or policy
-s, --search PATTERN Wildcard pattern to search across org. Default scope: roles+policies.
Add -r/-p/-u/-g/-idc (no value) to filter type(s).
-f, --find-action ACTION IAM action pattern to find in role policies across org
-u, --user USER IAM user name to scan
-g, --group GROUP IAM group name to scan
-P, --permission-set NAME IDC permission set name to scan
-idc, --idc With -s: filter search to IDC permission sets
--region REGION AWS region for IDC (required with -P, or with -s -idc, if not default)
-v, --version Show version and exit
-h, --help Show help and exit
Run catrole -h for full help.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file catrole-0.4.0.tar.gz.
File metadata
- Download URL: catrole-0.4.0.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9c54f93dfff80b0f7ebdb2a16bcd98ded30ac2a732eb1280dd7156fec949b07
|
|
| MD5 |
8fd5bce4de2d6de5b39ee08f5151b1a2
|
|
| BLAKE2b-256 |
468bc6d8c3576da352ed07c2ed7dd13397dd66c9bd5a73f34bf0b454780ce788
|
File details
Details for the file catrole-0.4.0-py3-none-any.whl.
File metadata
- Download URL: catrole-0.4.0-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
432047d4f898dbae4f4cd5daaaf671e0489c2e3e5c84f7cebbbb9077fab5fa07
|
|
| MD5 |
c154640209d5ddaaf80e2fbdcc1ffcf3
|
|
| BLAKE2b-256 |
136572930d9617deb62ce31d16b7f3fd77fc89d9f3bd48747ef33acebca4153b
|