web-dev-qa-db-ja.com

シークレット(パスワード)を別のファイルに保存する

Pythonスクリプト)のアプリケーションシークレット(パスワード、アクセストークン)を保存する最も簡単な方法は何ですか?*.yml Rubyのようなファイルですが、意外にもそうではないことがわかりました。それでは、それは何ですか?最も簡単な解決策は何ですか?

それらをseparateファイルに入れたいので、そのファイルをgithubリポジトリにプッシュしますnot notになります。

35
アレックス

別の* pyファイルに資格情報を保存するのが最も安全だと思います。次に、それをインポートします。例は次のようになります

config.py

username = "xy"
password = "abcd"

main.py

import config
login(config.username, config.password)
49
kecer

私はまったく同じ質問を扱っていて、実際にはkecerが提案したのと同じ解決策になりました。何十ものスクリプトを使用する必要があるため、独自のライブラリを作成しました。この解決策を紹介しましょう。

credlib.py-資格情報を処理するためのユニバーサルライブラリ

class credential:
    def __init__(self, hostname, username, password):
        self.hostname = hostname
        self.username = username
        self.password = password

mycredentials.py-すべての資格情報を保存するローカルファイル

from credlib import credential
sys_prod = credential("srv01", "user", "pass")
sys_stg = credential("srv02", "user", "pass")
sys_db = credential("db01", "userdb", "passdb")

mysystemlib.py-これは私のシステムにアクセスするための一般的なライブラリです(新しい認証情報システムとレガシーの両方がサポートされています)

from credlib import credential

def system_login(*args): # this is new function definition
#def system_login(hostname, username, password): # this was previous function definition

    if len(args) == 1 and isinstance(args[0], credential):
        hostname = args[0].hostname
        username = args[0].username
        password = args[0].password
    Elif len(args) == 3:
        hostname = args[0]
        username = args[1]
        password = args[2]
    else:
        raise ValueError('Invalid arguments')

    do_login(hostname, username, password) # this is original system login call

main.py-資格情報とシステムライブラリを組み合わせるメインスクリプト

from mycredentials import sys_stg, sys_db
import mysystemlib
...
mysystemlib.system_login(sys_stg)

従来のホスト名/ユーザー名/パスワードの方法は引き続き機能するため、古いスクリプトには影響しません。

mysystemlib.system_login("srv02", "user", "pass")

これには多くの利点があります:

  • すべてのpythonスクリプトで同じクレデンシャルシステム
  • パスワード付きのファイルは分離されます(ファイルはより厳密なアクセス許可を持つことができます)
  • ファイルは私たちのgitリポジトリ(.gitignore経由で除外)に保存されないため、pythonスクリプト/ライブラリは、資格情報を公開せずに他のユーザーと共有できます(誰でも自分のローカルで自分の資格情報を定義します)ファイル)
  • パスワードを変更する必要がある場合は、1か所でのみ変更します
5
CraZ