MXC ilkesini yazın ve doğrulayın

MXC ilkesi, bir iş yükünün nelere erişebileceğini açıklar. Reddet-varsayılan yaklaşımıyla başlayın, yalnızca belirli bir görev için gereken kaynakları ekleyin ve sonucu uygulamanızın desteklediği her platformda temsili girişlerle doğrulayın. Her arka uç, bir iş yükünü başlatmak için gereken işletim sistemi kaynaklarını da sağlar; deny-by-default, işlemin sistem ortamı olmadan çalıştığı anlamına gelmez.

İlke kararlarını güvenilen uygulama kodunda tutun. Araç, eklenti, betik veya yapay zeka tarafından oluşturulan bir komut, neye ihtiyaç duyduğunu bildirebilir, ancak kendi kapsama modelini seçmemeli veya kendi erişimini genişletmemelidir.

Politikayı ve yapılandırmayı anlama

MXC, kaynak izinlerini bir komutu çalıştırmak için kullanılan ayarlardan ayırır:

  • Politika ayarları okunabilir yollar, yazılabilir yollar, ağ hedefleri, kullanıcı arabirimi erişimi ve zaman aşımı gibi platformlar arası niyeti açıklar.
  • Yürütme ayarları komutu, çalışma dizinini, ortamı ve kapsayıcı seçimini ekler.

V1 SDK'larında ContainerRequest ikisini de taşır. .NET'da komutundan bir ContainerRequest oluşturun, ilke ve yürütme özelliklerini ayarlayın ve MxcContainer.RunAsync'i veya bir spawn API'sini çağırın. TypeScript'te bir ContainerRequest nesnesini run öğesine veya bir spawn işlevine geçirin. Rust'ta bir ContainerRequest yapı oluşturun ve bunu v1::run ya da bir spawn işlevine geçirin. İş yükünüz belirli bir arka uç gerektirmedikçe soyut Process kapsayıcı niyetini tercih edin.

Aşağıdaki dilden bağımsız ilke ayarları, depo kapsamındaki bir görevi açıklar. TypeScript, ContainerRequest özellik adlarını kullanır; .NET, ReadonlyPaths gibi PascalCase adlarla aynı yapıyı kullanır, Rust ise readonly_paths gibi snake_case adlar kullanır. Bunlar tam bir istek değildir: bir komut içermezler veya bir arka uç seçmezler. Dizinleri oluşturun ve bunları uyarlamadan önce yolları değiştirin.

{
  "filesystem": {
    "readonlyPaths": ["C:\\src\\my-app"],
    "readwritePaths": ["C:\\src\\mxc-output"],
    "deniedPaths": ["C:\\src\\my-app\\.env"]
  },
  "network": {
    "egress": { "default": "deny" },
    "ingress": { "default": "deny", "hostLoopback": "deny" }
  },
  "ui": {
    "disable": true,
    "clipboard": "none",
    "allowInputInjection": false
  },
  "timeoutMs": 30000
}

İstek özelliklerini ham yürütme yapılandırmasına kopyalamak yerine SDK türlerini kullanın. Şekiller farklıdır: örneğin, isteğin network.runtimeConfig öğesi yapılandırmanın ui.injection öğesine, runtimeConfig öğesi ui.allowInputInjection öğesine ve process.timeout öğesi üst düzey timeoutMs bölümüne eşlenir. Tam C#, TypeScript ve Rust örnekleri için SDK hızlı başlangıcına bakın.

Uyumlu bir şema seçin

Bu üç soruyu ayrı tutun:

Uyumluluk ekseni Denetlenecek şeyler
SDK ve ürün yayını Paketin hangi API'leri ve çalışma zamanı bileşenlerini sağladığı
Politika şeması Sürümün hangi tam yapılandırma sözleşmesini kabul ettiği
Ana bilgisayar özellikleri Seçili ortamın çalışma zamanında uygulayabileceği kısıtlamalar

MXC 1.0 V1 SDK'ları kararlı 1.0.0 şemayı dahili olarak kullanır, bu nedenle bir ContainerRequest içinde şema sürümü belirtmezsiniz. Şema sürümü yalnızca wxc-exec komut satırı aracı için bir dosya gibi ham bir JSON yürütme yapılandırması yazdığınızda uygulanır.

Ham yapılandırma tam olarak kaydedilmiş bir version bildirmelidir. MXC 1.0, 0.9.0-alphageçerli kararlı şemayı ve 1.0.0desteklenen en düşük şemayı kabul eder. MXC eksik bir sürümü, 0.9.0-alpha öncesinde kullanımdan kaldırılmış sürümleri (0.8.0-alpha gibi) ve 1.0.1 veya 1.0 gibi kaydedilmemiş yazımları reddeder. Geliştirme 1.1.0-alpha aşaması yayımlanmadan önce değişebilir, bu nedenle üretim yapılandırmaları için kullanmayın. Bunu seçmek deneysel arka uçları yetkilendirmez.

SDK ve yerel çalışma zamanı bileşenlerini aynı sürümden birlikte tutun. Kayıtlı sözleşmeler için bkz. MXC şema sürümleme.

Dosya erişimini kapsamlandır

Her yolu iş yükünün onu nasıl kullandığına göre sınıflandırın:

Erişim Şunun için kullanın
Read-only İş yükünün incelemesi ancak değiştirmemesi gereken kaynak, araçlar, kitaplıklar ve yapılandırma
Okuma/yazma Göreve özgü bir çıktı, önbellek veya geçici dizin
Reddedildi Kimlik doğrulama bilgileri, ilişkisiz depolar, hassas yapılandırma ve daha geniş bir yetki kapsamındaki daha dar yollar

En dar pratik yola izin verin. Örneğin, bir komut yalnızca test çıktısı yazdığında depo kökü yerine test sonuçları dizini verin. Ortam değişkenlerinden, paket yöneticilerinden veya araç aramalarından bulunan yolları otomatik izinler değil, gözden geçirme adayı olarak değerlendirin.

İş yükünün ihtiyaç duyduğu araç ikili dosyalarını, kitaplıkları, yapılandırmayı ve geçici yolları ekleyin. SDK'lar dosya sistemi bulma yardımcıları sağlar, ancak sonuçları onaylanmış bir politika değildir. Eklemeden önce her bir aday yolunu gözden geçirin.

Çalışma dizini ayarlamak, bu dizine erişim izni vermez. Bunu açıkça uygun dosya sistemi listesine ekleyin.

Seçili arka uçla test etmediğiniz sürece çakışan yol kuralına güvenmekten kaçının. Arka uçlar farklı dosya erişim mekanizmaları kullanır ve bazıları eşlenmiş veya bağlanmış dizin içindeki reddetme kuralını temsil edemez.

Ağ erişimini denetleme

Görev gerektirmediği sürece ağ erişiminin reddedilmiş kalmasını sağlayın. Seçili arka ucun zorlayabileceği bir ağ modeli seçin:

Model Şunun için kullanın
Dış erişim yok Yalnızca izin verilmiş yerel kaynaklara ihtiyaç duyan analiz veya dönüştürme
IP/CIDR, protokol ve bağlantı noktası kurallarıyla doğrudan erişim Bilinen bir hizmet uç noktasına TCP gibi belirli doğrudan bağlantılara ihtiyaç duyan bir görev
Uygulama tarafından sağlanan ara sunucu aracılığıyla HTTP(S) Hedefleri veya uygulama düzeyi izinleri proxy'nizin denetlediği istekler

Yönlü ağ ilkesi şunları ayırır:

  • Çıkış iş yükünden ağ hedeflerine.
  • Ingress'in özel veya yerel ağlardan iş yükündeki dinleyicilere girişi.
  • Ana makine geri döngüsü, iş yükü ile ana makinedeki hizmetler arasında her iki yönde.

IP/CIDR ve port kuralları, uygulama protokolünü veya ana bilgisayar adını tanımlamaz. TCP bağlantı noktası 443'e izin vermek, bağlantının HTTPS kullandığını veya yalnızca bir adlandırılmış hizmete ulaştığını belirlemez. DNS istekleri, iş yükü hedef adreslerini doğrudan çözümlediğinde de erişim gerektirebilir.

Desteklenen şemalar, allowedHosts, blockedHosts, network.proxy ve defaultPolicy gibi kullanımdan kaldırılmış ağ alanlarını reddeder. Bunun yerine yön egress ve ingress alanları kullanın. Bkz. ağ ilkesi örnekleri.

Özel ağ ara sunucusu kullanın

Konak uygulamanız, iş yükünü başlatmadan önce ara sunucuyu sağlar ve başlatır. MXC, üretim ara sunucusu sağlamaz veya yönetmez. Hangi isteklere ve hedeflere izin vereceğine proxy karar verir; MXC, desteklenen istemcileri bunu kullanacak şekilde yapılandırır ve arka ucun ağ kısıtlamalarını uygular.

Yönlendirme isteği, açık bir bağlantı noktasıyla bir HTTP(S) geri döngü uç noktasını tanımlamak için ağ bölümünün runtimeConfig.networkProxy ayarını kullanır. Ham yürütme yapılandırmasında bu ayar üst düzey runtimeConfig.networkProxy öğesidir. Bu uç nokta, uygulama katmanı izin verilenler listesi değil çalışma zamanı yapılandırmasıdır. Proxy modu varsayılan olarak reddedilen giden trafik gerektirir ve doğrudan giden trafiğe izin verme veya reddetme kurallarıyla birleştirilemez.

İstemci yönlendirme ve zorunlu kılma farklıdır. Ara sunucu ortam değişkenleri veya platform ayarları, işbirliği yapan HTTP istemcilerine istekleri nereye göndereceklerini bildirir. Yalnızca proxy üzerinden zorunlu kılma yolu da doğrudan İnternet bağlantılarını engellemelidir; tek başına bir proxy yapılandırması bu kısıtlamayı sağlamaz.

MXC, SSH, herhangi bir TCP/UDP veya HTTP olmayan diğer protokolleri HTTP(S) ara sunucusu aracılığıyla saydam olarak yeniden yönlendirmez. Ana bilgisayar geri döngüsü ve özel ağ davranışı da backend’e göre değişir. Aynı parçanın her yerde çalıştığını varsayma yerine özel ara sunucu yapılandırma örneğini ve önkoşullarını gözden geçirin.

Kullanıcı arayüzü erişimini kısıtla

Varsayılan olarak, arka plan iş yükünün pencere oluşturmasına, panoyu okumasına veya yazmasına ya da klavye ve işaretçi girişi eklemesine izin verme. Kullanıcı arabirimi erişimini yalnızca iş yükünün hedeflenen kullanıcı deneyiminin bir parçası olduğunda ekleyin.

Girdi enjeksiyonu, başka bir işleme rastgele kod ekleme değil, yapay klavye veya işaretçi girişi anlamına gelir.

Kullanıcı arabirimi denetimleri konak ve arka uca bağımlıdır. Güvenlik tasarımınızın gerektirdiği her kısıtlamayı doğrulamak için çalışma zamanı destek bilgilerini kullanın.

Bağlı yürütme

Bilinen bir süre içinde bitmesi gereken her ajan eylemi, araç çağrısı veya betik için bir zaman aşımı ayarlayın. Yalnızca işlemin ihtiyaç duyduğu ortam değişkenlerini sağlayın ve gizli bilgileri hem işlem ortamından hem de okunabilir dosya yollarından uzak tutun. Ortamı atlarsanız boş bir ortam oluşacağını varsaymayın: arka uç varsayılanları ve SDK devralma seçenekleri farklıdır.

Görevle eşleşen bir yaşam döngüsü seçin. Bağımsız komutlar için tek seferlik yürütmeyi tercih edin. Durum bilgisi olan bir korumalı alanı yalnızca komutların yüklü araçları, kimliği, dosyaları veya işletim sistemi durumunu paylaşması gerektiğinde kullanın.

Geçerli ilkeyi doğrulayın

Bir politikayı göndermeden önce:

  1. SDK'nızın çalışma zamanı keşfini kullanın ve seçilen backend'in önkoşullarını denetleyin.
  2. Yapılandırmayı oluşturun ve ilkeyi zayıflatmadan ilke doğrulama veya arka ucun kullanılamamasıyla ilgili hataları işleyin.
  3. İş yükünün kullanması gereken kaynaklarla temsili başarılı örnek senaryoları çalıştırın.
  4. Gizli verileri okumaya, çıkış dizini dışına yazmaya, onaylanmamış bir ağ yolu kullanmaya veya izin verilmeyen kullanıcı arabirimine erişmeye çalışan negatif durumlar çalıştırın.
  5. Eksik erişimi araştırmak için Öğrenme Modu'nu kullanın ve ilkeyi değiştirmeden önce her sonucu gözden geçirin.
  6. Tüm öğrenme veya denetim ayarlarını kaldırın ve son bir zorunlu kılma testi çalıştırın.

Ana bilgisayar gerekli bir denetim mekanizmasını zorlayamazsa başarısız olur. Daha geniş erişimli arka ucu sessizce seçmeyin veya bir iş yükünü çalıştırmak için bir ilke alanını kaldırmayın. Başarılı bir ayrıştırma veya başlatma, hedeflenen her kısıtlamanın geçerli olduğuna dair bir kanıt değildir.