Flask-Vaultは、 AES-GCMを使用して対称的な暗号化を使用して、明確に保持したくない秘密を保存するために、いくつかのCLIコマンドとPython関数を提供します。これらのコマンドと関数を使用すると、APIキー、データベース資格情報など、非常に重要な資格情報を安全に読み取り/書き込むことができます。
さらに、 Flask-Vaultには、データの暗号化と復号化を簡素化するためのいくつかのヘルパーが含まれています。
Web開発の世界では、機密情報を保護することが最も重要な関心事です。 Flaskを使用するときに資格情報の管理に関しては、2つの顕著なオプションが出現します: Flask-VaultとDotenv。どちらもメリットを持っていますが、 Flask-Vaultは重要なデータを保護するための優れた選択肢として際立っています。
Flask-Vaultは、機密情報を保護するための堅牢なソリューションを提供します。暗号化された資格情報に保存されています。toml.encファイル、このデータは、セキュリティの追加層によって保護されています。マスターキーでのみ復号化でき、ファイルが間違った手に該当しても、情報がアクセスできないままであることを保証できます。
さらに、 flask vault editを介してアクセスされる暗号化されたエディターは、資格情報ファイルの安全な直接編集を可能にします。この機能は、セキュリティを損なうことなく、機密情報を迅速に調整するために非常に貴重です。
Flask-VaultとDotenvの両方が重要な機能を果たしますが、 Flask-Vaultは機密データを保護するための優れた選択肢として立っています。その堅牢な暗号化とフラスコ内のシームレスな統合により、重要な情報を管理するための理想的なソリューションになります。アクセシビリティを犠牲にすることなくセキュリティに優先順位を付けることにより、 Flask-Vaultは開発者がデータ保護対策に最大限の自信を持ってアプリケーションを構築および維持できるようになります。
flask_vaultが使用する暗号化は、128ビットキーを持つAES-GCMです。
128ビットキーでAES-GCMを使用することの利点は次のとおりです。
セキュリティ:AES-GCMは安全であると見なされ、インターネット通信を保護するためのTLS(輸送層セキュリティ)を含むさまざまなアプリケーションで広く使用されています。
効率:AES-GCMは、計算リソースの点で比較的効率的であることで知られています。これは、IoT(Thingのインターネット)デバイスなど、計算能力が制限される可能性があるシナリオで特に重要です。
高速暗号化と復号化:AES-GCMは最新のプロセッサ向けに最適化されています。つまり、データは比較的迅速にデータを暗号化および復号化できます。これは、パフォーマンスに敏感なアプリケーションにとって重要です。
並列化:AES-GCM暗号化と復号化は並列化できます。つまり、最新のCPUの複数の処理コアを利用できます。
関連データを使用した認証された暗号化(AEAD):AES-GCMは、データが暗号化されているだけでなく、データが改ざんされていないことを確認するメッセージ認証コード(MAC)も含まれていることを意味します。
NonCeベース:AES-GCMには、暗号化操作ごとにNonCeと呼ばれる一意の初期化ベクトル(IV)が必要です。これは、同じキーで同じデータを複数回暗号化したとしても、暗号文は異なるため、セキュリティの追加レイヤーが追加されることを意味します。
広くサポートされている:AES-GCMは、多くの暗号化ライブラリとフレームワークによってサポートされており、幅広いアプリケーションに実用的な選択肢となっています。
コンプライアンス:AES-GCMは、多くの場合、さまざまなセキュリティ基準とコンプライアンスフレームワークで推奨または要求されます。
Flask-Vaultは、データとファイルを保護するために依存関係をいくつか使用しています。このライブラリの2つの主な依存関係を次に示します。
python = " >=3.7 "
cryptography = " ^41.0.3 "PIPを使用してインストールして更新します
$ > pip install Flask-Vault詩を使用してインストールして更新します
$ > poetry add Flask-Vaultflask_vault.cli.vault_cliを使用して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 )
...Flask-Vaultで使用されるデフォルトのエディターはVIです。
以下の例は、 vi以外のエディターを使用して、 credentials.toml.encで保存された資格情報を表示または編集する方法を示しています。toml.enc。示されているように、この例では、 nano Editorを使用してflask vault showコマンドを使用します。
$ > EDITOR=nano flask vault showFlask Vault init :
flask vault initコマンドは、Flask-Vaultが動作するために必要な環境を初期化します。このコマンドは、credentials.toml.encを作成します。Toml.Encファイル、master.keyファイル、tmpフォルダー(Flask-Vaultが内部的に使用します)。このコマンドをもう一度実行すると、作成されたファイルを上書きできないため、アクションは実行されません。
Flask Vault Get [Secret_Name] :
flask vault getCommandはcredentials.toml.encを復号化し、ターミナルに選択したシークレットを表示します。
Flask Vault Show :
flask vault showコマンドは、master.keyを使用してcredentials.toml.enc情報の内容を復号化し、読み取り専用モードで開き、保存された資格情報を表示します。
Flask Vault Edit :
flask vault showコマンドは、master.keyを使用してcredentials.toml.encのコンテンツをdecrypteds.toml.encファイルを編集し、編集モードで開きます。
Flask Vault Encrypt [Filename] :
flask vault encryptコマンドは、暗号化されたファイルを作成します。生成されたファイルはAES-GCM暗号化によって保護され、Plantextファイルと区別するために.enc拡張機能を使用します。
Flask Vault Decrypt [Filename] :
flask vault decryptコマンドは、拡張.encを使用してファイルを復号化し、その内容を端末に表示します。
flask_vault.utils.aes_gcm_encryptを使用してデータを暗号化します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を使用してデータを復号化します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ファイル以下の例は、Flask-Vaultのget_secret関数を使用して、 credentials.toml.enc情報から秘密を取得する方法を示しています。この例では、 get_secretを使用してデータベースの構成を行い、 master.keyにアクセスできない人をクリアテキストでユーザー名、パスワード、データベース名を読み取ることができません。
# ... other stuff
[ db ]
name = " my-db-name "
username = " root "
password = " my-db-password "credentials.toml.encから秘密を取得する方法。toml.enc flask_vault.utils.get_secret関数を使用して、 credentials.toml.enc内部に保存されている秘密と資格情報を取得します。toml.encファイル。
flask_vault.utils.get_secretを使用してapp.py 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 ()質問、コメント、または改善は、GitHubで問題を作成してください。
コードまたはドキュメントの変更を提案するには、GitHubに新しいプルリクエストを作成してください。また、マスターブランチにリベートすることにより、プルリクエストで複数のコミットを1つのコミットに押し込んでください。
私の仕事が有用であると感じ、このプロジェクトと将来のプロジェクトのサポートに興味がある場合は、次の暗号通貨のいずれかを使用して寄付を残してください。
bc1qy8h7d9xt8442axcyzdq8q3vglvcqzexdmjhawpMITライセンス
Copyright(c)2023-present Adriano Romanazzo <github.com/multiversecoder>
このソフトウェアと関連するドキュメントファイル(「ソフトウェア」)のコピーを入手して、制限なしにソフトウェアを扱うために、このソフトウェアを制限する権利を含め、ソフトウェアのコピーをコピー、変更、公開、配布、販売する、ソフトウェアのコピーを許可する人を許可する人を許可することを含めて、許可が無料で許可されます。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたはソフトウェアの使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。