Перейти к основному содержанию Перейти к навигации Перейти к нижнему колонтитулу

Хранилище конфигурации

Синхронизация конфигурации с шифрованием без раскрытия данных: разблокировка passkey, мастер-паролем или кодом восстановления

Хранилище конфигурации

Хранилище конфигурации обеспечивает синхронизацию конфигурации CLI между устройствами с шифрованием без раскрытия данных. Ваши конфигурации шифруются на стороне клиента ключом шифрования содержимого (CEK), сервер никогда не видит данные в открытом виде.

Способы разблокировки (слоты ключей)

На одно хранилище приходится один CEK, обёрнутый отдельно для каждого способа разблокировки (по аналогии со слотами ключей LUKS). Любой отдельный слот открывает один и тот же ключ, а слоты можно добавлять и удалять без повторного шифрования данных:

СпособЧто этоПримечания
PasskeyWebAuthn 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. Способы с мастер-паролем и кодом восстановления работают в любом поддерживаемом браузере.

Настройка

  1. Перейдите в Хранилище конфигурации в боковой панели, затем нажмите Настроить хранилище конфигурации
  2. Контрольный список требований проверяет ваш браузер, 2FA и статус сессии
  3. Нажмите Начать настройку. Для слота passkey понадобится коснуться ключа безопасности дважды:
    • Первое касание: регистрирует passkey
    • Второе касание: извлекает ключи шифрования через PRF
  4. Настройка завершена, секрет passkey хранится в связке ключей вашей ОС

После настройки добавьте слот с мастер-паролем или кодом восстановления на странице «Хранилище конфигурации», так утерянный или неподдерживаемый аутентификатор не заблокирует вам доступ.

Совместимость провайдеров PRF

ПровайдерПоддержка PRFПлатформы
YubiKey / ключи безопасности FIDO2Windows 11, macOS, Linux
iCloud KeychainmacOS 15+, iOS 18+
Google Password ManagerAndroid
1PasswordAndroid, 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’у