Сайты

Хранение секретов приложения для сайта

The Secrets tab is an encrypted store for the sensitive configuration values a Node.js app needs, such as API keys, signing secrets and third-party tokens, kept per environment so your production…

Вкладка "Secrets" (Секреты) - это зашифрованное хранилище конфиденциальных значений конфигурации, необходимых приложению Node.js, таких как ключи API, секреты подписи и токены третьих сторон. Каждая среда хранит свои значения отдельно, чтобы учетные данные production и preview никогда не смешивались.

Где хранятся секреты

Откройте Websites (Веб-сайты), нажмите на сайт, откройте меню Advanced (Дополнительно) в полосе вкладок сайта и выберите Secrets (Секреты). Вкладка озаглавлена Secrets.

Вкладка отображается только на сайтах Node.js. На сайтах WordPress, PHP и статических сайтах она не появляется, потому что их конфигурация хранится в файлах на диске: wp-config.php для WordPress и то, что читает ваш фреймворк для обычного приложения PHP.

Вкладка Secrets для сайта Node.js в KPanel

Как защищены значения

Каждое значение зашифровывается перед сохранением в базе данных. Ничего не хранится в виде читаемого текста, и представление списка никогда не показывает полное значение: вместо этого отображается маска только с последними четырьмя символами, чтобы вы могли различить два похожих ключа, не раскрывая ни один из них.

Каждая строка имеет метку Encrypted (Зашифровано) в качестве напоминания об этом. Чтение значения обратно - это отдельное, намеренное действие, а не то, что происходит просто при открытии страницы.

Установка, раскрытие и удаление секрета требуют разрешения sites:write. Член команды с правом только на чтение может видеть, какие ключи существуют и их маски, но не их значения.

Две среды

Сегментированный элемент управления в верхней части страницы переключается между production (production) и preview (preview). Это полностью отдельные наборы ключей. Установка STRIPE_SECRET_KEY в production не создает его в preview, и удаление из preview не трогает production.

Эта разделение - суть этой функции. Сборки preview - это одноразовые среды, которые может запустить любой, у кого есть доступ к репозиторию, поэтому они должны содержать тестовые учетные данные, а не реальные. См. Preview Deploys For Pull Requests для информации о том, как создаются среды preview.

Добавление или обновление секрета

  1. Выберите среду с помощью сегментированного управления.
  2. Введите имя в поле KEY_NAME. Поле автоматически преобразует в прописные буквы по мере ввода.
  3. Поместите значение во второе поле. Оно маскируется по мере ввода.
  4. Нажмите Set (Установить).

Установка ключа, который уже существует, перезаписывает его. Отдельного действия редактирования нет и нет шага подтверждения при перезаписи, поэтому проверьте вкладку среды перед нажатием Set.

Правила именования ключей

Ключ должен начинаться с прописной буквы и может содержать прописные буквы, цифры и подчеркивания, до 128 символов. DATABASE_URL, API_KEY_V2 и SENTRY_DSN все допустимы. Все остальное отклоняется с сообщением Key must be UPPER_SNAKE_CASE letters/numbers/underscore.

Есть еще два ограничения, которые стоит знать:

  • Значение не может быть пустым. Отправка пустого значения возвращает value required.
  • Значение не может превышать 16 КБ. Это щедро для токена, но недостаточно, например, для полной цепочки сертификатов, которая должна храниться в файле, а не в секрете.

Чтение значения обратно

Нажмите Copy (Копировать) в строке. KPanel расшифровывает значение на стороне сервера и помещает его прямо в ваш буфер обмена с подтверждением Value copied to clipboard (Значение скопировано в буфер обмена). Значение не печатается на экран, поэтому при демонстрации экрана или за спиной не может быть подобрано.

Каждое раскрытие записывается в журнал аудита сайта с указанием того, кто это сделал и какой ключ, и отображается в Site Activity Log.

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

Использование секрета в вашем приложении

Скопируйте значение в то место, где ваше приложение читает свою конфигурацию на сервере. Для приложения Node.js это обычно переменная окружения, установленная вашим менеджером процессов, или файл .env в корне приложения, который ваш код загружает при запуске.

Не коммитьте этот файл в ваш репозиторий. Добавьте .env в .gitignore перед его созданием. Секрет, который был отправлен в удаленный git репозиторий, должен рассматриваться как скомпрометированный и должен быть ротирован у провайдера, потому что он остается в истории даже после удаления файла.

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

Удаление секрета

Нажмите Delete (Удалить) в строке. KPanel просит вас подтвердить с помощью Delete {KEY}? (Удалить {KEY}?) и предупреждает, что приложение потеряет доступ к этому значению при следующем перезапуске. Отмены нет и копии не сохраняется, поэтому если вам может понадобиться значение снова, скопируйте его сначала.

Удалите секрет, когда базовые учетные данные были отозваны у провайдера, или когда код, который его использовал, был удален. Оставление устаревших ключей затрудняет позже определить, какие из них фактически имеют значение.

Безопасная ротация учетных данных

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

Если делать наоборот, сначала отозвав, вы получите окно времени, когда работающее приложение держит мертвые учетные данные и каждый запрос, который их требует, не выполняется. Если изменение рискованно, сначала создайте резервную копию, чтобы вы могли вернуться в известное рабочее состояние: см. Taking a Backup.

Устранение неполадок

Вкладка Secrets отсутствует в меню. Сайт не является сайтом Node.js. Проверьте метку stack рядом с именем сайта в верхней части страницы.

Кнопка Set ничего не делает. Оба поля требуются. Кнопка отображает Key + value required (Требуется ключ и значение), если одно из полей пусто.

Ключ был отклонен. Строчные буквы, дефисы, точки и пробелы не допускаются. api-key и Api_Key оба не выполняются; API_KEY проходит.

Copy не поместил ничего в буфер обмена. Некоторые браузеры блокируют запись в буфер обмена на неактивной вкладке. Сначала нажмите на страницу, затем нажмите Copy снова.

Куда дальше

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel
Хранение секретов приложения для сайта