WASI
WebAssembly系统接口(WASI)是一个WebAssembly标准,提供一组接口,允许在浏览器外执行WebAssembly。
|
编写常规策略的作者不应使用普通的WASI系统接口来编写策略。 此页面适用于SUSE Security Admission Controller维护者或希望在前沿WASM平台上进行实验的低级策略作者。 |
使用WASI,您可以拥有一个与系统原语交互的WebAssembly模块,如STDOUT、STDERR、STDIN、环境变量等。
许多用于编译Admission Controller策略的编译器生成针对WASI接口的WebAssembly模块。
然而,Admission Controller策略使用waPC项目在策略与策略运行时(kwctl`或`policy-server)之间实现双向通信。Admission Controller通信协议的使用在这里进行了描述。
在某些特殊情况下,waPC项目尚不可用。 在这些情况下,您可以使用WASI提供的接口编写策略。
|
Admission Controller支持从Admission Controller 1.7.0版本开始的WASI策略。 |
使用案例
通信协议
本节描述如何编写一个普通的WASI策略。
您需要将代码编写为常规CLI程序。 该程序必须接受以下子命令:
-
validate:此命令由策略引擎调用以评估入场请求。 -
validate-settings:此命令由策略引擎调用以验证策略设置。
在这两种情况下,要验证的数据通过STDIN提供。 策略必须通过STDOUT提供答案。 您可以使用STDERR进行调试或错误消息。
Validation
请求的验证发生在使用`validate`子命令调用策略CLI程序时。
STDIN必须包含描述`ValidationRequest`对象的JSON文档。 策略必须向STDOUT写入包含`ValidationResponse`对象的JSON文档。
`ValidationRequest`和`ValidationResponse`对象的描述见这里。
上下文感知
目前仅通过Go SDK支持。Go SDK像往常一样公开上下文感知能力,更多信息请见这里。
作为WASI Go上下文感知策略的示例,请参见go-wasi-context-aware-test-policy。
设置验证
该策略必须提供一个名为`validate-settings`的子命令。 该命令用于验证用户提供的设置。
程序必须在STDIN接收一个包含用户提供的设置的JSON对象。 然后它验证这些设置并向STDOUT写入一个`SettingsValidationResponse`对象。
`SettingsValidationResponse`的格式和设置验证过程的描述见这里。
模板项目
这个 GitHub 储存库 包含一个基于 Go 的使用 WASI 协议的策略模板。