catchting faults when non authorized, quick and dirty

This commit is contained in:
c0decave
2019-12-12 15:44:09 +01:00
parent c2047194f5
commit 936e14af4a

View File

@@ -1,6 +1,12 @@
import click import click
import boto3 import boto3
import sys import sys
import botocore
from IPython import embed
mperm = {}
resource_counts = {} resource_counts = {}
resource_totals = {} resource_totals = {}
@@ -57,19 +63,111 @@ def controller(access, secret, profile):
click.echo('Counting resources across regions. This will take a few minutes...') click.echo('Counting resources across regions. This will take a few minutes...')
click.echo(' ') click.echo(' ')
ec2_counter(account_id) ec2_counter(account_id)
autoscaling_counter() try:
balancer_counter() autoscaling_counter()
s3_counter() except botocore.exceptions.ClientError as e:
iam_counter() op = e.__dict__['operation_name']
lambda_counter() code = e.__dict__['response']['Error']['Code']
glacier_counter() msg = e.__dict__['response']['Error']['Message']
cloudwatch_rules_counter() print('{0} {1} Operation: {2}'.format(code,msg,op))
config_counter() mperm[op] = {'Code':code,'Message':msg}
cloudtrail_counter() try:
sns_counter() balancer_counter()
kms_counter() except botocore.exceptions.ClientError as e:
dynamo_counter() op = e.__dict__['operation_name']
rds_counter() code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
s3_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
iam_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
lambda_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
glacier_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
cloudwatch_rules_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
config_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
cloudtrail_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
sns_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
kms_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
dynamo_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
rds_counter()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
# show results # show results
click.echo('Resources by region') click.echo('Resources by region')
@@ -120,26 +218,156 @@ def ec2_counter(account_id):
vpc_peering_connection_iterator = ec2.vpc_peering_connections.all() vpc_peering_connection_iterator = ec2.vpc_peering_connections.all()
network_acl_iterator = ec2.network_acls.all() network_acl_iterator = ec2.network_acls.all()
vpc_address_iterator = ec2.vpc_addresses.all() vpc_address_iterator = ec2.vpc_addresses.all()
nat_gateways = ec2client.get_paginator('describe_nat_gateways')
nat_gateway_iterator = nat_gateways.paginate()
endpoints = ec2client.describe_vpc_endpoints()
try:
nat_gateways = ec2client.get_paginator('describe_nat_gateways')
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
nat_gateway_iterator = nat_gateways.paginate()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
try:
endpoints = ec2client.describe_vpc_endpoints()
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
# count resources # count resources
instance_counter = len(list(instance_iterator)) # try to get instances
group_counter = len(list(security_group_iterator)) try:
volume_counter = len(list(volume_iterator)) instance_counter = len(list(instance_iterator))
snapshot_counter = len(list(snapshot_iterator)) except botocore.exceptions.ClientError as e:
image_counter = len(list(image_iterator)) op = e.__dict__['operation_name']
vpc_counter = len(list(vpc_iterator)) code = e.__dict__['response']['Error']['Code']
subnet_counter = len(list(subnet_iterator)) msg = e.__dict__['response']['Error']['Message']
peering_counter = len(list(vpc_peering_connection_iterator)) print('{0} {1} Operation: {2}'.format(code,msg,op))
acl_counter = len(list(network_acl_iterator)) mperm[op] = {'Code':code,'Message':msg}
ip_counter = len(list(vpc_address_iterator)) instance_counter = 0
try:
group_counter = len(list(security_group_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
group_counter = 0
try:
volume_counter = len(list(volume_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
volume_counter = 0
try:
snapshot_counter = len(list(snapshot_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
snapshot_counter = 0
try:
image_counter = len(list(image_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
image_counter = 0
try:
vpc_counter = len(list(vpc_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
vpc_counter = 0
try:
subnet_counter = len(list(subnet_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
subnet_counter = 0
try:
peering_counter = len(list(vpc_peering_connection_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
peering_counter = 0
try:
acl_counter = len(list(network_acl_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
acl_counter = 0
try:
ip_counter = len(list(vpc_address_iterator))
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
ip_counter = 0
gateway_counter = 0 gateway_counter = 0
for gateway in nat_gateway_iterator: try:
gateway_counter += len(gateway['NatGateways']) for gateway in nat_gateway_iterator:
endpoint_counter = len(endpoints['VpcEndpoints']) try:
gateway_counter += len(gateway['NatGateways'])
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
endpoint_counter = len(endpoints['VpcEndpoints'])
except botocore.exceptions.ClientError as e:
op = e.__dict__['operation_name']
code = e.__dict__['response']['Error']['Code']
msg = e.__dict__['response']['Error']['Message']
print('{0} {1} Operation: {2}'.format(code,msg,op))
mperm[op] = {'Code':code,'Message':msg}
endpoint_counter = 0
# add to the cross region totals # add to the cross region totals
total_instances = total_instances + instance_counter total_instances = total_instances + instance_counter
@@ -427,4 +655,4 @@ def rds_counter():
resource_totals['RDS Instances'] = total_dbinstances resource_totals['RDS Instances'] = total_dbinstances
if __name__ == "__main__": if __name__ == "__main__":
controller() controller()