Сборки в разных регионах — доступ под контролем

Одна машина — один набор прав доступа

Mac mini размещён в дата-центре, а кодом и ключами подписи управляет команда. Машина арендуется одним клиентом и не является виртуальной.

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

Аренда от одного дня, от $19.2 в день. До запуска определите ответственного за устройство, список пользователей и способ экспорта данных.

Изоляция начинается с оборудования

У каждого клиента — отдельный Mac

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

Вся машина — одному клиенту

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

Граница изоляции: клиенты не используют одну машину совместно.

Накопитель не используется совместно с другими клиентами

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

Граница ответственности: внутри команды также нужно настроить права на файлы.

Задачи одной команды конкурируют за ресурсы

Выделенная машина не означает, что каждой задаче выделены отдельные ресурсы. Несколько runner, симуляторов и процессов archive одновременно используют память, CPU и диск одной машины.

Рекомендация: настройте параллельность сборок и очередь задач.

Закрепите доступ за конкретными людьми

Выдавайте личные ключи, своевременно меняйте пароль VNC

Получив данные для SSH- и VNC-доступа, сначала настройте собственные правила, а затем добавляйте исходный код и материалы для подписи. Если участники из Азиатско-Тихоокеанского региона и Северной Америки работают по очереди, не используйте один постоянный пароль вместо процедуры передачи доступа.

  1. 01

    Используйте личные SSH-ключи

    Регистрируйте открытый ключ отдельно для каждого пользователя, которому нужен доступ; не передавайте закрытые ключи в чатах. При удалении участника отзовите его доступ. Ключи для CI храните отдельно от ключей для личного входа.

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

  2. 02

    Задайте пароль VNC для команды

    При первом подключении задайте собственный пароль VNC для команды. Не используйте пароль от консоли или данные доступа к репозиторию. Меняйте пароль при смене состава команды или возможной утечке учётных данных.

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

  3. 03

    Оставьте только нужные службы

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

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

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

Учитывайте ключи подписи отдельно для каждого проекта

Храните сертификаты, закрытые ключи и логи сборки раздельно

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

Сертификаты и профили подготовки

Храните сертификаты, соответствующие им закрытые ключи и профили подготовки отдельно для каждого проекта. Перед импортом проверьте назначение, срок действия и подходящий target; не добавляйте файлы экспорта с закрытым ключом в репозиторий.

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

Учитывайте: проект, назначение, ответственный, срок действия.

Отдельная связка ключей для сборок

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

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

Учитывайте: связка ключей, вызывающая задача, способ разблокировки.

Кому доступны логи и артефакты

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

Отдельно задайте место хранения и срок хранения для archive, пакетов экспорта и отладочных символов. Успешная сборка не означает, что артефакты сохранены в резервной копии: как минимум проверьте, что нужные файлы можно восстановить из хранилища команды.

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

Проверьте идентификатор подписи перед запуском сборки для выпуска

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

security find-identity -v -p codesigning

Команда только перечисляет идентификаторы: она не импортирует сертификаты и не настраивает права доступа к связке ключей.

Дата-центр отвечает за инфраструктуру, команда — за свою часть

Дата-центр обеспечивает питание, команда управляет средой сборки

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

Размещение инфраструктуры не заменяет управление правами доступа и резервным копированием на уровне приложений
Область управленияОтветственность дата-центра и платформыЧто должна обеспечить команда
Эксплуатация оборудованияРазмещение всей машины, электропитание, сеть и охлаждение.Свяжите экземпляр с проектом и укажите ответственного за устройство.
Доступ к системеПредоставление учётных данных для входа на всю машину через консоль.Настройка SSH-ключей, пароля VNC и доступа участников.
Среда сборкиПредоставление выделенного физического Mac с удалённым доступом.Управление инструментами Xcode, runner, зависимостями и параллельностью задач.
Ресурсы проектаСтирание всей машины после окончания аренды перед передачей следующему клиенту.Резервное копирование кода и ключей подписи, экспорт артефактов и отзыв внешних разрешений.

Работа узла 365 дней в году не означает, что каждая сборка завершится успешно. Ошибки скриптов, истёкшие сертификаты, переполненный диск и изменения системных настроек командой по-прежнему требуют мониторинга и обработки в рамках проекта.

Завершите передачу дел до конца аренды

Сначала заберите данные, затем верните машину

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

  1. 01

    Экспортируйте данные и проверьте резервные копии

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

  2. 02

    Отзовите разрешения во внешних системах

    Удалите соответствующий runner на платформе CI и отзовите больше не используемые ключи развёртывания и токены доступа. Меняйте общие секреты по правилам команды. Стирание файлов на устройстве не означает, что внешние системы перестали доверять старым учётным данным.

  3. 03

    Уточните порядок завершения аренды

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

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

Мы не храним номера карт; для сверки оставляем только необходимые данные

Все платежи принимаются в долларах США (USD). Поддерживаются только USDT-TRC20 и Visa / Mastercard / Amex через Stripe. Фактически доступный способ оплаты зависит от ответа платёжного шлюза при оформлении заказа.

Оплата картой обрабатывается Stripe

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

Сообщите службе поддержки данные заказа, но не секретные данные карты.

Сверка USDT-TRC20 по данным блокчейна

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

Сохраните хеш транзакции и проверьте статус оплаты по номеру заказа.

Сообщения о проблемах безопасности, вопросы по платежам и обработке данных можно отправить на адрес support@pushmac.comили создать тикет в консоли. В первом сообщении укажите номер экземпляра, используемый узел, необходимые действия и время возникновения проблемы с часовым поясом. Перед отправкой удалите из логов секретные данные.

Доверьте сборочную машину дата-центру

Выделенная машина работает онлайн 365 дней в году. Назначьте ответственного за доступ и подключите сборки Xcode к конвейеру команды.