1. ホーム
  2. python

[解決済み] GAEでapp.yamlを使用して環境変数を安全に保存する

2022-09-27 08:27:04

質問

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 コンソールでデータストアの値を見つけ、それを設定する方法を尋ねました。以下はその方法です。

  1. 次のサイトに移動します。 https://console.cloud.google.com/datastore/

  2. ページ上部のプロジェクトが選択されていない場合は、選択します。

  3. 種類 ドロップダウン・ボックスで 設定 .

  4. 上記のコードを実行すると、あなたのキーが表示されます。それらはすべて値 NOT SET . それぞれをクリックして、値を設定します。

これが役に立つといいのですが!