Penjelasan Sandbox API

API dengan sandbox (SAPI) dibuat berdasarkan project Sandbox2 yang sudah mapan. Halaman ini menjelaskan arsitektur desain SAPI dan konsep utama.

Ringkasan

SAPI didesain guna menyediakan alat bagi developer untuk menyiapkan library C/C++ untuk sandboxing, serta dengan API yang diperlukan untuk komunikasi dengan library C/C++ versi sandbox.

Diagram ini menampilkan arsitektur library C/C++ dengan sandbox SAPI:

Diagram SAPI

SAPI juga menyediakan primitif untuk sinkronisasi memori (array, struktur) antara Library SAPI dan kode host secara manual dan otomatis (berdasarkan atribut pointer kustom).

Terakhir, API Transaksi tingkat tinggi memungkinkan pemantauan Library SAPI, dan memulai ulang library tersebut jika gagal (misalnya, karena pelanggaran keamanan, error, atau kehabisan resource).

Sandbox2

Project open source Sandbox2 dikembangkan dan dikelola oleh engineer keamanan Google serta merupakan teknologi sandbox inti yang digunakan oleh SAPI. Sandbox2 berisi tiga komponen utama, yaitu Kebijakan Sandbox, Executor, dan Sandboxee.

Kebijakan Sandbox

Kebijakan sandbox menentukan lingkungan eksekusi terbatas untuk Library dengan Sandbox. Hal ini dicapai dengan memperjelas syscall mana yang dapat dieksekusi. SAPI menggunakan mekanisme yang sama seperti Sandbox2. Lihat bagian Kebijakan Sandbox dan halaman Memulai untuk Sandbox2 guna mengetahui informasi selengkapnya tentang cara mendesain dan menentukan kebijakan sandbox.

SAPI menggunakan kebijakan default. Atau, Anda dapat menggunakan kebijakan sandbox khusus dengan menentukannya dalam file header sandbox.h dan meneruskannya sebagai argumen dalam aturan build sapi_library.

Library dengan Sandbox

Library ini adalah library C/C++ dalam sandbox yang akan dijalankan di lingkungan sandbox terbatas yang disediakan oleh Sandbox2. Pada akhirnya, Library dengan Sandbox menampilkan fungsi yang diperlukan yang dapat digunakan oleh Kode Host.

Library Sandbox dibuat dengan aturan build sapi_library, tempat Anda dapat menentukan kebijakan sandbox kustom yang menentukan lingkungan eksekusi yang dibatasi. Bergantung pada library, Anda mungkin harus menulis kode wrapper atau stub (lihat libcurl), tetapi tidak perlu mengubah kode sumber library C/C++ saat menyiapkan versi SAPI.

Objek SAPI dan Stub RPC

Objek SAPI adalah objek C++ yang mengekspos API Library dengan Sandbox. Library ini meneruskan panggilan dari Host Code ke RPC Stub, yang disematkan di Library SAPI bersama dengan Library Sandbox.

Kedua elemen ini dibuat secara otomatis oleh sistem build menggunakan aturan build sapi_library(). SAPI mendukung dua sistem build, Bazel dan CMake dari Google.

Kode Host

Kode Host adalah alat yang mengimplementasikan logika yang disediakan oleh library SAPI. Versi inilah yang akan memakai library C/C++ versi sandbox. Dengan demikian, Kode Host memanggil fungsi yang diekspor oleh library SAPI, yang meneruskan data ke dan menerima data dari sandbox.

Host Code harus disesuaikan untuk menggunakan library SAPI. Terutama, memanggil fungsi library tidak mungkin dilakukan karena library tersebut berada dalam proses sandbox terpisah. Oleh karena itu, SAPI menyediakan alat untuk membuat objek SAPI yang menjadi proxy panggilan ke library SAPI.

Konsep

Aturan Build Bazel

Project SAPI menyediakan dua aturan build Bazel untuk melakukan sandbox library C/C++:

  • sapi_library() – Membuat semua output yang diperlukan agar library C/C++ di-sandbox sebagai Sandbox2 Sandbox. Output build dapat digunakan sebagai dependensi untuk aturan cc_binary() yang digunakan untuk mem-build biner kode host.
  • sapi_interface() – Otomatis menghasilkan header yang dapat disertakan dalam biner kode host.

Untuk penjelasan yang lebih lengkap tentang Aturan Build, lihat Aturan Build.

Variabel

SAPI menyediakan sejumlah jenis khusus, yang disebut Jenis SAPI, yang sebaiknya digunakan dalam Kode Host. Alasan utama diperlukannya Jenis SAPI adalah karena proses, dan juga memori, isolasi antara Kode Host dan Library dengan Sandbox.

Untuk penjelasan lebih lengkap tentang topik ini dan ringkasan tentang beberapa Jenis SAPI yang umum digunakan, lihat Variabel.

Transaksi

Seperti yang dijelaskan di atas, setiap panggilan API ke Library Sandbox diteruskan melalui lapisan RPC. Agar dapat menangani kegagalan pada lapisan ini, Anda perlu menerapkan penanganan kesalahan yang sesuai. Modul Transaksi SAP menyediakan mekanisme yang diperlukan untuk memastikan bahwa semua panggilan ke Library dengan Sandbox diselesaikan tanpa masalah tingkat RPC, atau ditampilkan dengan error yang relevan.

Untuk mengetahui penjelasan lebih lengkap tentang topik ini, lihat Transaksi.

Memulai

Baca halaman Memulai kami untuk menyiapkan project API dengan sandbox pertama Anda.