"""Application aws iam groups script.""" import csv import os from datetime import datetime import boto3 import botocore from github import Github GITHUB_TOKEN = os.getenv('GITHUB_TOKEN') config = botocore.config.Config( region_name='us-east-1', retries=dict(max_attempts=10, mode='adaptive') ) client = boto3.client('iam', config=config) def get_iam_groups_list(): """Get iam groups. Returns: list: List of all iam groups """ iam_groups = [] response = client.list_groups(MaxItems=100) if 'Groups' in response: iam_groups = response['Groups'] return iam_groups def update_group_list(iam_groups): """Update iam groups list. Args: iam_groups: List of all iam groups Returns: list: Updated list of all iam groups """ i = 0 while i < len(iam_groups): iam_group = iam_groups[i] del iam_group['Path'] del iam_group['GroupId'] del iam_group['Arn'] del iam_group['CreateDate'] iam_group['IAM Permissions'] = '=HYPERLINK("https://us-east-1.console.aws.amazon.com/iamv2/home#/groups/details/{group_name}?section=permissions"; "IAM Group Permissions")'.format(group_name=iam_group['GroupName']) # noqa: E501 iam_group['Terraform Permissions'] = 'None' i += 1 def get_terraform_iam_groups(): """Get terraform iam groups from github repo. Returns: list: List of terraform all iam groups """ g = Github(GITHUB_TOKEN) repo = g.get_repo('theorchard/terraform-infra') contents = repo.get_contents('prod/iam/groups') i = 0 terraform_iam_groups = [] while i < len(contents): terraform_iam_groups.append(contents[i].name) i += 1 return terraform_iam_groups def add_terraform_iam_groups(terraform_iam_groups, iam_groups): """Add terraform iam groups. Args: terraform_iam_groups: List of terraform all iam groups, iam_groups: List of all iam groups Returns: list: List of all iam groups """ i = 0 while i < len(iam_groups): j = 0 while j < len(terraform_iam_groups): if iam_groups[i]['GroupName'].find(terraform_iam_groups[j]) != -1 \ or iam_groups[i]['GroupName'] == terraform_iam_groups[j]: iam_groups[i]['Terraform Permissions'] = '=HYPERLINK("https://github.com/theorchard/terraform-infra/tree/master/prod/iam/groups/{terraform_iam_group}"; "Terraform Group Permissions")'.format(terraform_iam_group=terraform_iam_groups[j]) # noqa: E501 j += 1 i += 1 def create_csv_user_spreadsheet(iam_groups): """Create aws_groups csv file. Args: iam_groups: List of all iam groups """ now = datetime.now() dt_string = now.strftime('%d-%m-%Y-%r') group_info = ['GroupName', 'IAM Permissions', 'Terraform Permissions'] with open('../spreadsheets/aws-iam-groups-audit_{date_time}.csv'.format(date_time=dt_string), 'w') as csvfile: # noqa: E501 writer = csv.DictWriter(csvfile, fieldnames=group_info) writer.writeheader() writer.writerows(iam_groups) def main(): """Start script.""" groups = get_iam_groups_list() update_group_list(groups) terrafrom_iam_groups = get_terraform_iam_groups() add_terraform_iam_groups(terrafrom_iam_groups, groups) create_csv_user_spreadsheet(groups) if __name__ == '__main__': main()