Fluxheim/เอกสาร/ส่วนขยาย WASM

ส่วนขยาย WASM

รุ่น Wasm โดยเฉพาะซึ่งสร้างจากโปรไฟล์สำหรับการผลิตแบบเต็ม พร้อมจุดเชื่อมนโยบายที่จำกัดขอบเขต ACME เมตริก และ OpenTelemetry

สิ่งที่ได้

รุ่น Wasm โดยเฉพาะซึ่งสร้างจากโปรไฟล์สำหรับการผลิตแบบเต็ม พร้อมจุดเชื่อมนโยบายที่จำกัดขอบเขต ACME เมตริก และ OpenTelemetry.

ฟีเจอร์ใช้สำหรับ
การตัดสินใจเข้าถึงLive native HTTP/1 access-decision hooks ใช้ priority ordering, first-deny-wins composition และ fail-closed behavior
ฮุกส่วนหัวrequest-headers และ response-headers hooks ตั้งหรือลบได้เฉพาะ synthetic headers ที่อยู่ใน allow-list เช่นตัวอย่าง policy-tier
การตัดสินใจเส้นทางroute-decision hook ทำได้เฉพาะดำเนินต่อ ปฏิเสธ หรือเลือกกิ่ง route canary และ mirror ที่กำหนดไว้และตรงกัน
การตัดสินใจ cachecache-lookup hook สามารถ continue, pass, bypass หรือ deny ได้ ส่วน cache-store hook สามารถ continue, skip storage หรือ deny ก่อนเขียนลง memory/disk cache ได้

รัน

ใช้อาร์ไคฟ์หรืออิมเมจ profile-wasm โดยเฉพาะ รุ่นเต็มตามปกติจะไม่มี Wasm โดยเจตนา

อิมเมจ Wasm อย่างเป็นทางการมีรันไทม์แต่ไม่มีปลั๊กอินของผู้ดูแลระบบ เมานต์เฉพาะโมดูลที่ผ่านการตรวจสอบแล้วแบบอ่านอย่างเดียว และตรึงทุกโมดูลด้วย SHA-256

podman pull ghcr.io/valkyoth/fluxheim:v1.8.0-wasm

podman run --rm \
  -v ./fluxheim.toml:/etc/fluxheim/fluxheim.toml:ro,Z \
  -v /srv/infra/fluxheim/plugins:/etc/fluxheim/plugins:ro,Z \
  ghcr.io/valkyoth/fluxheim:v1.8.0-wasm

รากปลั๊กอินที่อนุมัติ

ไฟล์ปลั๊กอินต้องเป็นไฟล์ปกติแบบ absolute path อยู่ใต้ root ที่อนุมัติ และไม่มี symlink หรือ parent path

[wasm]
enabled = true
plugin_roots = ["/etc/fluxheim/plugins"]
max_total_concurrent_executions = 256
max_total_preview_concurrent_executions = 32
max_total_cache_concurrent_executions = 256

[[wasm.plugins]]
name = "security_headers"
path = "/etc/fluxheim/plugins/security_headers.wasm"
sha256 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
abi = "fluxheim-policy-v1"
host_call_namespace = "fluxheim-policy-v1"
phases = ["response-headers"]
fail_mode = "fail-closed"

[[wasm.attachments]]
plugin = "security_headers"
vhost = "example"
priority = 100
phases = ["response-headers"]

การรันแบบจำกัด

ขีดจำกัดของ fuel, memory, table, instance, compile-timeout, compile-worker และ watchdog ต่อการเรียก ช่วยจำกัดขอบเขตของ sandbox

[wasm.plugins.limits]
max_module_bytes = "1MiB"
max_compiled_artifact_bytes = "32MiB"
max_memory_bytes = "16MiB"
max_table_elements = 10000
fuel = 5000000
timeout_ms = 50
compile_timeout_ms = 500

หมายเหตุสำหรับโปรดักชัน

การเมานต์คอนเทนเนอร์แบบอ่านอย่างเดียวไม่ได้ปกป้องไฟล์บนโฮสต์ ให้เก็บการกำหนดค่าโฮสต์และไดเรกทอรีปลั๊กอินไว้ภายใต้เจ้าของที่เชื่อถือได้และไม่มีสิทธิ์เขียน

  • ไฟล์ manifest สาธารณะต้องระบุค่า SHA-256 ที่ตรึงไว้ การคอมไพล์พร้อมกันทั้งโปรเซสทำได้สูงสุดสองงาน และผลลัพธ์ที่คอมไพล์มีขีดจำกัดเริ่มต้น 32 MiB กับขีดจำกัดสูงสุด 256 MiB
  • เก็บ config file และ parent directory ทุกชั้นที่มีอยู่ภายใต้ ownership ที่เชื่อถือได้ และไม่อนุญาตให้ group หรือ user อื่นเขียนได้
  • ปักหมุดเวอร์ชันวางจำหน่ายหรือสรุปรูปภาพ
  • เก็บ secrets ไว้ในไฟล์ environment หรือ container secrets ไม่ใช่ใน public docs

Full docs on GitHub

ไทย