Секреты в приложении Django в Google AppEngine (GAE) - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь разработать приложение Django для GAE и использую CloudBuild для CI / CD. Мне интересно, как лучше всего передать секреты в мое приложение (учетные данные БД и т. Д. c).

Мне удалось выполнить инструкции на https://cloud.google.com/cloud-build/docs/securing-builds/use-encrypted-secrets-credentials, чтобы прочитать секрет из моего этапа сборки, и передать его в мое приложение в качестве переменной среды. Это немного глупо, но работает:

  - name: gcr.io/cloud-builders/gcloud
    entrypoint: 'bash'
    args:
    - '-c'
    - |
      TEST_PW=$(gcloud secrets versions access latest --secret=test-key)
      echo "TEST_PASSWORD=$${TEST_PW}" >> env_vars
      unset TEST_PW

Однако я не уверен, безопасна ли эта практика. Я сбросил переменные env при запуске в моем приложении (используя print(dict(os.environ)), и единственными чувствительными значениями являются секреты, которые я передал (все другие связанные с приложением GAE значения являются нечувствительными данными).

Итак, вопросы:

1) Безопасно ли хранить секреты в переменных env в приложении в AppEngine, т. Е. Можно ли их украсть, "как-то" сбросив их через print(dict(os.environ))?

2) Или это лучший вариант получить их из Secret Manager в Django (например, в settings.py)? (Меня беспокоит перезапуск или переключение версий здесь, и если они повлияют на эту опцию)

3) Или есть еще лучший вариант?

Спасибо.

1 Ответ

1 голос
/ 23 апреля 2020

Проблема безопасности в том, что вы делаете, заключается не в самой переменной среды, а в том, что вы храните в ней простое расшифрованное значение секрета, делая его доступным для команды os.environ во время работы вашего экземпляра.

Более простым решением было бы сбросить эту конфиденциальную информацию в файл и сохранить ее в облачном хранилище, к которому имеет доступ только учетная запись службы вашего приложения, например:

TEST_PW=$(gcloud secrets versions access latest --secret=test-key)
echo "TEST_PASSWORD=$${TEST_PW}" >> [YOUR_FILE_URL]
unset TEST_PW

Если вы хотите Чтобы продолжать использовать переменные среды, вы можете сделать это с помощью Cloud KMS, чтобы сохранить данные в зашифрованном виде. Вы можете найти здесь здесь , который является другим разделом той же документации, которую вы поделились по вашему вопросу.

...