Skip to content

Instantly share code, notes, and snippets.

Keybase proof

I hereby claim:

  • I am SamLR on github.
  • I am samlr (https://keybase.io/samlr) on keybase.
  • I have a public key whose fingerprint is 749F 8D9C F5A3 B979 65F5 9456 E635 E203 95E7 9E5F

To claim this, I am signing this object:

@SamLR
SamLR / Results
Created January 1, 2016 17:37
Quick analysis of EMF 2014 talks
Total Entries = 184
Errors = 20
Used Entries = 164
Min = 15 min
Max = 180 min
Average = 52 min
----------------------------------------
Duration (min) | Count
30 | 48
60 | 38
import boto3
from sys import argv
def get_name(aws_obj):
names = list(tag['Value'] for tag in aws_obj['Tags'] if tag['Key'] == 'Name')
if len(names) != 1:
# print('No name for object: {}'.format(aws_obj))
return '--unknown--'
@SamLR
SamLR / aws-action-test.py
Last active May 23, 2019 15:24
Find out which roles/groups or users can perform an action
#
# Recommended use
# python3 aws-action-test.py ec2:create-instance > arns.json
#
# This is pretty slow but I think it hits most main things in AWS
#
import boto3
from sys import argv
@SamLR
SamLR / aws-user-group-crawler.py
Created May 23, 2019 15:22
Crawl your users and find which groups they're in; crawl your groups and find their users!
#
# example usage
# # Get the data:
# $ python3 aws-iam-crawl.py > iam.json
#
# # Group summary
# $ cat iam.json| jq '.groups | map({"members": (._users|length), "policies": ((._inline_policies|length) + (._attached_policies|length)), "inline_policies": (._inline_policies|length), "name": .GroupName}) | sort_by(.members)[] ' -c
#
# # User summary (basically the same)
# $ cat iam.json| jq '.users | map({"groups": (._groups|length), "policies": ((._inline_policies|length) + (._attached_policies|length)), "inline_policies": (._inline_policies|length), "name": .UserName}) | sort_by(.groups)[] ' -c
@SamLR
SamLR / security-group-updater.py
Created July 12, 2019 13:28
Add a new CIDR to inbound connections for security groups that already permit another, specific, CIDR
#
# Find all the security groups that use a particular CIDR_TO_FIND and update
# them with a new ingress rule allowing access from CIDR on ports 0->65535
#
# DESCRIPTION can also be set to describe the new rule.
#
# If DRY_RUN is set to true the security groups will be searched for but not
# updated.
#
# Step 1
curl -v https://api.github.com/orgs/alphagov/repos
# Copy the 'rel="last"' value from this section
# < Link: <https://api.github.com/organizations/596977/repos?page=2>; rel="next", <https://api.github.com/organizations/596977/repos?page=44>; rel="last"
# i.e. '44'
for i in {1..44}; do curl "https://api.github.com/organizations/596977/repos?page=$i" >> repos.json; done
cat repos.json| jq '.[]|.html_url' -r | xargs -I REPO git clone REPO && sleep 1
cat repos.json | \
jq '.[]|.full_name' | \
xargs -I REPO
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: token ${GITHUB_TOKEN}" \
-d '{"organization": "alphagov-mirror"}' \
https://api.github.com/repos/REPO/forks
@SamLR
SamLR / forker.py
Last active September 1, 2019 15:49
from github import Github, GithubException
import json
from datetime import datetime
import os
def main(token):
g = Github(token)
alphagov = g.get_organization('alphagov')
@SamLR
SamLR / copier.py
Created September 1, 2019 22:14
Clone an org's public repos to another org.
import os
import json
import time
from datetime import datetime
from github import (
Github, UnknownObjectException, GithubException, RateLimitExceededException
)
RATE_LIMIT_COUNT = 0