Сайты
Хранение секретов приложения для сайта
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.

Как защищены значения
Каждое значение зашифровывается перед сохранением в базе данных. Ничего не хранится в виде читаемого текста, и представление списка никогда не показывает полное значение: вместо этого отображается маска только с последними четырьмя символами, чтобы вы могли различить два похожих ключа, не раскрывая ни один из них.
Каждая строка имеет метку Encrypted (Зашифровано) в качестве напоминания об этом. Чтение значения обратно - это отдельное, намеренное действие, а не то, что происходит просто при открытии страницы.
Установка, раскрытие и удаление секрета требуют разрешения sites:write. Член команды с правом только на чтение может видеть, какие ключи существуют и их маски, но не их значения.
Две среды
Сегментированный элемент управления в верхней части страницы переключается между production (production) и preview (preview). Это полностью отдельные наборы ключей. Установка STRIPE_SECRET_KEY в production не создает его в preview, и удаление из preview не трогает production.
Эта разделение - суть этой функции. Сборки preview - это одноразовые среды, которые может запустить любой, у кого есть доступ к репозиторию, поэтому они должны содержать тестовые учетные данные, а не реальные. См. Preview Deploys For Pull Requests для информации о том, как создаются среды preview.
Добавление или обновление секрета
- Выберите среду с помощью сегментированного управления.
- Введите имя в поле KEY_NAME. Поле автоматически преобразует в прописные буквы по мере ввода.
- Поместите значение во второе поле. Оно маскируется по мере ввода.
- Нажмите 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 снова.
Куда дальше
- Preview Deploys For Pull Requests, вторая половина разделения production и preview.
- Git Deploy For a Site для отправки кода, который читает эти значения.
- Site Activity Log чтобы увидеть, кто устанавливал, раскрывал или удалял секрет.