#!/bin/python import boto3 from pprint import pprint, pformat import json import codecs import sys import argparse import logging import uuid def parse_arguments(): parser = argparse.ArgumentParser() parser.add_argument('--accesskey', help='AWS Access key', default='') parser.add_argument('--secretkey', help='AWS Secret key', default='') parser.add_argument('--region', help='AWS Default region', default='us-east-1') parser.add_argument('--outfile', help='Path to output file with results', default='./secret_list.json') parser.add_argument('--inputfile', help='Path to input file with env variables', default='./secret_list.json') return parser.parse_args() if __name__ == "__main__": logger = logging.getLogger('') logger.setLevel(logging.DEBUG) args = parse_arguments() # Using project-specific parameters and common parameters for project group param_paths = [ f'apollo/uat/privateapi/' ] # Initialize the client with credentials or with IAM role. if (args.accesskey and args.secretkey): secrets_client = boto3.client( 'secretsmanager', aws_access_key_id = args.accesskey, aws_secret_access_key = args.secretkey, region_name = args.region ) sts_client = boto3.client( 'sts', aws_access_key_id = args.accesskey, aws_secret_access_key = args.secretkey, region_name = args.region ) else: secrets_client = boto3.client('secretsmanager', region_name=args.region) print(sts_client.get_caller_identity().get('Account')) with open(args.inputfile) as json_file: data = json.load(json_file) for p in data: print(p) for param in data: secret_value = param['value'] secret_name = param_paths[0] + param['name'] kms_name = "alias/uat/apollo/secrets_general" print(f"Secret name: {secret_name} Secret value: {secret_value} UUID {str(uuid.uuid4())} KMS {kms_name}") secrets_client.create_secret( Name=secret_name, ClientRequestToken=str(uuid.uuid4()), KmsKeyId=kms_name, SecretString=secret_value, ) response = secrets_client.list_secrets() secrets = [x for x in response['SecretList'] if path in x['Name']] while 'NextToken' in response: response = secrets_client.list_secrets(NextToken=response['NextToken']) secrets += [x for x in response['SecretList'] if path in x['Name']] secrets_list = [ { "name": x['Name'].split('/')[-1], "valueFrom": x['ARN'] } for x in secrets ] with open(args.outfile, 'wb') as f: json.dump( secrets_list, codecs.getwriter('utf-8')(f), indent=2, ensure_ascii=False )