O Flask-Vault fornece vários comandos da CLI e funções Python para armazenar segredos que você não deseja manter em uma criptografia simétrica com AES-GCM . Esses comandos e funções permitem ler/escrever credenciais muito importantes, como chaves de API, credenciais de banco de dados, etc.
Além disso, o Flask-Vault contém vários ajudantes para simplificar a criptografia e descriptografia dos dados.
No mundo do desenvolvimento da Web, proteger informações confidenciais é uma preocupação primordial. Quando se trata de gerenciar credenciais ao usar o Flask, surgem duas opções proeminentes: Flask-Vault e Dotenv. Enquanto ambos têm seus méritos, o Flask-Vault se destaca como a escolha superior para garantir dados críticos.
O Flask-Vault oferece uma solução robusta para proteger informações confidenciais. Armazenados em um arquivo credenciais criptografados.toml.enc, esses dados são protegidos por uma camada adicional de segurança. Ele só pode ser descriptografado com a chave mestre, garantindo que, mesmo que o arquivo caia nas mãos erradas, a informação permaneça inacessível.
Além disso, o editor criptografado, acessado através do flask vault edit , permite a edição direta segura do arquivo de credenciais. Esse recurso é inestimável para fazer ajustes rápidos em informações confidenciais sem comprometer a segurança.
Enquanto o Flask-Vault e o DOTENV atendem a funções importantes, o Flask-Vault é a escolha superior para garantir dados confidenciais. Sua criptografia robusta e integração perfeita no Flask o tornam a solução ideal para gerenciar informações críticas. Ao priorizar a segurança sem sacrificar a acessibilidade, o Flask-Vault capacita os desenvolvedores a construir e manter aplicativos com a maior confiança em suas medidas de proteção de dados.
A criptografia usada por flask_vault é AES-GCM com uma chave de 128 bits .
Aqui estão alguns benefícios do uso do AES-GCM com uma chave de 128 bits:
Segurança: o AES-GCM é considerado seguro e é amplamente utilizado em várias aplicações, incluindo TLS (segurança da camada de transporte) para garantir a comunicação da Internet.
Eficiência: o AES-GCM é conhecido por ser relativamente eficiente em termos de recursos computacionais. Isso é especialmente importante em cenários em que o poder computacional pode ser limitado, como nos dispositivos IoT (Internet of Things).
Criptografia rápida e descriptografia: o AES-GCM é otimizado para processadores modernos, o que significa que ele pode criptografar e descriptografar os dados relativamente rapidamente. Isso é importante para aplicações sensíveis ao desempenho.
Paralelização: A criptografia e descriptografia de AES-GCM podem ser paralelizadas, o que significa que ela pode aproveitar vários núcleos de processamento nas CPUs modernas.
Criptografia autenticada com dados associados (AEAD): o AES-GCM fornece confidencialidade e integridade, o que significa que não apenas os dados criptografados, mas também incluem um código de autenticação de mensagem (MAC) para verificar se os dados não foram adulterados.
Baseado no NONCE: O AES-GCM requer um vetor de inicialização exclusivo (IV), chamado de nonce, para cada operação de criptografia. Isso significa que, mesmo se você criptografar os mesmos dados com a mesma chave várias vezes, o texto cifrado será diferente, adicionando uma camada extra de segurança.
Amplamente suportado: o AES-GCM é suportado por muitas bibliotecas e estruturas criptográficas, tornando-a uma escolha prática para uma ampla gama de aplicações.
Conformidade: O AES-GCM é frequentemente recomendado ou exigido por vários padrões de segurança e estruturas de conformidade.
O Flask-Vault usa poucas dependências para proteger dados e arquivos, aqui estão as duas principais dependências desta biblioteca:
python = " >=3.7 "
cryptography = " ^41.0.3 "Instale e atualize usando PIP
$ > pip install Flask-VaultInstale e atualize usando poesia
$ > poetry add Flask-Vaultflask_vault.cli.vault_cli para ativar Flask-Vault . from flask import Flask
from flask_vault . cli import vault_cli
app = Flask ( __name__ )
...
# Register Command using the
app . cli . add_command ( vault_cli )
... O editor padrão usado pelo Flask-Vault é VI .
O exemplo abaixo mostra como usar um editor que não seja o VI para mostrar ou editar credenciais salvas em credentials.toml.enc . Como mostrado, o exemplo usará nano Editor para usar o comando flask vault show .
$ > EDITOR=nano flask vault showFlask Vault init : O comando
flask vault initinicializará o ambiente necessário para o Flask-Vault operar. Este comando criarátmpmaster.keycredentials.toml.enc. Se você executar este comando pela segunda vez, nenhuma ação será tomada, pois você não poderá substituir os arquivos criados.
Flask Vault get [secret_name] : O comando
flask vault getDecriptarácredentials.toml.ence exibirá o segredo selecionado no terminal.
Flask Vault Show : O comando
flask vault showdescriptografará o conteúdo dascredentials.toml.encUsandomaster.keye o abrirá no modo somente leitura para mostrar as credenciais salvas.
Flask Vault Edit : O comando
flask vault showdescriptografará o conteúdo dascredentials.toml.encusandomaster.keye o abrirá no modo de edição.
Flask Vault Encrypt [nome do arquivo] : O comando
flask vault encryptcriará um arquivo criptografado. O arquivo gerado será protegido pela criptografia AES-GCM e usará uma extensão.encpara distingui-lo do arquivo de texto simples.
Flask Vault descriptografar [nome do arquivo] : O comando
flask vault decryptdescriptografará um arquivo com a extensão.ence exibirá seu conteúdo no terminal.
flask_vault.utils.aes_gcm_encrypt Criptografar dados sem expor a chave de criptografia dentro do aplicativo usando flask_vault.utils.aes_gcm_encrypt
from flask import Flask
from flask_vault . utils import aes_gcm_encrypt
app = Flask ( __name__ )
@ app . route ( "/encrypted" , methods = [ "GET" ])
def encrypted ():
ctx = {
"encrypted" : aes_gcm_encrypt ( "my.app.secret" )
}
return render_template ( "encrypted.html" , ** ctx )flask_vault.utils.aes_gcm_decrypt Descriptografar dados sem expor a chave de criptografia dentro do aplicativo usando flask_vault.utils.aes_gcm_decrypt
from flask import Flask
from flask_vault . utils import aes_gcm_decrypt
app = Flask ( __name__ )
@ æpp . route ( "/decrypt" , methods = [ "GET" ])
def decrypt ():
encrypted_data = request . args . get ( "encrypted" , None )
ctx = {
"plaintext" : aes_gcm_decrypt ( encrypted_data ) if encrypted_data is not None else "Missing encrypted data!"
}
return render_template ( "decrypt.html" , ** ctx )credentials.toml.enc O exemplo abaixo mostra como obter segredos do arquivo credentials.toml.enc usando a função get_secret do Flask-Vault. Neste exemplo, get_secret será usado para configurar o banco de dados, impedindo que qualquer pessoa que não tenha acesso ao master.key de ler o nome de usuário, senha e nome do banco de dados em texto claro
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.enc Use a função flask_vault.utils.get_secret para obter segredos e credenciais armazenados dentro do arquivo credentials.toml.enc .
flask_vault.utils.get_secret import sys
import mariadb
from flask import Flask , request , g
from flask_vault . utils import get_secret
app = Flask ( __name__ )
def get_db ():
db = getattr ( g , "_database" , None )
if db is None :
try :
conn = mariadb . connect (
user = get_secret ( "db" ). get ( "username" ),
password = get_secret ( "db" ). get ( "password" ),
host = "127.0.0.1" ,
port = 3306 ,
database = get_secret ( "db" ). get ( "name" ),
)
db = g . _database = conn
except mariadb . Error as e :
print ( f"Error connecting to MariaDB Platform: { e } " )
sys . exit ( 1 )
return db
@ app . teardown_appcontext
def close_connection ( exception ):
db = getattr ( g , "_database" , None )
if db is not None :
db . close ()Perguntas, comentários ou melhorias, crie um problema no GitHub.
Para sugerir uma alteração no código ou documentação, crie uma nova solicitação de tração no GitHub. Além disso, por favor, esmaga vários compromissos em uma única confirmação em sua solicitação de tração, rebocando na filial mestre.
Se você acha que meu trabalho tem sido útil e está interessado em apoiar este projeto e quaisquer projetos futuros, deixe -me uma doação usando uma das seguintes criptomoedas.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpMIT Licença
Copyright (c) 2023-presente Adriano Romazzo <github.com/multiversecoder>
A permissão é concedida, gratuita, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, inclusive sem limitação os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, mobilizar o software e/ou vender cópias do software e permitir que as pessoas a quem
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsáveis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.