Выделенный узел — чёткие границы безопасности

Ваши сертификаты — только на вашей машине

OSXBuild предоставляет целый выделенный физический сервер, а не виртуальную машину. Процессор, память и диск не используются совместно с другими клиентами. Вы сами решаете, где хранить сертификаты подписи, исходный код и результаты сборки, кому предоставлять доступ и как их экспортировать.

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

Сначала — о ресурсах

Одна машина — только ваши сборки

Вам выделяется физический узел, а не слот для задачи на общем сервере. В течение срока аренды весь Mac mini работает на ваши задачи.

Выделенные процессор и память

Другие клиенты не запускают на этой машине сборки, тесты или задачи машинного обучения. Ваши процессы сборки используют ресурсы машины и не конкурируют за процессор и память с другими клиентами.

Количество параллельных задач на узле по-прежнему зависит от настроек вашего runner и сценариев сборки.

Диск и кеши под вашим управлением

Исходный код, DerivedData, кеши зависимостей и экспортированные IPA хранятся на вашем узле. Их не перезапишут задачи другого клиента, а файлы подписи не придётся передавать в общую очередь сборки.

Кеш — не резервная копия. Храните важные результаты сборки и материалы для восстановления отдельно.

Физическая изоляция не заменяет управление доступом

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

Графический интерфейс macOS и командная строка доступны полностью; область доступа настраиваете вы.

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

Передача узла после аренды

Сначала стираем диск, затем передаём узел

Рабочие каталоги предыдущего клиента не передаются следующему. При возврате узла диск безопасно стирается, а система устанавливается заново.

  1. Сначала создайте резервную копию

    До окончания аренды экспортируйте исходный код, IPA, конфигурацию и материалы для восстановления подписи, которые хотите сохранить. Убедитесь, что файлы открываются в другой среде: одного факта запуска команды копирования недостаточно.

  2. Узел отправляется на подготовку

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

  3. Передача после переустановки системы

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

Не откладывайте передачу до последнего archive

Добавьте проверку резервных копий в список передачи проекта и отзовите доступ к репозиториям, регистрацию runner и токены распространения, которые больше не нужны узлу. Стирание диска не отзывает разрешения, которые всё ещё действуют во внешних системах.

Относитесь к подписи как к праву выпуска

Сертификат позволяет подписывать — это не значит, что его может забрать кто угодно

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

Отдельная связка ключей — блокируйте после работы

Создайте отдельную связку ключей для пользователя сборки. Разблокируйте её только перед этапом подписи и снова заблокируйте после завершения конвейера. Настройте очистку и при сбое задачи, чтобы связка не оставалась доступной после аварийного завершения.

Получайте пароль разблокировки из защищённого хранилища учётных данных и не выводите его в параметрах команды.

Используйте API-ключ для загрузки

При загрузке сборки в App Store Connect используйте API-ключ с правами, соответствующими задаче, а не храните пароль учётной записи в сценариях автоматизации. Храните файл ключа отдельно от кода проекта; при его ротации обновляйте и конфигурацию сборки.

Не записывайте содержимое ключей в журналы, результаты сборки или снимки экрана с ошибками.

.p12 — не для общего репозитория

Не добавляйте в репозиторий файл .p12 с закрытым ключом и не храните пароль для его экспорта в том же репозитории. При использовании Fastlane match храните материалы шифрования и учётные данные для расшифровки отдельно, а доступ к репозиторию подписи ограничьте.

Если файл случайно попал в репозиторий, оцените необходимость отзыва и ротации: простого удаления файла недостаточно, чтобы очистить историю.

Завершение работы: заблокируйте связку ключей сборки

В примере ниже указан путь к связке ключей. Замените его на фактическое имя и добавьте такое же действие очистки в завершающую часть конвейера.

security lock-keychain "$HOME/Library/Keychains/build.keychain-db"
Два способа доступа — разные задачи

Заказы — в панели, машина — по SSH

Учётные данные для входа в панель и ключи доступа к узлу служат разным целям. Не используйте их повторно и не передавайте ни один из них задачам, которым эти права не нужны.

Панель и электронная почта

Задайте для панели отдельный пароль и защитите почтовый ящик, на который приходят письма для входа и проверки. Входите только с доверенных устройств и не вводите учётные данные на страницах, на которые вас перенаправили другие люди.

Проверяйте сведения о передаче узла, статус заказа и историю операций в панели. Если заметите изменение, которого не ожидали, запишите номер заказа и время, затем отправьте обращение в поддержку. Не прикладывайте полные учётные данные.

Войти в панель

SSH и доступ команды

Входите по открытому SSH-ключу, а закрытый ключ храните на контролируемом локальном устройстве или в защищённом хранилище учётных данных CI. Используйте отдельный ключ для каждого участника и каждого конвейера, чтобы их можно было отзывать независимо. Не делитесь одним закрытым ключом, использование которого невозможно отследить.

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

Инструкции по подключению и переносу

Отслеживайте действия и удаляйте секреты из журналов

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

Платёжные данные и данные машины обрабатываются отдельно

OSXBuild не хранит номера карт

Все заказы оплачиваются в долларах США (USD). Поддерживаются только два указанных ниже способа оплаты; фактическую доступность платёжного шлюза проверяйте по ответу серверного интерфейса.

Visa / Mastercard / Amex

Платежи по картам обрабатываются через Stripe; OSXBuild не хранит номера карт. В заказе сохраняется статус платежа, необходимый для передачи узла и сверки. Номера карт не собираются для технической поддержки.

Если возникла проблема с оплатой, укажите номер заказа, время платежа и текст ошибки на странице.

USDT-TRC20

Используйте только платёжные реквизиты, показанные на странице оформления заказа в данный момент. Перед переводом проверьте сеть, сумму и реквизиты получателя. Не используйте адреса из старых снимков экрана или писем других людей вместо данных на странице текущего заказа.

Для помощи со сверкой платежа укажите идентификатор транзакции. Не предоставляйте закрытый ключ кошелька или материалы для восстановления.

Проверяйте счета, продление аренды и статус платежей в панели. Не сообщайте никому полный номер карты, код безопасности карты или закрытый ключ, даже если их запрашивают якобы для проверки платежа.

Обратитесь к специалистам

Сообщайте об уязвимостях, не отправляя секреты

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

В первом сообщении укажите четыре пункта

  • Затронутый ресурс:Путь к странице, узел или номер заказа — без паролей доступа.
  • Что произошло:Краткие шаги для воспроизведения, ожидаемый и фактический результат.
  • Когда произошло:Время события и часовой пояс, чтобы мы могли сверить историю операций.
  • Данные без секретов:Фрагмент ошибки или снимок экрана с закрытой конфиденциальной информацией. Не прикладывайте закрытые ключи и файлы подписи целиком.

Выберите один способ связи

Если вы ещё не оформили заказ или не можете войти, напишите на почту. По вопросам существующего заказа лучше отправить обращение через панель — так его проще связать с узлом и данными о передаче.

support@osxbuild.com

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

Чёткие границы для следующей подписи

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