import json import pathlib import boto3 client = boto3.client('iam') account_id = boto3.client('sts').get_caller_identity().get('Account') pathlib.Path(f'backups/{account_id}').mkdir(parents=True, exist_ok=True) with open('policies_to_delete.txt') as f: for line in f.readlines(): policy_arn = line.strip() print(f'Backing up policy {policy_arn}') policy = client.get_policy(PolicyArn=policy_arn) policy_name = policy['Policy']['PolicyName'] default_version_id = policy['Policy']['DefaultVersionId'] policy_version = client.get_policy_version( PolicyArn=policy_arn, VersionId=default_version_id ) policy_document = policy_version['PolicyVersion']['Document'] with open(f'backups/{account_id}/{policy_name}.json', 'w') as doc: doc.write(json.dumps(policy_document)) print(f'Deleting policy {policy_name}') for policy_version_page in client.get_paginator('list_policy_versions').paginate(PolicyArn=policy_arn): for version in policy_version_page['Versions']: if not version['IsDefaultVersion']: client.delete_policy_version( PolicyArn=policy_arn, VersionId=version['VersionId'] ) client.delete_policy(PolicyArn=policy_arn)