import base64 import json from botocore.exceptions import ClientError def get_secret(client, secret_name: str): try: print(f'# {secret_name}') get_secret_value_response = client.get_secret_value( SecretId=secret_name ) except ClientError as e: if e.response['Error']['Code'] == 'DecryptionFailureException': # Secrets Manager can't decrypt the protected secret text # using the provided KMS key. # Deal with the exception here, and/or rethrow at your discretion. raise e elif e.response['Error']['Code'] == 'InternalServiceErrorException': # An error occurred on the server side. # Deal with the exception here, and/or rethrow at your discretion. raise e elif e.response['Error']['Code'] == 'InvalidParameterException': # You provided an invalid value for a parameter. # Deal with the exception here, and/or rethrow at your discretion. raise e elif e.response['Error']['Code'] == 'InvalidRequestException': # You provided a parameter value that is not valid # for the current state of the resource. # Deal with the exception here, and/or rethrow at your discretion. raise e elif e.response['Error']['Code'] == 'ResourceNotFoundException': # We can't find the resource that you asked for. # Deal with the exception here, and/or rethrow at your discretion. raise e else: # Decrypts secret using the associated KMS CMK. # Depending on whether the secret is a string or binary, # one of these fields will be populated. if 'SecretString' in get_secret_value_response: return get_secret_value_response['SecretString'] def print_pgpass_lines(client, secrets_list: list[str]) -> None: for secret in secrets_list: # hostname:port:database:username:password data = json.loads(get_secret(client, secret)) print(data['host'], data['port'], '*', data['username'], data['password'], sep=":")