#访问控制 #策略 #安全策略 #cedar #授权 #安全

cedar-policy

Cedar 是一种定义权限策略的语言,它描述了谁应该有权访问什么

30 个稳定版本

3.3.0 2024 年 8 月 19 日
3.2.1 2024 年 5 月 31 日
3.1.2 2024 年 3 月 29 日
3.0.1 2023 年 12 月 21 日
2.3.1 2023 年 7 月 20 日

#6 in 配置

Download history 9533/week @ 2024-05-02 8875/week @ 2024-05-09 8002/week @ 2024-05-16 8494/week @ 2024-05-23 8629/week @ 2024-05-30 8186/week @ 2024-06-06 9308/week @ 2024-06-13 7638/week @ 2024-06-20 8003/week @ 2024-06-27 8621/week @ 2024-07-04 9473/week @ 2024-07-11 10719/week @ 2024-07-18 11250/week @ 2024-07-25 11701/week @ 2024-08-01 12485/week @ 2024-08-08 13027/week @ 2024-08-15

50,776 下载/月
65 个 Crates 中使用 (12 个直接使用)

Apache-2.0

3MB
70K SLoC

Cedar-Policy

Cedar Logo

Cedar 是一种定义权限策略的语言,它描述了谁应该有权访问什么。它也是一种评估这些策略的规范。使用 Cedar 策略来控制应用程序的每个用户可以做什么以及他们可以访问哪些资源。

使用 Cedar

Cedar 可以通过依赖 cedar-policy crate 在您的应用程序中使用。

只需运行以下命令将 cedar-policy 添加为依赖项

cargo add cedar-policy

快速入门

让我们编写一个超级简单的 Cedar 策略并进行测试

permit(principal == User::"alice", action == Action::"view", resource == File::"93");

此策略恰好允许一个授权请求,alice 被允许 view 文件 93。任何其他授权请求都将被隐式拒绝。让我们将此策略嵌入 Rust 并使用 Cedar Authorizer

use cedar_policy::*;

fn main() {
    const POLICY_SRC: &str = r#"
permit(principal == User::"alice", action == Action::"view", resource == File::"93");
"#;
    let policy: PolicySet = POLICY_SRC.parse().unwrap();

    let action = r#"Action::"view""#.parse().unwrap();
    let alice = r#"User::"alice""#.parse().unwrap();
    let file = r#"File::"93""#.parse().unwrap();
    let request = Request::new(Some(alice), Some(action), Some(file), Context::empty(), None).unwrap();

    let entities = Entities::empty();
    let authorizer = Authorizer::new();
    let answer = authorizer.is_authorized(&request, &policy, &entities);

    // Should output `Allow`
    println!("{:?}", answer.decision());

    let action = r#"Action::"view""#.parse().unwrap();
    let bob = r#"User::"bob""#.parse().unwrap();
    let file = r#"File::"93""#.parse().unwrap();
    let request = Request::new(Some(bob), Some(action), Some(file), Context::empty(), None).unwrap();

    let answer = authorizer.is_authorized(&request, &policy, &entities);

    // Should output `Deny`
    println!("{:?}", answer.decision());
}

如果您想了解更多关于可以作为 Cedar 策略表达的内容的详细信息,请参阅 文档

如何在应用程序中使用 Cedar 的示例包含在 cedar-examples 仓库中。其中最全面的是 TinyTodo,这是一个简单的待办事项列表管理服务,其用户请求(以 HTTP 消息的形式发送)由 Cedar 进行授权。

文档

Cedar 的一般文档可在 docs.cedarpolicy.com 找到,源代码在 cedar-policy/cedar-docs 仓库中。

最新版本的 Rust Crates 的生成文档可在 docs.rs 上访问。

如果您想将Cedar集成到生产系统中,请务必阅读安全最佳实践

构建

要构建,只需运行cargo build(或cargo build --release)。

新增功能

所有发布分支以及此存储库的main分支的变更日志都维护在main分支上;此crate的最新变更日志在这里:这里

要查看当前和过去发布的列表,请参阅crates.io发布

安全

请参阅SECURITY

贡献

我们欢迎社区贡献。请提交一个问题,或参阅贡献指南

许可证

本项目采用Apache-2.0许可证。

依赖项

~8–21MB
~273K SLoC