質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

13257閲覧

IDやPasswordなどの秘密情報を平文でソースコードに埋め込まずに管理する方法

marururu

総合スコア23

暗号化

ネットワークを通じてデジタルデータをやり取りする際に、第三者に解読されることのないよう、アルゴリズムを用いてデータを変換すること。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2020/03/31 00:23

編集2020/03/31 03:23

※2020-03-31 12:22 タイトル変更(※旧タイトル:ID,PASS情報を暗号化してソースコードに埋め込む?利用する方法)

前提・実現したいこと

pythonからローカル環境下にあるDB(Postgres)に接続して、データを読み書きするスクリプトを作成しています。

ここで、スクリプト自体は、自動収集用PC上のスケジューラ(rundeckなど)で自動実行させるつもりなのですが、
接続定義情報(ipaddress,port,dbname,username,password)を、ソースコードに平文で直書きしてしまっています。

さすがにパスワードを平文のまま保存しておくのは衛生上好ましくないと思っており、何とかしたいと考えています。
が、不勉強でお恥ずかしながら、どのように実現すればよいのか、そもそもどう検索していいのかがよくわかりません。

セキュリティ関連の話は非常に奥が深く、そもそも自分に理解できるかどうかはさておき…、
一般的にこのような場合は、どのような実現方法が考えられるものなのでしょうか?
なにとぞご教示いただきたくよろしくお願いいたします。

ソースコードのイメージ

以下のような接続定義情報を記述しています。

python

1 connection_config = { 2 'host': '<ipaddress>', 3 'port': '<port>', 4 'database': '<dbname>', 5 'user': '<username>', 6 'password': '<password>', 7 } 8 engine = create_engine('postgresql://{user}:{password}@{host}:{port}/{database}'.format(**connection_config),echo=False) 9 conn = psycopg2.connect(**connection_config) 10 cur =conn.cursor()

以上、よろしくお願いいたします。

Pkun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akkman

2020/03/31 01:01

pythonに触れたことがないので、別言語の例でヒントになれば幸いです。 node.jsにはDB接続情報や各トークンなどをスクリプトファイルとは別の.envファイルに宣言します。 必要な時に.envファイルから環境変数を呼び出し、スクリプトファイルにはDB情報などは直接記述しないようにしてます。
guest

回答3

0

そもそもですが、ID や Password などの秘密情報を平文でソースコードに埋め込む方法は特別問題のある方法ではありません。
(逆に、見られて問題のある環境だと、ほぼ保護はできません)

セキュリティの基本は「どのような攻撃」から「何を守るか」です。
何に対しての対策なのかを整理されたほうが良いです。

投稿2020/03/31 04:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marururu

2020/03/31 05:03 編集

> セキュリティの基本は「どのような攻撃」から「何を守るか」です。 内輪の話だったのであまり考え切れていませんでした。 改めて考えてみると、セキュリティの脅威自体は正直あまりないような気がしてきました。実際、本ソースコードは開発チームしか見れないPC上に存在しており、公開されるようなソースコードではないですし、開発チームはみんな接続定義情報を知っているので、わざわざ暗号化する必要ないような気もします。.envに書くにしろ環境変数に書くにしろ、その情報のありかを、わかる人じゃないと見れない場所に置いておくことが重要であり、その場所がソースコード上か別のファイルの外出しされているかの違いしかないのかなとも感じてきました。 という諸々を考慮すると、マスタ情報の管理とかソースコードのメンテナンスという点で、個々のソースコードに情報を直書きしているのは将来的にちょっとしんどくなりそうだなぁ…という漠然な不安がありました。 したがって、質問のタイトルや概要から示されるような「セキュリティ」という観点ではなく、単純に情報の管理・運用の観点からの質問という意味合いが強いかもしれません。 ご指摘ありがとうございます。
guest

0

ベストアンサー

いくつかの方法がありますが、私が使っているのは以下の2つの方法どちらかです

  • 環境変数を使う
  • 別の設定ファイル(ini, yml等)に分ける

環境変数を使う方法は多くのクラウドサービスでもサポートされていますし、 Env file (ファイル名 .env )に持たせて扱う方法が一般的になってきました。
環境変数にしろ、設定ファイルにしろ、大抵はそこにパスワードなどを平文で持たせるため、ソースコードとは別に管理する必要があります。

Pythonコードから環境変数を扱う場合、 https://pypi.org/project/python-decouple/ を利用すると便利です。

投稿2020/03/31 00:59

編集2020/03/31 01:01
shimizukawa

総合スコア1847

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marururu

2020/03/31 05:04

ご回答ありがとうございます。 一般的な手法を理解する一歩として、さらに勉強しようと思います。
guest

0

パスワードはkeyringでOSが提供する仕組みの中に保管するのはいかがでしょうか?

投稿2020/03/31 02:45

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marururu

2020/03/31 05:08

OS側の仕組みとしてパスワード情報を保存しておいて、それを呼び出す形にするということでしょうか? 環境変数に保存するのと似てるような手法だと個人的にとらえました。この仕組みも勉強してみようと思います。 他の回答で指摘されていた通り、結局セキュリティの問題というよりはむしろ情報の所在や管理運用方法の課題を解決したいというところが質問者の意図だと感じたので、実現方法は諸々勘案して決めようと思います。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問