Um decorador de Python para gerar entradas de tronco redigidas e bem formatadas. Funciona em todas as chamáveis: classe, métodos de classe, funções do módulo Python. Reduzir recursivamente os valores-chave do Dicionário Python com base em uma lista personalizável de chaves insensíveis ao caso. Impede que seus dados de aplicativos sensíveis, como os pares de teclas do provedor de nuvem, vazem para os logs de aplicativos.
pip install secure-logger from secure_logger . decorators import secure_logger
import logging
logging . getLogger ( __name__ )
logging . basicConfig ( level = logging . INFO )
class Foo ( object ):
@ secure_logger ( log_level = 'INFO' )
def bar ( self , dict_data , list_data ):
pass
# call your method, passing some sensitive data
dict_data = {
"not_a_sensitive_key" : "you-can-see-me" ,
"aws-access-key-id" : "i-am-hidden" ,
"aws-secret-access-key" : "so-am-i" ,
}
list_data = [ "foo" , "bar" ]
foo = Foo ()
foo . bar ( dict_data = dict_data , list_data = list_data )Saída de log:
INFO:secure_logger: __main__.bar() ['<__main__.Foo object at 0x103474ac0>'] keyword args: {
"dict_data": {
"not_a_sensitive_key": "you-can-see-me",
"aws-access-key-id": "*** -- secure_logger() -- ***",
"aws-secret-access-key": "*** -- secure_logger() -- ***"
},
"list_data": [
"foo",
"bar"
] from secure_logger . masked_dict import masked_dict , masked_dict2str
dict_data = {
'not_a_sensitive_key' : 'you-can-see-me' ,
'aws-access-key_id' : conf . AWS_ACCESS_KEY_ID ,
'aws-secret-access-key' : conf . AWS_SECRET_ACCESS_KEY
}
print ( masked_dict2str ( dict_data ))Saída:
{
" not_a_sensitive_key " : " you-can-see-me " ,
" aws-access-key-id " : " *** -- secure_logger() -- *** " ,
" aws-secret-access-key " : " *** -- secure_logger() -- *** "
}Secure_logger aceita parâmetros opcionais que você pode configurar como variáveis de ambiente Bash ou com um arquivo .env colocado na raiz do seu projeto
Além disso, você pode substituir invocações individuais do decorador por parâmetros personalizados:
class MyClass ():
@ secure_logger ( log_level = 'DEBUG' , sensitive_keys = [ "password" , "apikey" , "crown_jewels" ], message = "*** -- TOP SECRET -- ***" , indent = 4 )
def another_function ( self , password : str , apikey : str , crown_jewels : List ( dict )):
pass SECURE_LOGGER_REDACTION_MESSAGE = "*** -- secure_logger() -- ***"
SECURE_LOGGER_INDENTATION = 4
SECURE_LOGGER_SENSITIVE_KEYS = [
"password" ,
"token" ,
"client_id" ,
"client_secret" ,
"Authorization" ,
"secret" ,
"access_key_id" ,
"secret_access_key" ,
"access-key-id" ,
"secret-access-key" ,
"aws_access_key_id" ,
"aws_secret_access_key" ,
"aws-access-key-id" ,
"aws-secret-access-key" ,
]
SECURE_LOGGER_LOG_LEVEL = 'DEBUG' Os pedidos de tração são bem -vindos e incentivados!
Contato: Lawrence McDaniel.