Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
- SDK'nızın çalışma zamanı keşfini kullanın ve seçilen backend'in önkoşullarını denetleyin.
- Yapılandırmayı oluşturun ve ilkeyi zayıflatmadan ilke doğrulama veya arka ucun kullanılamamasıyla ilgili hataları işleyin.
- İş yükünün kullanması gereken kaynaklarla temsili başarılı örnek senaryoları çalıştırın.
- 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.
- 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.
- 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.
İlgili içerik
Windows developer