Что вы сделаете
- Смените ключ без простоя — сначала выпустите замену и отзовите старый только после того, как новый ключ подтверждён в работе.
- Немедленно отзовёте скомпрометированный ключ — распространение на все регионы занимает не более 60 секунд.
- Будете хранить ключи в переменных окружения или secret manager, а не в коде, и ротировать при уходе члена команды с доступом.
API-ключи — это долгоживущие bearer tokens, поэтому их плановая ротация и немедленный отзыв в случае утечки — это важные меры безопасности. В этой статье рассматриваются оба случая.
Смена ключа без простоя
Ротация означает выпуск нового ключа перед тем, как вы отзовете старый, чтобы не было перерыва, когда ваша интеграция не аутентифицирована.
- Перейдите в Settings → API keys и нажмите Generate key.
- Дайте новому ключу имя, которое четко отражает его назначение (например,
production-v2). - Выберите ту же роль, что и у ключа, который вы заменяете.
- Скопируйте токен — он показывается только один раз.
- Обновите свою переменную окружения или secret manager новым токеном и выполните деплой.
- Как только новый ключ заработает и это будет подтверждено (проверьте колонку Last used — она должна обновиться в течение нескольких минут), вернитесь в Settings → API keys и нажмите Revoke у старого ключа.
Держите старый ключ активным, пока не убедитесь, что новый работает. Если вы отзовете его слишком рано до завершения деплоя, трафик будет получать ошибки 401.
Немедленный отзыв скомпрометированного ключа
Если ключ был скомпрометирован — попал в публичный репозиторий, засветился в логах или в клиентском бандле — сначала отзовите его, а расследование проводите потом.
- Settings → API keys, найдите ключ по его имени или префиксу (префикс виден в таблице, даже если полный токен — нет).
- Нажмите Revoke. Отзыв распространится на все регионы в течение 60 секунд.
- Выпустите замену ключа и обновите свои секреты.
- Проверьте временную метку Last used на отозванном ключе, чтобы оценить, как долго он был открыт и нужно ли проводить аудит на предмет подозрительной активности.
Отозванные ключи сохраняются в таблице с меткой revoked для истории. Их нельзя активировать повторно.
Безопасное обновление секретов
Стандартный паттерн — хранить ключи в переменных окружения, а не в коде:
# .env.local (never committed)
ELIDO_API_KEY=elido_live_xxx...
import { ElidoClient } from "@elido/sdk";
const client = new ElidoClient({ apiKey: process.env.ELIDO_API_KEY! });
Для CI-конвейеров используйте хранилище секретов вашей платформы (GitHub Actions secrets, GitLab CI variables и т. д.) и проводите ротацию каждый раз, когда член команды с доступом покидает проект.
Что происходит с активными интеграциями
Когда вы отзываете ключ, любые текущие запросы, которые уже отправили токен, будут завершены — мы проводим валидацию в начале запроса, а не в середине ответа. Запросы, которые начнутся после отзыва, вернут 401 Unauthorized. SDK не выполняют повторных попыток при 401 (это привело бы к циклу), поэтому ваша интеграция сразу начнет выдавать ошибки.
Запланируйте небольшое окно перекрытия: держите старый ключ активным, пока не подтвердите, что новый активен в продакшене.
Устранение неполадок
401 на ключе, который вы только что создали. Токен, отображаемый при создании — это полный ключ, включая секретный суффикс. Если вы скопировали из таблицы только префикс (например, elido_abc123), это не сработает — префикс предназначен только для отображения. Выпустите новый ключ и скопируйте полный токен.
Кнопка Revoke отсутствует. Вероятно, ключ уже отозван. Отозванные ключи имеют значок revoked и не имеют кнопок действий. Убедитесь, что вы смотрите правильный воркспейс — ключи привязаны к рабочим пространствам.
60-секундное окно распространения. Если вы отзывали ключ, а запросы все еще проходят в течение какого-то времени, это ожидаемо. Наши edge nodes синхронизируют отзыв через Redis pub/sub; максимальная задержка составляет ~60 секунд.
Ключ исчез из списка. Мы храним отозванные ключи в таблице неограниченное время для целей аудита. Если вы не можете его найти, проверьте, не применены ли фильтры к списку — по умолчанию фильтра "только активные" нет, но текстовый поиск по полю имени скроет несовпадающие строки.