Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Хранение секретных настроек

Хранение секретных настроек

Никита Соболев (wemake.services) @ Moscow Python Meetup 48
"Говорят, что секреты могут хранить двое, если один из них мёртв. А в веб-разработке обычно участвуют много людей, и для решения задач придумана масса инструментов. Я расскажу, как выбрать правильные инструменты под разные типы проектов".
Видео: http://www.moscowpython.ru/meetup/48/keeping-secrets/

Moscow Python Meetup
PRO

August 21, 2017
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Никита Соболев

    View Slide

  2. View Slide

  3. О чем я расскажу
    Про секретные настройки

    Про настройки в целом

    Про рост вашего приложения

    Два слова про деплой

    View Slide

  4. Приложение

    View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. » django-admin startproject my_project

    View Slide

  9. » tree my_project
    my_project
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

    View Slide

  10. # Quick-start development settings - unsuitable for production
    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY = 'g=atdfmqdd+...ce%@rn7b7^asd8'
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = True

    View Slide

  11. Минусы
    • Все в одном файле
    • Несекретные секретные настройки
    • Одно окружение на все случаи жизни

    View Slide

  12. » tree phoenix/config
    config
    ├── config.exs
    ├── dev.exs
    ├── prod.exs
    ├── prod.secret.exs
    └── test.exs

    View Slide

  13. организаци
    и настроек
    setting_local.py


    django
    • -configurations ⁉️
    django
    • -split-settings

    View Slide

  14. View Slide

  15. » tree my_project/settings
    my_project/settings
    ├── __init__.py
    ├── components
    │ ├── __init__.py
    │ ├── common.py
    │ ├── database.py
    │ └── emails.py
    └── environments
    ├── __init__.py
    ├── development.py
    ├── local.py
    ├── local.py.template
    ├── production.py
    └── testing.py

    View Slide

  16. from os import environ
    from split_settings.tools import optional, include
    ENV = environ.get('DJANGO_ENV') or 'development'
    base_settings = [
    'components/common.py',
    'components/database.py',
    'components/emails.py',
    # Select the right env:
    'environments/%s.py' % ENV,
    optional('environments/local.py'),
    ]
    # Include settings:
    include(*base_settings)
    http://bit.ly/django-split

    View Slide

  17. А секреты?

    View Slide

  18. ные
    окружени
    я
    • Самый простой способ
    • Когда их становится много, есть envdir

    View Slide

  19. Минусы
    Предполагает большое количество ручного труда

    Невозможно хранить структурированные файлы

    View Slide

  20. появляютс
    я
    сертифик
    аты и куча

    View Slide

  21. View Slide

  22. » git secret init
    '.gitsecret/' created.
    » git secret tell [email protected]
    done. [email protected] added.
    cleaning up...
    » git secret add -i production.py
    these files are not ignored: production.py ;
    auto adding them to .gitignore
    1 items added.
    » git secret hide
    done. all 1 files are hidden.

    View Slide

  23. Минусы
    • Сложно интегрировать в ephemeral infrastructure
    • Нужны ключи, много ключей
    • Нет уровней доступа
    • Можно отозвать доступ, но только к механизму
    шифрования

    View Slide

  24. У вас появляется
    много частей системы

    View Slide

  25. View Slide

  26. cat group_vars/webservers/vault.yml
    $ANSIBLE_VAULT;1.1;AES256
    353634524342354353435336230393263653832653
    535303665333861444423306466393736653132666262
    3463316430376534534133425343653337323
    63063303864360a383033623535343737306136363766
    ...

    View Slide

  27. Минусы
    Занимается только статическими секретами

    Нет уровней доступа

    View Slide

  28. У вас появляется
    оркестратор

    View Slide

  29. View Slide

  30. View Slide

  31. е части
    Consul
    • Consul Service Discovery
    • Consul Key-Value Store
    • Consul DNS
    • Consul Template

    View Slide

  32. Но в Consul нельзя
    хранить секреты

    View Slide

  33. View Slide

  34. http://bit.ly/vault-tut

    View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. Минусы
    Сложно

    View Slide

  39. Выводы
    • Маленький проект --> envdir
    • Средний проект --> git-secret или ansible-
    vault
    • Большой проект --> Vault

    View Slide

  40. Полезные ссылки
    • https://www.amon.cx/blog/managing-all-secrets-with-
    vault/
    • https://github.com/tolitius/cault
    • https://www.linkedin.com/pulse/how-do-pirates-share-
    treasure-map-dont-trust-each-other-buchanan
    • https://github.com/awslabs/git-secrets
    • http://git-secret.io/
    • https://www.katacoda.com/courses/docker-
    production/vault-secrets

    View Slide

  41. Вопросы
    [email protected]
    https://github.com/sobolevn

    View Slide