#!/bin/python import boto3 from pprint import pprint, pformat import json import sys import argparse import logging from utility import check_missing_tags from utility import convert_tags_to_aws_format from utility import convert_tags_from_aws_format from utility import filter_only_missing_tags from utility import get_aws_objects 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('--profile', help='AWS profile', default='sme-dev') parser.add_argument('--region', help='AWS Default region', default='us-east-1') return parser.parse_args() def create_tags_from_path(secret_name): if len(secret_name.split('/')) > 1: platform_prefix = secret_name.split('/')[0] env_prefix = secret_name.split('/')[1] platform = { 'apollo': 'Apollo', 'marketing': 'Marketing', 'delphi': 'Delphi', 'infra': 'Delphi', 'artistapp': 'Artist App', 'core': 'Core,' } platform_short = { 'apollo': 'APL', 'marketing': 'MCT', 'delphi': 'DLP', 'infra': 'DLP', 'artistapp': 'AMA', 'core': 'CORE', } environment = { 'dev': 'Development', 'qa': 'QA', 'stage': 'Staging', 'uat': 'UAT', 'prod': 'Production', 'administration': 'Common', 'jenkins': 'Common' } environment_short = { 'dev': 'DEV', 'qa': 'QA', 'stage': 'STAGE', 'uat': 'UAT', 'prod': 'PROD', 'administration': 'CMN', 'jenkins': 'CMN' } if platform_prefix in platform and env_prefix in environment: return { 'platform': platform[platform_prefix], 'environment': environment[env_prefix], 'service': 'Secrets Manager', 'project': 'Infrastructure', 'plat_env_project_service': (platform_short[platform_prefix]+'_'+environment_short[env_prefix]+'_'+'INFRA_SCRT') } # Else return { 'platform': 'Delphi', 'environment': 'Common', 'service': 'Secrets Manager', 'project': 'Infrastructure', 'plat_env_project_service': 'DLP_CMN_INFRA_SCRT' } if __name__ == "__main__": logger = logging.getLogger('') logger.setLevel(logging.DEBUG) args = parse_arguments() # Using project-specific parameters and common parameters for project group #path = "apollo/stage/" # 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 ) elif args.profile: session = boto3.Session(profile_name=args.profile) secrets_client = session.client('secretsmanager') else: secrets_client = boto3.client('secretsmanager', region_name=args.region) secrets = get_aws_objects(secrets_client.list_secrets,'SecretList') for secret in secrets: current_tags = convert_tags_from_aws_format(secrets_client.describe_secret(SecretId=secret['Name']).get('Tags', [])) missing_tag_keys = check_missing_tags(current_tags) if len(missing_tag_keys) > 0: applied_tags = filter_only_missing_tags(create_tags_from_path(secret['Name']),missing_tag_keys) pprint(applied_tags) response = secrets_client.tag_resource( SecretId=secret['ARN'], Tags=convert_tags_to_aws_format(applied_tags) ) print(f"{secret['ARN']} has been updated")