cedar-policy/cedar-spec
GitHub: cedar-policy/cedar-spec
Cedar规范仓库提供Cedar策略语言的形式化定义和差异测试基础设施,用于验证其Rust实现与规范的一致性。
Stars: 183 | Forks: 39
# Cedar 规范
本仓库包含 Cedar 的形式化定义以及用于在形式化定义与 [`cedar`](https://github.com/cedar-policy/cedar) 中提供的 Rust 生产实现之间进行差异化随机测试 (DRT) 的基础设施。
您可以通过以下博文了解更多关于我们的形式化工作:
* [我们如何通过自动推理和差异化测试构建 Cedar](https://www.amazon.science/blog/how-we-built-cedar-with-automated-reasoning-and-differential-testing)
* [深入验证软件开发](https://aws.amazon.com/blogs/opensource/lean-into-verified-software-development/)
## 仓库结构
* [`cedar-lean`](./cedar-lean) 包含 Cedar 的 Lean 形式化定义及相关证明。
* [`cedar-drt`](./cedar-drt) 包含 Cedar 的模糊测试、基于属性的测试和差异化测试代码。
* [`cedar-policy-generators`](./cedar-policy-generators) 包含使用 [arbitrary](https://docs.rs/arbitrary/latest/arbitrary/index.html#) crate 生成模式、实体、策略和请求的代码。
更多信息请参阅各目录中的 README。
## 构建
### Lean 形式化定义与证明
* 按照 [此处](https://leanprover.github.io/lean4/doc/setup.html) 的说明安装 Lean。
* `cd cedar-lean`
* `source ../cedar-drt/set_env_vars.sh`(仅在 AL2 上运行时需要)
* `lake update`
* `lake build Cedar`
### DRT 框架
构建我们的 DRT 框架最简单的方法是使用提供的 Dockerfile:
```
docker build . -t cedar_drt # ~10 minutes
docker run --rm -it cedar_drt
```
如果您不想使用 Docker,以下是本地构建的完整说明:
* 按照上述说明安装 Lean。
* 在当前 (`cedar-spec`) 仓库中克隆 `cedar` 仓库。
* `source cedar-drt/set_env_vars.sh`
* `cd cedar-lean && ../cedar-drt/build_lean_lib.sh`
* `cd ../cedar-drt && cargo build`
此构建仅在 **Amazon Linux 2** 上测试过。
## 运行
要运行 DRT:
* 按照上述构建说明操作。
* 如果本地运行,请执行 `source ./set_env_vars.sh`。
* `cargo fuzz run -s none `。
使用 `cargo fuzz list` 列出可用的模糊测试目标。
可用目标的描述见于 `cedar-drt` 目录中的 README。
该 README 还说明了如何调试构建失败以及如何保存 DRT 生成的测试。
其他可用命令可通过 `cargo fuzz help` 查看。
## VSCode
要在 VSCode 中使用 `cedar-drt`,首先需要配置两项设置,以便 rust analyzer 插件在尝试查找 Lean 安装时不会报错,并确保它在 `fuzz` crate 中正常工作。
将以下条目添加到您的 `.vscode/settings.json`。首先运行 `source set_env_vars.sh && echo $LEAN_LIB_DIR` 以获取 `LEAN_LIB_DIR` 的正确值。
```
{
"rust-analyzer.linkedProjects": [
"./cedar-drt/fuzz/Cargo.toml",
"./cedar/Cargo.toml",
"./cedar-lean-cli/Cargo.toml",
],
"rust-analyzer.cargo.extraEnv": {
"LEAN_LIB_DIR": <$LEAN_LIB_DIR as populated by set_env_vars.sh>
}
}
```
使用 Lean 形式化定义时的一些额外注意事项,请参阅 [cedar-lean README](./cedar-lean/README.md)。
## 安全
更多信息请参阅 [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications)。
## 许可证
本项目使用 Apache-2.0 许可证。
标签:AWS, Cedar语言, DNS解析, DPI, Lean语言, Rust语言, Streamlit, TLS抓取, 可视化界面, 属性测试, 差异随机测试, 开源项目, 形式化方法, 形式化验证, 授权策略, 测试框架, 策略语言, 自动生成, 访问控制, 请求拦截, 软件安全