Менеджер паролей для управления окружением и секретами с помощью bitwarden


Используйте менеджер паролей для организации локальных файлов env и dot env.

Файлы dotenv для локальной разработки стали очень популярны, и для их управления существует тонна инструментов. Даже если вы используете их для локальной разработки, если секреты и ключи попадают в эти файлы dotenv для удобства, они становятся вектором атаки, готовым к взлому.

Более того, при большом количестве кода и проектов, разбросанных по вашему рабочему столу в различных контекстах, становится трудно поддерживать безопасность и управление dotenvs в течение долгого времени.

Примечание: Даже при локальной разработке хранить секреты в файлах dotenv небезопасно, поскольку этот файл существует на вашем рабочем столе не только в терминальной сессии. Установка секретов в качестве переменных окружения не является наилучшей рекомендуемой схемой безопасности, поскольку возможны несчастные случаи (случайная печать окружения в журнале отладки), открытость для легких атак (окружение доступно через процесс — атаки на XML-сущности и инъекционные атаки), а сбои приложения приводят к тому, что окружение записывается в лог-файлы на диске. Для вашей топологии рекомендуется использовать конфигурацию без паролей, с нулевым доверием, основанную на идентификации. Об этом и эффективных способах управления секретами/паролями я напишу в следующем посте.

Используйте менеджер паролей

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

Существует множество менеджеров паролей, мы оставим это исследование в стороне, но если вы сомневаетесь, стоит ли платить за менеджер паролей (он того стоит), начните с персонального bitwarden, он бесплатен для индивидуального использования и, как бонус, имеет открытый исходный код.

Ниже описано, как я управляю и получаю доступ к своему окружению/секретам для локальной разработки с помощью Bitwarden.

Установка

Установка Bitwarden довольно проста, а документация понятна. В этом руководстве больше внимания уделено CLI и тому, как его эффективно использовать для оптимизации работы разработчика.

После того, как вы установили CLI локально, есть два способа получить доступ к CLI (используя комбинацию apikey/secret или учетные данные с кодом 2FA). Мы рекомендуем последний вариант, поскольку он не является статичным или хранимым.
Если вы установили настольную версию Bitwarden, то при аутентификации в приложении вы войдете в Bitwarden на рабочей станции (если вы настроите приложение при запуске) (вам придется связать помощника браузера, например: расширение chrome bw, с логином вашего приложения отдельно для аналогичной сессии).
Вместо использования 2FA вы можете включить биометрию на своей рабочей станции или отменить ее с помощью системного пароля.

  • Таким образом, при запуске терминала вы входите в Bitwarden (вам не нужно будет вводить 2FA). Вам потребуется bw unlock для установки сессии на этом окне терминала для доступа к секретам. Разблокировка также может быть выполнена с помощью apikey или мастер-пароля (не требуется 2FA, так как это аутентифицированная сессия).
  • Вам нужно будет установить переменную session (как переменную env), чтобы сохранить сессию на данном экземпляре терминала. Это избавит вас от необходимости bw unlock для каждой команды bw, которую вы выполняете.
  • Сессия действительна только для одного окна/вкладки терминала. Поэтому при открытии нового окна/вкладки необходимо выполнить два вышеуказанных шага.

Как только эти шаги будут выполнены, вы сможете выполнить любую команду bw в рамках этой сессии для доступа к вашему хранилищу.

Упрощение

Чтобы упростить вышеописанные шаги, мы будем использовать начальную конфигурацию вашей оболочки терминала для разгрузки этих шагов, например: ~/.zshrc или ~/.bash_profile или любой другой, который вы предпочитаете. Настройка будет выполняться и запрашивать пароль на терминале, когда это потребуется (для установки сессии или разблокировки).

Создайте следующие псевдонимы и функции в конфигурации оболочки (~/.zshrc)

  • разблокировать

    • При выполнении команды bw unlock результат будет следующим
     Your vault is now unlocked!
    
     To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
     $ export BW_SESSION="..REDACTED"
     $env:BW_SESSION="..REDACTED"
    

    Создайте следующую функцию в конфигурации запуска, которая экспортирует эту переменную окружения и установит сессию.

     bwss() {
         eval $(bw unlock | grep export | awk -F"$" {'print $2'})
     }
    
  • Другие псевдонимы команд.

  • Другие вспомогательные функции

    • Функция для установки переменных окружения на текущий сеанс из безопасной записи секретных пар ключ/значение
   bwe(){
    eval $(bw get item $1 | jq -r '.notes')
   }
Вход в полноэкранный режим Выход из полноэкранного режима
  • Функция для создания нового элемента хранилища из существующих файлов dotenv на вашем локальном компьютере: bwc "name_of_vault_key"
   bwc(){
     DEFAULT_FF=".env"
     FF=${2:-$DEFAULT_FF}
     #cat ${FF} | awk '{printf "%s\n", $0}' |  sed 's/"/\"/g' >/tmp/.env
     cat ${FF} | awk '{print "export " $0}' >/tmp/.xenv
     bw get template item | jq --arg a "$(cat /tmp/.xenv)" --arg b "$1" '.type = 2 | .secureNote.type = 0 | .notes = $a | .name = $b' |      bw encode | bw create item
     rm /tmp/.xenv
   }
Вход в полноэкранный режим Выход из полноэкранного режима
  • Функция для создания нового элемента хранилища из всего окружения терминальной сессии: bwce "name_of_vault_key".

    bwce(){
      export | awk '{print "export " $0}' >/tmp/.env
      bw get template item | jq --arg a "$(cat /tmp/.env)" --arg b "$1" '.type = 2 | .secureNote.type = 0 | .notes = $a | .name = $b' | bw  encode | bw create item
      rm /tmp/.env
    }
    

Использование функций и псевдонимов.

Будет использован пример управления azure apikeys/secrets/ для локальной разработки. Не обязательно ограничиваться только секретом, вы можете хранить все переменные окружения для контекста в одном ключе для эффективной загрузки.

Итак, если у вас есть файл dotenv, как показано в примере ниже

APIKEY=something
SECRET=something
configuration=host.com
environment=dev
region=eu-north
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Чтобы импортировать его в хранилище. В месте расположения файла dotenv выполните команду

       export APIKEY=something
       export SECRET=something
       export configuration=host.com
       export environment=dev
       export region=eu-north
    
  • Чтобы использовать его (в следующем сеансе)

  • Чтобы перечислить и установить

      "az-example-dev"
      "az-example-stage"
      "az-foo-dev"
      "az-wee-dev"
      "az-test-dev"
    

    И затем вы можете выполнить bwe, чтобы установить любую настройку, которая вам нужна.

  • Удаление устаревших элементов : bwdd "item-name".

      bwdd(){
          bw delete item $(bw get item $1 | jq .id | tr -d '"')
      }
    

Как вы организуете свои ключи/секреты, зависит только от вас, но использование менеджера паролей гарантирует, что

  • Все секреты находятся в хранилище в безопасности, и не происходит разрастания файлов.
  • Вы сможете безопасно работать на других устройствах, не беспокоясь о копировании файлов окружения (поскольку после закрытия терминала сессия/среда теряется).
  • Простое управление и настройка окружений в соответствующих контекстах, без необходимости управлять именованными dotenvs или иерархиями папок.

Для настройки конфигурации оболочки с использованием dotenv, которая включает все эти и другие функции, вы можете обратиться к stevengonsalvez/dotfiles

Примечание: Все это возможно и в других менеджерах паролей (Lastpass, 1password, Dashlane и т.д.).

Оцените статью
devanswers.ru
Добавить комментарий