Skip to content

Instantly share code, notes, and snippets.

@dgulinobw
dgulinobw / r53_scan.py
Created May 21, 2018 20:47
Lists All AWS Route53 resource records in a single account in column format
#!/usr/bin/env python
from __future__ import print_function
import json
import boto3
domains_client=boto3.client('route53domains')
resource_client=boto3.client('route53')
paginator = resource_client.get_paginator('list_hosted_zones')
@dgulinobw
dgulinobw / aws_savings_plan_report.py
Created December 8, 2020 23:10
Split EC2 savings plan savings between product tags
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import csv
from functools import reduce
from operator import add
import boto3
ce = boto3.client('ce')
@dgulinobw
dgulinobw / ddbBackup.py
Created January 17, 2020 15:23
AWS Lambda + standalone script to backup all DynamoDB tables.
#!/usr/bin/env python
#based on:
#https://aws.amazon.com/blogs/database/a-serverless-solution-to-schedule-your-amazon-dynamodb-on-demand-backup/
from __future__ import print_function
from datetime import date, datetime, timedelta
import json
import boto3
import time
from botocore.exceptions import ClientError
import os
@dgulinobw
dgulinobw / iam_scan.py
Last active November 14, 2019 14:30
List all IAM policies in account. Pipe to grep to find who has access to what.
#!/usr/bin/env python
from __future__ import print_function
import boto3
from pygments import highlight, lexers, formatters
from botocore.exceptions import ClientError
iam = boto3.resource('iam')
s3 = boto3.client('s3')
@dgulinobw
dgulinobw / r53_cert_scan.sh
Created October 17, 2019 17:00
Scan all domains in a route53 zone for TLS certificate expiration dates
#!/bin/bash
export DOMAIN=test.info
export PROFILE=default
aws --profile ${PROFILE} route53 list-resource-record-sets --hosted-zone-id $(aws --profile ${PROFILE} route53 list-hosted-zones-by-name --dns-name ${DOMAIN} --max-items 1 | jq -r .HostedZones[0].Id) > /tmp/${DOMAIN}.json
for a in $(cat /tmp/${DOMAIN}.json | jq -r '.[][] | "\(.Name),\(.ResourceRecords[0].Value)"' | sort | uniq); do
rr=$(echo $a | awk -F"," '{print $1}')
value=$(echo $a | awk -F"," '{print $2}')
echo -n "$rr,$value,"
@dgulinobw
dgulinobw / ec2_tag_by_hostname.py
Last active February 22, 2019 23:47
Tag ec2 resources based on associated instance's tags.
#!/usr/bin/env python
from __future__ import print_function
import sys
import os
import json
import boto3
from botocore.exceptions import ClientError
@dgulinobw
dgulinobw / ec2_instance_name_from_id.sh
Created February 20, 2019 16:15
ec2_instance_name_from_id.sh
#!/bin/bash
InstanceId=$1
#for region in `aws ec2 describe-regions --output text | cut -f3` #unoptimized list order
for region in us-east-1 us-east-2 us-west-1 us-west-2 eu-north-1 ap-south-1 eu-west-3 eu-west-2 eu-west-1 ap-northeast-2 ap-northeast-1 sa-east-1 ca-central-1 ap-southeast-1 ap-southeast-2 eu-central-1;
do
Name=$(aws ec2 describe-instances --region $region --instance-ids=$InstanceId | jq -r '.Reservations[].Instances[].Tags[] | select(.Key=="Name").Value')
if [ "$Name" != "" ];
then
echo $Name
break
@dgulinobw
dgulinobw / ec2_instance_id_from_name.sh
Last active February 20, 2019 15:59
ec2_instance_id_from_name.sh
#!/bin/bash
InstanceName=$1
#for region in `aws ec2 describe-regions --output text | cut -f3` #unoptimized list order, but dynamic
for region in us-east-1 us-east-2 us-west-1 us-west-2 eu-north-1 ap-south-1 eu-west-3 eu-west-2 eu-west-1 ap-northeast-2 ap-northeast-1 sa-east-1 ca-central-1 ap-southeast-1 ap-southeast-2 eu-central-1;
do
Id=$(aws ec2 describe-instances --region $region --filters Name=tag-value,Values=$InstanceName | jq -r .Reservations[].Instances[].InstanceId)
if [ "$Id" != "" ];
then
echo $Id
break
@dgulinobw
dgulinobw / aws_healthchecks.sh
Created May 19, 2018 15:22
list AWS R53 healthcheck id and name in two columns
#!/bin/bash
aws route53 list-health-checks | jq -r '["ID","FQDN"], ["--","---"], (.[][] | [.Id, .HealthCheckConfig.FullyQualifiedDomainName]) | @tsv'
@dgulinobw
dgulinobw / cat_ec2_security_groups.py
Created February 19, 2018 22:48
Print out ec2 security group inbound rules, so you can grep on IPs, etc.
#!/usr/bin/env python
from __future__ import print_function
import json
import boto3
for region in ["us-east-1","us-west-1", "us-west-2"]:
ec2=boto3.client('ec2', region )
sgs = ec2.describe_security_groups()["SecurityGroups"]
for sg in sgs: