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.

[](https://crates.io/crates/cedar-policy)
[](https://docs.rs/cedar-policy/latest/cedar_policy/)



[](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, 可分析性, 可视化界面, 威胁狩猎, 安全策略, 实时授权, 授权策略, 提示词设计, 架构验证, 策略引擎, 策略语言, 策略验证, 细粒度权限, 网络安全挑战, 网络流量审计, 自动推理, 访问控制, 通知系统