[解決済み] GAEでapp.yamlを使用して環境変数を安全に保存する
質問
APIキーやその他の機密情報を
app.yaml
を環境変数として保存する必要があります。この問題点は、もし私が
app.yaml
を GitHub にプッシュすると、この情報が公開されてしまうことです (良くないことです)。プロジェクトにそぐわないので、データストアに情報を保存したくありません。それよりも、私はその値を
.gitignore
にリストされているファイルから、アプリの各デプロイメントで値を交換したいと思います。
以下は、私のapp.yamlファイルです。
application: myapp
version: 3
runtime: python27
api_version: 1
threadsafe: true
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
handlers:
- url: /static
static_dir: static
- url: /.*
script: main.application
login: required
secure: always
# auth_fail_action: unauthorized
env_variables:
CLIENT_ID: ${CLIENT_ID}
CLIENT_SECRET: ${CLIENT_SECRET}
ORG: ${ORG}
ACCESS_TOKEN: ${ACCESS_TOKEN}
SESSION_SECRET: ${SESSION_SECRET}
何かアイデアはありますか?
どのように解決するのですか?
機密データである場合、ソースコントロールにチェックされるため、ソースコードに保存するべきではありません。間違った人 (組織内または組織外) がそれを見つける可能性があります。また、開発環境では、おそらく本番環境とは異なる設定値を使用していると思われます。これらの値がコードに保存されている場合、開発環境と本番環境で異なるコードを実行する必要があり、これは厄介で悪い習慣です。
私のプロジェクトでは、このクラスを使ってデータストアにコンフィグデータを入れています。
from google.appengine.ext import ndb
class Settings(ndb.Model):
name = ndb.StringProperty()
value = ndb.StringProperty()
@staticmethod
def get(name):
NOT_SET_VALUE = "NOT SET"
retval = Settings.query(Settings.name == name).get()
if not retval:
retval = Settings()
retval.name = name
retval.value = NOT_SET_VALUE
retval.put()
if retval.value == NOT_SET_VALUE:
raise Exception(('Setting %s not found in the database. A placeholder ' +
'record has been created. Go to the Developers Console for your app ' +
'in App Engine, look up the Settings record with name=%s and enter ' +
'its value in that record\'s value field.') % (name, name))
return retval.value
あなたのアプリケーションは、値を取得するためにこれを行います。
API_KEY = Settings.get('API_KEY')
データストアにそのキーの値があれば、それを取得することができます。ない場合は、プレースホルダレコードが作成され、例外がスローされます。この例外は、Developers Consoleに移動してプレースホルダのレコードを更新するよう注意を促します。
私は、これで設定値の推測が不要になることを発見しました。設定する値がわからない場合、コードを実行すれば教えてくれます!
上記のコードでは、memcacheとデータストアを使用するndbライブラリを使用しているので、高速です。
更新しました。
ジェルダー は、App Engine コンソールでデータストアの値を見つけ、それを設定する方法を尋ねました。以下はその方法です。
-
次のサイトに移動します。 https://console.cloud.google.com/datastore/
-
ページ上部のプロジェクトが選択されていない場合は、選択します。
-
で 種類 ドロップダウン・ボックスで 設定 .
-
上記のコードを実行すると、あなたのキーが表示されます。それらはすべて値 NOT SET . それぞれをクリックして、値を設定します。
これが役に立つといいのですが!
関連
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] コマンドラインからすべての環境変数をリストアップ
-
[解決済み] Dockerコンテナに環境変数を渡すにはどうしたらいいですか?
-
[解決済み] キーと値のペアのファイルから環境変数を設定する
-
[解決済み] Mac OS X Lionで環境変数を設定する
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] バブルソートの宿題
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pythonの検索パスを他のソースに展開する