Объяснение изолированного API

Sandboxed API (SAPI) создан на основе хорошо зарекомендовавшего себя проекта Sandbox2 . На этой странице объясняется архитектура проектирования SAPI и ключевые концепции.

Обзор

SAPI предназначен для предоставления разработчикам инструментов для подготовки библиотек C/C++ к изолированной программной среде, а также API, необходимых для взаимодействия с изолированной версией библиотек C/C++.

На этой диаграмме показана архитектура изолированной библиотеки C/C++ SAPI:

SAPI-диаграмма

SAPI также предоставляет примитивы для ручной и автоматической (на основе атрибутов настраиваемого указателя) синхронизации памяти (массивов, структур) между библиотеками SAPI и кодом хоста.

Наконец, API транзакций высокого уровня позволяет отслеживать библиотеки SAPI и перезапускать их в случае сбоя (например, из-за нарушений безопасности, сбоев или исчерпания ресурсов).

Песочница2

Проект Sandbox2 с открытым исходным кодом разрабатывается и поддерживается инженерами по безопасности Google и является основной технологией изолированной программной среды, используемой SAPI. Sandbox2 содержит три основных компонента: Sandbox Policy , Executor и Sandboxee .

Политика песочницы

Политика песочницы определяет ограниченную среду выполнения для изолированной библиотеки. Это достигается за счет уточнения того, какие системные вызовы могут быть выполнены. SAPI использует тот же механизм, что и Sandbox2. Дополнительные сведения о разработке и определении политики песочницы см. в разделе «Политика песочницы» и на странице «Приступая к работе» для Sandbox2.

SAPI использует политику по умолчанию. В качестве альтернативы вы можете использовать специальную политику песочницы, определив ее в заголовочном файле sandbox.h и передав ее в качестве аргумента в правиле сборки sapi_library .

Песочница

Это изолированная библиотека C/C++, которая будет выполняться в ограниченной изолированной среде, предоставляемой Sandbox2. В конечном итоге изолированная библиотека предоставляет необходимые функциональные возможности, которые могут использоваться хост-кодом .

Песочница построена с использованием правила сборки sapi_library , в котором вы можете указать настраиваемую политику песочницы, определяющую среду с ограниченным выполнением. В зависимости от библиотеки вам, возможно, придется написать код-оболочку или заглушку (см. libcurl ), но не предполагается, что вы будете изменять исходный код библиотеки C/C++ при подготовке версии SAPI.

Объект SAPI и заглушка RPC

Объект SAPI — это объект C++, который предоставляет API изолированной библиотеки. Он перенаправляет вызовы из кода хоста в заглушку RPC, которая встроена в библиотеку SAPI вместе с изолированной библиотекой.

Эти два элемента автоматически генерируются системой сборки с использованием правила сборки sapi_library() . SAPI поддерживает две системы сборки: Google Bazel и CMake .

Код хоста

Хост-код — это то, что реализует логику, предоставляемую библиотекой SAPI. В противном случае это то, что в противном случае использовало бы версию библиотеки C/C++ без изолированной программной среды. Таким образом, хост-код вызывает функции, экспортированные библиотекой SAPI, передавая данные в песочницу и получая их из нее.

Хост-код необходимо адаптировать для использования библиотеки SAPI. В частности, вызов функций библиотеки невозможен, поскольку библиотека находится в отдельном изолированном процессе. Таким образом, SAPI предоставляет инструменты, которые создают объект SAPI, который пересылает вызовы в библиотеку SAPI.

Концепции

Правила сборки Базеля

Проект SAPI предоставляет два правила сборки Bazel для изолированной программной среды библиотеки C/C++:

  • sapi_library() — создает все выходные данные, необходимые для изолированной программной среды библиотеки C/C++ как Sandbox2 Sandboxee. Выходные данные сборки можно использовать в качестве зависимости для правила cc_binary() , используемого для сборки двоичного кода хост-кода.
  • sapi_interface() — автоматически генерирует заголовок, который можно включить в двоичный код хоста.

Более подробное объяснение Правил сборки см. в разделе Правила сборки .

Переменные

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

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

Транзакции

Как объяснялось выше, любой вызов API к изолированной библиотеке передается через уровень RPC. Чтобы иметь возможность обрабатывать сбои на этом уровне, вам необходимо реализовать соответствующую обработку ошибок. Модуль транзакций SAPI предоставляет необходимый механизм, гарантирующий, что все вызовы изолированной библиотеки завершаются без каких-либо проблем на уровне RPC или возвращаются с соответствующей ошибкой.

Более подробное объяснение этой темы см. в разделе Транзакции .

Начиная

Прочтите нашу страницу «Начало работы» , чтобы настроить свой первый проект изолированного API.

,

Sandboxed API (SAPI) создан на основе хорошо зарекомендовавшего себя проекта Sandbox2 . На этой странице объясняется архитектура проектирования SAPI и ключевые концепции.

Обзор

SAPI предназначен для предоставления разработчикам инструментов для подготовки библиотек C/C++ к изолированной программной среде, а также API, необходимых для взаимодействия с изолированной версией библиотек C/C++.

На этой диаграмме показана архитектура изолированной библиотеки C/C++ SAPI:

SAPI-диаграмма

SAPI также предоставляет примитивы для ручной и автоматической (на основе атрибутов настраиваемого указателя) синхронизации памяти (массивов, структур) между библиотеками SAPI и кодом хоста.

Наконец, API транзакций высокого уровня позволяет отслеживать библиотеки SAPI и перезапускать их в случае сбоя (например, из-за нарушений безопасности, сбоев или исчерпания ресурсов).

Песочница2

Проект Sandbox2 с открытым исходным кодом разрабатывается и поддерживается инженерами по безопасности Google и является основной технологией изолированной программной среды, используемой SAPI. Sandbox2 содержит три основных компонента: Sandbox Policy , Executor и Sandboxee .

Политика песочницы

Политика песочницы определяет ограниченную среду выполнения для изолированной библиотеки. Это достигается за счет уточнения того, какие системные вызовы могут быть выполнены. SAPI использует тот же механизм, что и Sandbox2. Дополнительные сведения о разработке и определении политики песочницы см. в разделе «Политика песочницы» и на странице «Приступая к работе» для Sandbox2.

SAPI использует политику по умолчанию. В качестве альтернативы вы можете использовать специальную политику песочницы, определив ее в заголовочном файле sandbox.h и передав ее в качестве аргумента в правиле сборки sapi_library .

Песочница

Это изолированная библиотека C/C++, которая будет выполняться в ограниченной изолированной среде, предоставляемой Sandbox2. В конечном итоге изолированная библиотека предоставляет необходимые функциональные возможности, которые могут использоваться хост-кодом .

Песочница построена с использованием правила сборки sapi_library , в котором вы можете указать настраиваемую политику песочницы, определяющую среду с ограниченным выполнением. В зависимости от библиотеки вам, возможно, придется написать код-оболочку или заглушку (см. libcurl ), но не предполагается, что вы будете изменять исходный код библиотеки C/C++ при подготовке версии SAPI.

Объект SAPI и заглушка RPC

Объект SAPI — это объект C++, который предоставляет API изолированной библиотеки. Он перенаправляет вызовы из кода хоста в заглушку RPC, которая встроена в библиотеку SAPI вместе с изолированной библиотекой.

Эти два элемента автоматически генерируются системой сборки с использованием правила сборки sapi_library() . SAPI поддерживает две системы сборки: Google Bazel и CMake .

Код хоста

Хост-код — это то, что реализует логику, предоставляемую библиотекой SAPI. В противном случае это то, что в противном случае использовало бы версию библиотеки C/C++ без изолированной программной среды. Таким образом, хост-код вызывает функции, экспортированные библиотекой SAPI, передавая данные в песочницу и получая их из нее.

Хост-код необходимо адаптировать для использования библиотеки SAPI. В частности, вызов функций библиотеки невозможен, поскольку библиотека находится в отдельном изолированном процессе. Таким образом, SAPI предоставляет инструменты, которые создают объект SAPI, который пересылает вызовы в библиотеку SAPI.

Концепции

Правила сборки Базеля

Проект SAPI предоставляет два правила сборки Bazel для изолированной программной среды библиотеки C/C++:

  • sapi_library() — создает все выходные данные, необходимые для изолированной программной среды библиотеки C/C++ как Sandbox2 Sandboxee. Выходные данные сборки можно использовать в качестве зависимости для правила cc_binary() , используемого для сборки двоичного кода хост-кода.
  • sapi_interface() — автоматически генерирует заголовок, который можно включить в двоичный код хоста.

Более подробное объяснение Правил сборки см. в разделе Правила сборки .

Переменные

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

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

Транзакции

Как объяснялось выше, любой вызов API к изолированной библиотеке передается через уровень RPC. Чтобы иметь возможность обрабатывать сбои на этом уровне, вам необходимо реализовать соответствующую обработку ошибок. Модуль транзакций SAPI предоставляет необходимый механизм, гарантирующий, что все вызовы изолированной библиотеки завершаются без каких-либо проблем на уровне RPC или возвращаются с соответствующей ошибкой.

Более подробное объяснение этой темы см. в разделе Транзакции .

Начиная

Прочтите нашу страницу «Начало работы» , чтобы настроить свой первый проект изолированного API.