Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Contoh-contoh ini menunjukkan bagaimana persyaratan beban kerja diterjemahkan ke dalam izin sumber daya MXC. Anda dapat memulai dengan mulai cepat C#, TypeScript, atau Rust, lalu menyesuaikan konfigurasi dengan beban kerja Anda.
JSON di bawah ini menggunakan bentuk konfigurasi eksekusi mentah untuk skema MXC 1.0.0 . Konfigurasi lengkap mencakup versi dan perintah; bagian yang diberi label sebagai fragmen harus dimasukkan ke dalam konfigurasi yang ada. Saat Anda menulis di C#, TypeScript, atau Rust, gunakan jenis SDK V1 yang sesuai, yang tidak memerlukan versi skema tertentu.
Ini adalah contoh Windows. Ganti jalur dengan sumber daya yang ada di host Anda, berikan dependensi alat tambahan dengan sengaja, dan konfirmasikan bahwa rilis dan backend SDK Anda mendukung kontrol yang dipilih.
Jalankan alat dengan cakupan repositori
Konfigurasi lengkap ini menggunakan pola baca-input/write-output yang sama dengan quickstart. Buat C:\src\my-app\input.txt dan direktori C:\src\mxc-output sebelum menjalankannya. Perintah dapat membaca direktori sumber dan menulis ke direktori output, tetapi tidak dapat menulis ke direktori sumber atau menggunakan jaringan atau UI.
{
"$schema": "https://raw.githubusercontent.com/microsoft/mxc/main/schemas/stable/mxc-config.schema.1.0.0.json",
"version": "1.0.0",
"containment": "process",
"process": {
"commandLine": "C:\\Windows\\System32\\cmd.exe /d /c type input.txt > C:\\src\\mxc-output\\result.txt",
"cwd": "C:\\src\\my-app",
"env": [
"SystemRoot=C:\\Windows",
"LOCALAPPDATA=C:\\src\\mxc-output",
"TEMP=C:\\src\\mxc-output",
"TMP=C:\\src\\mxc-output"
],
"timeout": 30000
},
"filesystem": {
"readonlyPaths": ["C:\\src\\my-app", "C:\\Windows\\System32\\cmd.exe"],
"readwritePaths": ["C:\\src\\mxc-output"]
},
"network": {
"egress": { "default": "deny" },
"ingress": { "default": "deny", "hostLoopback": "deny" }
},
"ui": {
"disable": true,
"clipboard": "none",
"injection": false
}
}
Contoh ini mengasumsikan Windows diinstal pada C:\Windows; gunakan direktori sistem aktual pada host Anda. Permintaan Windows ProcessContainer dengan daftar eksplisit env harus menyertakan SystemRoot dan LOCALAPPDATA. Saat Anda mengganti perintah dengan alat build atau analisis, konfigurasikan cache dan file sementaranya untuk menggunakan direktori tulis khusus daripada memberikan akses tulis ke seluruh repositori.
Melindungi kredensial di dalam otorisasi yang lebih luas
Konfigurasi sebelumnya memberikan akses baca ke C:\src\my-app. Jika direktori tersebut berisi file lingkungan atau direktori rahasia, tambahkan fragmen ini di dalam bagian filesystem yang sudah ada, pertahankan daftar baca-saja dan baca-tulis:
{
"deniedPaths": [
"C:\\src\\my-app\\.env",
"C:\\src\\my-app\\secrets"
]
}
Jalur yang ditolak ini berada di dalam direktori sumber yang diizinkan. Simpan repositori dan direktori profil pengguna yang tidak terkait di luar izin akses.
Simpan rahasia di luar pohon yang diizinkan jika memungkinkan. Verifikasi izin dan penolakan akses yang tumpang tindih pada backend yang dipilih; beberapa backend direktori yang dipasang menolak penolakan akses bertingkat alih-alih memberlakukannya.
Mengizinkan akses langsung ke rentang IP
Fragmen konfigurasi ini menggantikan bagian network. Ini mengizinkan port TCP keluar 443 ke rentang CIDR yang disetujui dan menolak semua lalu lintas egress, ingress, dan host-loopback lainnya. Sediakan rentang yang disetujui dari konfigurasi tepercaya daripada menerimanya dari beban kerja.
{
"network": {
"egress": {
"default": "deny",
"allow": [
{
"to": [{ "cidr": "192.0.2.0/24" }],
"ports": [{ "protocol": "tcp", "port": 443 }]
}
]
},
"ingress": { "default": "deny", "hostLoopback": "deny" }
}
}
192.0.2.0/24 adalah rentang yang hanya untuk dokumentasi. Ganti dengan alamat yang disetujui layanan yang dituju. Aturan ini mengizinkan TCP pada port tersebut, bukan hanya untuk HTTPS, satu nama host, atau satu layanan aplikasi. Resolusi nama host langsung dapat memerlukan aturan DNS terpisah.
Contoh ini memerlukan backend dan host yang mendukung aturan egress langsung. Jangan gabungkan dengan runtimeConfig.networkProxy. Untuk keputusan HTTP berbasis hostname, gunakan konfigurasi berbasis proksi yang didukung sebagai gantinya.
Menggunakan proksi yang disediakan aplikasi
Aplikasi host Anda harus memulai proksinya sebelum meluncurkan beban kerja. Contoh ini mengonfigurasi MXC untuk menggunakan proksi yang ada; ini tidak menerapkan, memulai, atau menyetujui kebijakan penanganan permintaan milik proksi.
Fragmen konfigurasi berikut menargetkan Windows ProcessContainer dengan jalur penerapan proksi pada tingkat OS yang didukung. Gabungkan ke dalam konfigurasi lengkap, mempertahankan perintah, izin sistem file, batas waktu, dan pembatasan UI. Ganti endpoint dan nama peer dengan proksi anda yang sedang berjalan.
{
"containment": "processcontainer",
"network": {
"egress": { "default": "deny" },
"ingress": { "default": "allow", "hostLoopback": "deny" }
},
"runtimeConfig": {
"networkProxy": "http://127.0.0.1:8080"
},
"processContainer": {
"network": {
"allowedProxyPeer": "<package-family-name-or-appcontainer-profile-name>"
}
}
}
allowedProxyPeer mengidentifikasi paket terinstal milik proksi atau profil AppContainer yang tidak dikemas. Proksi harus mendengarkan alamat dan port loopback yang dikonfigurasi dan memenuhi prasyarat Windows yang didokumenkan. MXC tidak menyimpulkan identitas tersebut dari URL.
Important
Pemetaan drive Windows ini memerlukan ingress.default: "allow", yang juga mengizinkan lalu lintas server jaringan privat.
hostLoopback: "deny" menjaga akses host-loopback umum tetap tertutup sementara peer proksi yang dikonfigurasi dapat dijangkau. Contohnya bukan konfigurasi yang semua koneksi masuk ditolak.
Akses internet langsung tetap ditolak pada jalur penegakan. Proksi mengontrol permintaan HTTP(S) mana yang diteruskannya. Proksi host tanpa paket yang sederhana tanpa identitas AppContainer memerlukan konfigurasi kompatibilitas yang berbeda dan lebih luas; jangan hapus allowedProxyPeer dan asumsikan pembatasan yang sama tetap ada.
Gunakan jenis SDK yang sesuai, dan verifikasi dukungan sebelum mengandalkan akses hanya melalui proksi. Lihat opsi deployment proksi ProcessContainer untuk prasyarat Windows dan jaringan terarah untuk backend lainnya.
Mengizinkan alat yang terlihat tanpa akses UI yang luas
Untuk beban kerja yang membutuhkan jendela yang terlihat dan input clipboard, fragmen konfigurasi ini menggantikan ui. Ini memungkinkan membaca jendela dan clipboard, tetapi tidak penulisan clipboard atau input keyboard dan penunjuk sintetis:
{
"ui": {
"disable": false,
"clipboard": "read",
"injection": false
}
}
Dalam V1 SDK ContainerRequest, properti UI yang setara adalah disable, clipboard, dan allowInputInjection. Berikan pembacaan clipboard hanya ketika beban kerja memerlukannya. Periksa dukungan antarmuka pengguna runtime dan uji batasan yang diperlukan pada setiap host target.
Menggunakan kembali sandbox yang mengetahui status
Gunakan eksekusi yang memahami status saat perintah harus menggunakan lingkungan yang sama. Provisikan dan mulai instansnya, jalankan perintah, lalu hentikan dan deprovisi instansnya setelah selesai. Atur pembersihan setelah kegagalan dan pembatalan, bukan hanya keberhasilan.
Panggilan yang mengetahui status menggunakan ProvisionRequest khusus fase dan ExecutionRequest terpisah untuk setiap perintah, bukan konfigurasi sekali pakai lengkap di atas. Provisioning mengembalikan nilai opak ContainerId; teruskan tanpa perubahan ke fase selanjutnya. Gunakan MxcLifecycle dalam .NET, fungsi siklus hidup TypeScript seperti provisionContainer, atau fungsi v1::container Rust seperti provision_container, dengan IsolationSession atau WSLc, yaitu backend yang didukung oleh API siklus hidup V1. Lihat konsep siklus hidup, siklus hidup kontainer MXC, dan panduan SDK .NET, TypeScript, atau Rust untuk persyaratan yang tepat.
Periksa apa yang diberlakukan setiap backend siklus hidup sebelum Anda memilihnya. IsolationSession memisahkan pengguna dan sesi milik beban kerja tetapi tidak menerapkan sistem file MXC, UI, atau pemfilteran jaringan, dan permintaannya harus secara eksplisit mengizinkan semua lalu lintas jaringan. Jaringan WSLc sepenuhnya terisolasi atau sepenuhnya di-bridge, tanpa aturan per tujuan. Untuk detailnya, lihat Pilih tipe containment dan Pilihan dan pengaturan backend.
Verifikasi contoh
Untuk setiap kebijakan yang disesuaikan, uji perilaku yang dimaksudkan dan percobaan penyalahgunaan:
- Konfirmasikan bahwa input yang diperlukan dapat dibaca dan output yang diperlukan dapat ditulis.
- Konfirmasikan bahwa kredensial dan file yang tidak terkait tetap tidak dapat diakses.
- Konfirmasikan bahwa koneksi langsung, jaringan lokal, loopback, dan koneksi masuk cocok dengan kebijakan.
- Untuk akses berbasis proksi, konfirmasikan bahwa permintaan yang disetujui berhasil dan upaya internet langsung gagal.
- Konfirmasikan bahwa clipboard, injeksi input, dan jendela yang terlihat cocok dengan kebijakan UI.
- Konfirmasikan bahwa timeout dan pembersihan berfungsi setelah berhasil, gagal, dan pembatalan.
Gunakan Mode Pembelajaran untuk menyelidiki akses yang tidak tersedia. Jangan secara otomatis memberikan setiap sumber daya yang diamati oleh eksekusi representatif.
Konten terkait
Windows developer