cedar-policy/cedar

GitHub: cedar-policy/cedar

Cedar 是一种专为应用程序授权设计的策略语言,通过分离策略代码来简化细粒度访问控制的管理和审计。

Stars: 1529 | Forks: 155

# ook at the input: "Cedar" – it's capitalized, which often indicates a proper noun. In the examples, "Naabu" and "Kubernetes" are capitalized, and they are kept in English. ![Cedar Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e03cfb8129222336.svg) [![Crates.io](https://img.shields.io/crates/v/cedar-policy.svg)](https://crates.io/crates/cedar-policy) [![docs.rs](https://img.shields.io/docsrs/cedar-policy)](https://docs.rs/cedar-policy/latest/cedar_policy/) ![nightly](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/72ec464534222337.svg) ![nightly-deps](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/51db90a20e222338.svg) ![audit](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/5b0f57d798222339.svg) [![OpenSSF 最佳实践](https://www.bestpractices.dev/projects/11398/badge)](https://www.bestpractices.dev/projects/11398) 此代码库包含实现 [Cedar](https://www.cedarpolicy.com/) 策略语言的 Rust crate 源代码。 Cedar 是一种用于在你的应用程序中编写和强制执行授权策略的语言。使用 Cedar,你可以编写指定应用程序细粒度权限的策略。随后,你的应用程序通过调用 Cedar 的授权引擎来授权访问请求。由于 Cedar 策略与应用代码分离,它们可以被独立编写、更新、分析和审计。你可以使用 Cedar 的验证器来检查 Cedar 策略是否与定义你应用程序授权模型的声明模式一致。 Cedar 是: ### 表达性强 Cedar 是一种简洁而富有表现力的语言,专门为支持常见的授权模型(如 RBAC 和 ABAC)的授权用例而构建。 ### 高性能 Cedar 快速且可扩展。策略结构设计为可索引以快速检索,并支持快速、可扩展的实时评估,具有受控的延迟。 ### 可分析 Cedar 设计为可使用自动化推理进行分析。这使得分析器工具能够优化你的策略,并证明你的安全模型确实如你所想。 ## 使用 Cedar 你可以通过依赖 [`cedar-policy` crate](https://crates.io/crates/cedar-policy) 在应用程序中使用 Cedar。 只需运行以下命令添加 `cedar-policy` 作为依赖项: ``` cargo add cedar-policy ``` ## 本工作区中的 Crate * [cedar-policy](./cedar-policy):用于在应用程序中使用 Cedar 授权访问请求、以及根据模式验证 Cedar 策略的主 crate。 * [cedar-policy-symcc](./cedar-policy-symcc):包含 Cedar 符号编译器的 crate,可通过具体反例验证你的 Cedar 策略的属性。 * [cedar-policy-cli](./cedar-policy-cli):包含一个用于与 Cedar 交互的简单命令行界面 (CLI) 的 crate。 * [cedar-language-server](./cedar-language-server):包含 Cedar 语言服务器的实现。 * [cedar-wasm](./cedar-wasm):定义 Cedar 的 wasm 接口的 crate,支持在 JavaScript 和 TypeScript 中使用。 * [cedar-policy-core](./cedar-policy-core):包含 Cedar 解析器、评估器、类型检查器和其他核心组件的内部 crate。 * [cedar-policy-formatter](./cedar-policy-formatter):包含 Cedar 策略自动格式化程序的内部 crate。 * [cedar-testing](./cedar-testing):包含集成测试代码的内部 crate。 ## 快速入门 我们将策略放在 `policy.cedar`,实体放在 `entities.json`。 `policy.cedar`: ``` permit ( principal == User::"alice", action == Action::"view", resource in Album::"jane_vacation" ); ``` 此策略指定 `alice` 被允许查看 `"jane_vacation"` 相册中的照片。 `entities.json`: ``` [ { "uid": { "type": "User", "id": "alice"} , "attrs": {"age": 18}, "parents": [] }, { "uid": { "type": "Photo", "id": "VacationPhoto94.jpg"}, "attrs": {}, "parents": [{ "type": "Album", "id": "jane_vacation" }] }, { "uid": { "type": "Photo", "id": "SecretPhoto94.jpg"}, "attrs": {}, "parents": [{ "type": "Album", "id": "jane_secrets" }] } ] ``` Cedar 将主体、资源和操作表示为实体。实体具有类型(例如 `User`)和 ID(例如 `alice`)。它们也可以具有属性(例如 `User::"alice"` 的 `age` 属性是整数 `18`)。 现在,让我们用 CLI 测试我们的策略: ``` cargo run --bin cedar authorize \ --policies policy.cedar \ --entities entities.json \ --principal 'User::"alice"' \ --action 'Action::"view"' \ --resource 'Photo::"VacationPhoto94.jpg"' ``` CLI 输出: ``` ALLOW ``` 此请求被允许,因为 `VacationPhoto94.jpg` 属于 `Album::"jane_vacation"`,而 `alice` 可以查看 `Album::"jane_vacation"` 中的照片。 让我们用一张 `alice` 不应有权访问的照片再次测试策略: ``` cargo run --bin cedar authorize \ --policies policy.cedar \ --entities entities.json \ --principal 'User::"alice"' \ --action 'Action::"view"' \ --resource 'Photo::"SecretPhoto94.jpg"' ``` CLI 输出: ``` DENY ``` 此请求被拒绝,因为 `SecretPhoto94.jpg` 属于 `Album::"jane_secrets"`,而 `alice` 没有查看此相册照片的明确权限。 如果你想查看更多关于哪些内容可以表示为 Cedar 策略的详细信息,请参阅[文档](https://docs.cedarpolicy.com)。 在 [cedar-examples](https://github.com/cedar-policy/cedar-examples) 代码库中包含了如何在应用程序中使用 Cedar 的示例。[TinyTodo](https://github.com/cedar-policy/cedar-examples/tree/main/tinytodo) 是一个简单的任务列表管理应用,其用户请求(作为 HTTP 消息发送)由 Cedar 授权。它展示了如何将 Cedar 集成到你自己的 Rust 程序中。 ## 文档 Cedar 的通用文档可在 [docs.cedarpolicy.com](https://docs.cedarpolicy.com) 获取,源代码位于 [cedar-policy/cedar-docs](https://github.com/cedar-policy/cedar-docs/) 代码库。 最新版本 Rust crate 的生成文档可通过以下方式访问: [docs.rs](https://docs.rs/cedar-policy)。 如果你打算将 Cedar 集成到生产系统中,请务必阅读[安全最佳实践](https://docs.cedarpolicy.com/other/security.html)。 ## 构建 要构建,只需运行 `cargo build`(或 `cargo build --release`)。 ## 新动态 我们为我们的公共 crate 维护更新日志: [cedar-policy](https://github.com/cedar-policy/cedar/blob/main/cedar-policy/CHANGELOG.md) 和 [cedar-policy-cli](https://github.com/cedar-policy/cedar/blob/main/cedar-policy-cli/CHANGELOG.md)。 所有发布分支和 `main` 分支的更新日志都维护在 此代码库的 `main` 分支上;你可以通过上面的链接查看最新的更新日志。 要查看当前和过去的发布列表,请参阅 [crates.io](https://crates.io/crates/cedar-policy) 或 [发布](https://github.com/cedar-policy/cedar/releases)。 ## 向后兼容性考虑 Cedar 使用 Rust 编写,你通常会通过 Cargo 依赖 Cedar。Cargo 对大多数项目做出了合理的选择,但你的需求可能不同。如果你不希望 Cedar 自动更新,可以在 `Cargo.toml` 中固定到特定版本。例如: ``` [dependencies] cedar-policy = "=2.4.2" ``` 请注意,这与以下写法不同: ``` [dependencies] cedar-policy = "2.4.2" ``` 后者表示 2.4.2 是你接受的 Cedar 最低版本,并且你隐式接受任何语义化版本兼容的更新版本。参见 。 ## 安全 更多信息请参阅 [SECURITY](SECURITY.md)。 ## 贡献 我们欢迎社区的贡献。请提交一个 issue,或参阅 [CONTRIBUTING](CONTRIBUTING.md)。 ## 许可证 本项目根据 Apache-2.0 许可证授权。
标签:ABAC, AI工具, Homebrew安装, RBAC, RDFlib, Rust, Streamlit, 可分析性, 可视化界面, 威胁狩猎, 安全策略, 实时授权, 授权策略, 提示词设计, 架构验证, 策略引擎, 策略语言, 策略验证, 细粒度权限, 网络安全挑战, 网络流量审计, 自动推理, 访问控制, 通知系统