Хранилище конфигурации
Хранилище конфигурации обеспечивает синхронизацию конфигурации CLI между устройствами с шифрованием без раскрытия данных. Ваши конфигурации шифруются на стороне клиента ключом шифрования содержимого (CEK), сервер никогда не видит данные в открытом виде.
Способы разблокировки (слоты ключей)
На одно хранилище приходится один CEK, обёрнутый отдельно для каждого способа разблокировки (по аналогии со слотами ключей LUKS). Любой отдельный слот открывает один и тот же ключ, а слоты можно добавлять и удалять без повторного шифрования данных:
| Способ | Что это | Примечания |
|---|---|---|
| Passkey | WebAuthn passkey с расширением PRF | Самый надёжный вариант, привязан к устройству |
| Мастер-пароль | Пароль, который вы задаёте сами, растянутый через PBKDF2-SHA256 (600 000 итераций) | Работает без аппаратуры с поддержкой PRF, а также позволяет подключать CLI без браузера |
| Код восстановления | Сгенерированный код вида RC1-XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX | Показывается один раз при создании, сохраните его в надёжном месте |
Все способы работают по одной и той же схеме: слот выдаёт секрет, который вместе с серверным секретом разворачивает CEK. Ни одной из половин по отдельности недостаточно, поэтому свойство “без раскрытия данных” сохраняется для всех трёх способов: секрет слота никогда не попадает на сервер.
Слоты управляются в портале, на странице «Хранилище конфигурации». Организациям, которым нужна разблокировка только по аппаратному ключу, доступна политика требовать passkey: она отклоняет и отзывает все слоты, кроме passkey, для всего хранилища.
Разблокировка выполняется на уровне устройства: вы разблокируете хранилище один раз на новом устройстве, и после этого ежедневные операции CLI (push/pull) работают без обращения к passkey или вводу пароля.
Предварительные требования
- Двухфакторная аутентификация включена в вашей учётной записи
- Для способа passkey: провайдер passkey с поддержкой PRF, например, ключ безопасности FIDO2 (YubiKey), iCloud Keychain, Google Password Manager, 1Password или Dashlane
- Браузер: Chrome 133+, Edge 133+, Firefox 130+ или Safari 17+
Требование PRF относится только к слоту passkey. Способы с мастер-паролем и кодом восстановления работают в любом поддерживаемом браузере.
Настройка
- Перейдите в Хранилище конфигурации в боковой панели, затем нажмите Настроить хранилище конфигурации
- Контрольный список требований проверяет ваш браузер, 2FA и статус сессии
- Нажмите Начать настройку. Для слота passkey понадобится коснуться ключа безопасности дважды:
- Первое касание: регистрирует passkey
- Второе касание: извлекает ключи шифрования через PRF
- Настройка завершена, секрет passkey хранится в связке ключей вашей ОС
После настройки добавьте слот с мастер-паролем или кодом восстановления на странице «Хранилище конфигурации», так утерянный или неподдерживаемый аутентификатор не заблокирует вам доступ.
Совместимость провайдеров PRF
| Провайдер | Поддержка PRF | Платформы |
|---|---|---|
| YubiKey / ключи безопасности FIDO2 | ✅ | Windows 11, macOS, Linux |
| iCloud Keychain | ✅ | macOS 15+, iOS 18+ |
| Google Password Manager | ✅ | Android |
| 1Password | ✅ | Android, iOS |
| Dashlane | ✅ | Кроссплатформенный |
| Расширение Bitwarden | ❌ | В разработке |
| Windows Hello | ❌ | Не поддерживается |
Подключение CLI без браузера
Машина без браузера (сервер, CI-раннер, демон executor) может подключиться к существующему хранилищу через способ с мастер-паролем:
rdc config remote enable --password
Требования:
- Слот с мастер-паролем уже создан через портал (ключ во время создания слота держит браузер, поэтому сам этот шаг без браузера выполнить нельзя)
- API-токен со скоупом
config:enrollдля аутентификации запроса
Подключение представляет собой операцию чтения: CLI получает открытые параметры KDF слота и обёрнутый ключ, локально вычисляет секрет пароля и разворачивает CEK прямо на устройстве. Это даёт устройству возможность расшифровывать и синхронизировать конфигурацию, но не изменяет само хранилище.
Включение и офлайн-чтение
rdc config remote enable подключает активную конфигурацию к хранилищу. Если хранилище пустое, включение инициализирует его данными вашей текущей локальной конфигурации: локальные ресурсы отправляются как первая версия хранилища, а затем считываются обратно, чтобы подтвердить, что цикл прошёл успешно. Если в хранилище уже есть содержимое, включение согласовывает конфигурацию с ним, а не перезаписывает его (при реальном расхождении операция прерывается, если не передан флаг --force).
После включения конфигурация хранит полный кеш для чтения, зашифрованный так же, как и любая локальная конфигурация, поэтому хранилищем можно пользоваться, даже если сервер аккаунта недоступен:
- Чтение работает офлайн. Кешированное содержимое выдаётся с предупреждением об устаревании в stderr, с указанием версии и времени кеширования (
cachedVersion/cachedAt). - Запись требует сервер и завершается отказом при его недоступности. Офлайн-очереди записи не существует: запись, которая не может достучаться до сервера, завершается ошибкой с указанием сервера. Если команда записи завершилась успешно, изменение уже на сервере.
- Одновременные изменения с двух машин разрешаются через pull-replay-repush на уровне бакета ресурсов, поэтому параллельное изменение в другом месте не затирает ваше.
Ротация ключа
Ротация CEK хранилища переоборачивает его под новым поколением:
- Коды восстановления всегда аннулируются при ротации, сгенерируйте и сохраните новый код после неё
- Слот с мастер-паролем сохраняется, только если пароль был повторно введён в мастере ротации
- Слот, оставшийся на старом поколении, помечается как устаревший, а не падает с непонятной ошибкой расшифровки
Управление участниками
Хранилище конфигурации привязано к организации. Участники управляются через веб-портал:
- Просмотр участников: Хранилище конфигурации → Участники
- Добавить участника: В настоящее время только через CLI (веб-интерфейс планируется)
- Удалить участника: Нажмите кнопку удаления на странице Участники (требуется 2FA + повторная аутентификация)
Защитные механизмы предотвращают удаление последнего активного участника или удаление самого себя.
Конфигурации в хранилище дополнительно привязаны к команде, но эта привязка является контролем доступа на стороне сервера, а не криптографической изоляцией: один общий для всей организации CEK шифрует конфигурации всех команд, а то, какие команды доступны конкретному участнику для чтения, определяет сервер.
Безопасность
- Без раскрытия данных: Сервер хранит тройно зашифрованные данные, которые не может расшифровать
- Разделённый ключ: Для расшифровки требуется как секрет вашего слота (клиент), так и серверный секрет (сервер)
- Ротация токенов: Каждый API-вызов использует свежий токен; старые токены самоуничтожаются
- Привязка к IP: Токены привязываются к вашему IP при первом использовании
- Мгновенный отзыв: Удалённые участники теряют доступ в течение 30 секунд
Устранение неполадок
| Ошибка | Причина | Решение |
|---|---|---|
| PRF not supported | Аутентификатор не поддерживает расширение PRF | Используйте YubiKey, iCloud Keychain, 1Password или Dashlane, либо добавьте слот с мастер-паролем |
| X25519 not supported | Слишком старая версия браузера | Обновите до Chrome 133+, Edge 133+, Firefox 130+ или Safari 17+ |
| Already configured | Хранилище уже существует для вашей организации | Посетите /account/config-storage для управления |
| Config storage not configured | На сервере отсутствует blob-хранилище | Свяжитесь с администратором для настройки R2/RustFS |
| Token expired | Нет активности в течение 24 часов | Выполните любую команду хранилища конфигурации для обновления |
| Cannot remove last member | Навсегда заблокирует хранилище | Сначала добавьте другого участника |
| Stale slot | Слот относится к состоянию до последней ротации ключа | Добавьте слот заново (коды восстановления нужно генерировать заново после каждой ротации) |
Смотрите также
- Веб-консоль: разблокировка хранилища в браузере для запуска команд
- Прокси и executor: как разблокированный ключ передаётся executor’у