Flask-Vault proporciona varios comandos CLI y funciones de Python para almacenar secretos que no desea mantener en el claro, utilizando cifrado simétrico con AES-GCM . Estos comandos y funciones le permiten leer/escribir credenciales muy importantes como claves API, credenciales de bases de datos, etc.
Además, Flask-Vault contiene varios ayudantes para simplificar el cifrado y el descifrado de datos.
En el mundo del desarrollo web, salvaguardar la información confidencial es una preocupación primordial. Cuando se trata de administrar credenciales cuando se usa Flask, surgen dos opciones prominentes: Flask-Vault y Dotenv. Mientras que ambos tienen sus méritos, Flask-Vault se destaca como la elección superior para asegurar datos críticos.
Flask-Vault ofrece una solución robusta para proteger la información confidencial. Almacenado en un archivo Credentials.toml.Enc cifrado, estos datos están protegidos por una capa adicional de seguridad. Solo se puede descifrarse con la clave maestra, asegurando que incluso si el archivo cae en las manos equivocadas, la información sigue siendo inaccesible.
Además, el editor encriptado, accedido a través de flask vault edit , permite una edición directa segura del archivo de credenciales. Esta característica es invaluable para hacer ajustes rápidos a información confidencial sin comprometer la seguridad.
Mientras que tanto Flask-Vault y Dotenv sirven funciones importantes, Flask-Vault se considera la opción superior para asegurar datos confidenciales. Su cifrado robusto y su integración perfecta dentro de Flask lo convierten en la solución ideal para administrar información crítica. Al priorizar la seguridad sin sacrificar la accesibilidad, Flask-Vault permite a los desarrolladores construir y mantener aplicaciones con la máxima confianza en sus medidas de protección de datos.
El cifrado utilizado por flask_vault es AES-GCM con una clave de 128 bits .
Aquí hay algunos beneficios de usar AES-GCM con una clave de 128 bits:
Seguridad: AES-GCM se considera seguro y se usa ampliamente en diversas aplicaciones, incluidas las TLS (seguridad de la capa de transporte) para asegurar la comunicación por Internet.
Eficiencia: AES-GCM es conocido por ser relativamente eficiente en términos de recursos computacionales. Esto es especialmente importante en escenarios en los que la potencia computacional puede ser limitada, como en los dispositivos IoT (Internet de las cosas).
Cifrado rápido y descifrado: AES-GCM está optimizado para procesadores modernos, lo que significa que puede cifrar y descifrar datos relativamente rápido. Esto es importante para aplicaciones sensibles al rendimiento.
Paralelización: el cifrado y el descifrado AES-GCM pueden ser paralelos, lo que significa que puede aprovechar múltiples núcleos de procesamiento en las CPU modernas.
Cifrado autenticado con datos asociados (AEAD): AES-GCM proporciona confidencialidad e integridad, lo que significa que no solo los datos están encriptados, sino que también incluye un código de autenticación de mensajes (Mac) para verificar que los datos no se han tamizado.
Basado en nonce: AES-GCM requiere un vector de inicialización único (IV), llamado Nonce, para cada operación de cifrado. Esto significa que incluso si cifra los mismos datos con la misma clave varias veces, el texto cifrado será diferente, agregando una capa adicional de seguridad.
Ampliamente compatible: AES-GCM es compatible con muchas bibliotecas y marcos criptográficos, lo que lo convierte en una opción práctica para una amplia gama de aplicaciones.
Cumplimiento: AES-GCM a menudo es recomendado o requerido por varios estándares de seguridad y marcos de cumplimiento.
Flask-Vault utiliza pocas dependencias para asegurar datos y archivos, aquí están las 2 dependencias principales de esta biblioteca:
python = " >=3.7 "
cryptography = " ^41.0.3 "Instalar y actualizar con PIP
$ > pip install Flask-VaultInstalar y actualizar con poesía
$ > poetry add Flask-Vaultflask_vault.cli.vault_cli para habilitar 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 )
... El editor predeterminado utilizado por Flask-Vault es VI .
El siguiente ejemplo muestra cómo usar un editor que no sea VI para mostrar o editar credenciales guardadas en credentials.toml.enc . Como se muestra, el ejemplo usará nano Editor para usar el comando flask vault show .
$ > EDITOR=nano flask vault showFlask Vault Init : El comando
flask vault initinicializará el entorno necesario para que funcione Flask-Vault. Este comando creará el archivocredentials.toml.enc, el archivomaster.keyy la carpetatmp(que será utilizado internamente por Flask-Vault). Si ejecuta este comando por segunda vez, no se tomarán medidas ya que no podrá sobrescribir los archivos creados.
Flask Vault Get [Secret_name] : el comando
flask vault getdescifrarácredentials.toml.ency mostrará el secreto seleccionado en la terminal.
Flask Vault Show : El comando
flask vault showdescifrará el contenido del archivocredentials.toml.encusandomaster.keyy lo abrirá en modo de solo lectura para mostrar las credenciales guardadas.
Flask Vault Edit : El comando
flask vault showdescifrará el contenido del archivocredentials.toml.encusandomaster.keyy lo abrirá en modo de edición.
Flask Vault encrypt [nombre de archivo] : el comando
flask vault encryptcreará un archivo cifrado. El archivo generado estará protegido por el cifrado AES-GCM y utilizará una extensión.encpara distinguirlo del archivo de texto sin formato.
Flask Vault Decrypt [FileName] : El comando
flask vault decryptdescifrará un archivo con la extensión.enc.
flask_vault.utils.aes_gcm_encrypt Cifrar datos sin exponer la clave de cifrado dentro de la aplicación 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 Descifrar datos sin exponer la clave de cifrado dentro de la aplicación 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 El siguiente ejemplo muestra cómo obtener secretos del archivo credentials.toml.enc usando la función get_secret de Flask-Vault. En este ejemplo, se utilizará get_secret para configurar la base de datos, evitando que cualquier persona que no tenga acceso a la master.key Key lea el nombre de nombre de usuario, contraseña y base de datos en texto claro
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.enc Use la función flask_vault.utils.get_secret para obtener secretos y credenciales almacenados dentro del archivo 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 ()Preguntas, comentarios o mejoras, cree un problema en GitHub.
Para sugerir un cambio en el código o documentación, cree una nueva solicitud de extracción en GitHub. Además, aplastan múltiples compromisos en una sola confirmación en su solicitud de extracción al rebotar en la rama maestra.
Si cree que mi trabajo ha sido útil y está interesado en apoyar este proyecto y cualquier proyecto futuro, déjame una donación utilizando una de las siguientes criptomonedas.
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpLicencia de MIT
Copyright (c) 2023-presente Adriano Romanazzo <github.com/multiverseCoder>
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar en el software sin restricción, incluidos los derechos de los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicense y/o vender copias del software, y para permitir que las personas a quienes se les proporciona el software para hacer, sujeto a las siguientes condiciones: las siguientes condiciones: las siguientes condiciones: las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, que surge, de o en relación con el software o el uso u otros tratos en el software.