"""Do things with security groups.""" import boto3 import botocore OLD_VPN_RANGE = '192.168.32.0/24' NEW_VPN_CIDR_BLOCK = '192.168.40.0/22' client = boto3.client('ec2', region_name='us-east-1') all_groups = client.describe_security_groups( Filters=[ { 'Name': 'ip-permission.cidr', 'Values': [ OLD_VPN_RANGE, ] } ] ) for group in all_groups['SecurityGroups']: for permission in group['IpPermissions']: if 'IpRanges' in permission: for cidr in permission['IpRanges']: if cidr['CidrIp'] == OLD_VPN_RANGE: if 'FromPort' not in permission: print('Protocols specified without port. ' 'Adding access to {} to new VPN block'.format( permission['IpProtocol'])) try: resp = client.authorize_security_group_ingress( CidrIp=NEW_VPN_CIDR_BLOCK, IpProtocol=permission['IpProtocol'], GroupId=group['GroupId'] ) print('Status code is {}'.format( resp['ResponseMetadata']['HTTPStatusCode'])) except botocore.exceptions.ClientError as error: print(error) else: print('Adding port {} of protocol {} to new VPN block'.format( permission['FromPort'], permission['IpProtocol'] ) ) try: resp = client.authorize_security_group_ingress( CidrIp=NEW_VPN_CIDR_BLOCK, FromPort=permission['FromPort'], ToPort=permission['ToPort'], IpProtocol=permission['IpProtocol'], GroupId=group['GroupId'] ) print('Status code is {}'.format( resp['ResponseMetadata']['HTTPStatusCode'])) except botocore.exceptions.ClientError as error: print(error)