#访问控制 #cedar #cedar-policy #存储 #策略 #权限

bin+lib cedar-agent

Cedar-Agent 是一个设计用于高效管理策略存储和数据存储的 HTTP 服务器。它提供了与用于将权限定义为策略的 Cedar 语言的无缝集成。

6 个版本

0.2.0 2024年5月27日
0.1.4 2024年2月5日
0.1.3 2023年8月16日
0.1.2 2023年6月28日
0.1.1 2023年5月11日

#126HTTP服务器

Download history 169/week @ 2024-05-27 8/week @ 2024-06-03 1/week @ 2024-06-10

每月332次下载

Apache-2.0

76KB
2K SLoC

Cedar Agent

Current Crates.io Version License

什么是Cedar-Agent?

Cedar-Agent 是一个设计用于高效管理策略存储和数据存储的 HTTP 服务器。它提供了与用于将权限定义为策略的 Cedar 语言的无缝集成。
使用 Cedar-Agent,您可以通过利用 Cedar 策略轻松地控制和监控对应用程序资源的访问。如果您不熟悉 Cedar,我们鼓励您访问 Cedar 网站沙盒 来了解更多信息。

阅读以下博客文章了解更多

策略存储管理

Cedar-Agent 包含一个存储库,允许您创建、检索、更新和删除策略。这些策略定义了谁可以访问您应用程序中的哪些资源。策略存储提供了一种集中和灵活的方式来管理权限,从而实现对用户访问的精细控制。
特色策略存储

  • 内存中
  • Redis

数据存储管理

除了策略存储,Cedar-Agent 还提供了一个内存数据存储。此数据存储允许您高效地存储和管理应用程序数据。通过将数据存储与 Cedar-Agent 集成,您可以根据传入的 HTTP 请求对存储的数据执行授权检查。
特色数据存储

  • 内存中
  • Redis

模式存储管理

Cedar-Agent 支持存储自定义模式,这些模式保存了您的数据类型和操作的形式。利用模式存储,您可以为应用程序中使用的所有对象创建严格的定义。Cedar-Agent 将对所有策略和数据与该模式进行验证。特色策略存储

  • 内存中
  • Redis

授权检查

Cedar-Agent 的一个关键特性是其执行存储策略和数据授权检查的能力。
通过评估Cedar策略,Cedar-Agent确保每个用户的访问仅限于他们有权访问的资源。
基于传入的HTTP请求进行授权检查,提供了一个易于使用、强大且安全的机制,用于控制对应用程序的访问。

Cedar-Agent为管理应用程序中的策略、数据和授权检查提供了一整套解决方案。凭借其与Cedar的无缝集成和强大的HTTP服务器功能,Cedar-Agent使您能够执行细粒度访问控制并有效地保护资源。

使用方法

要使用Cedar-Agent,请按照以下步骤操作

先决条件

在继续之前,请确保您已将Rust和Cargo安装在您的系统上。如果您尚未安装,可以访问官方Rust安装页面,并按照您操作系统的说明进行操作。

克隆仓库

首先,将Cedar-Agent仓库克隆到您的本地计算机上

git clone https://github.com/permitio/cedar-agent.git
cd cedar-agent

构建

要构建Cedar-Agent,请使用以下命令

cargo build

配置

Cedar Agent的配置可以通过环境变量和命令行参数来实现。

  • Cedar Agent将监听传入HTTP请求的端口号。默认为8180
    CEDAR_AGENT_PORT环境变量。
    --port-p命令行参数。
  • 使用Authorization头部强制执行的认证令牌。默认为None
    CEDAR_AGENT_AUTHENTICATION环境变量。
    --authentication-a命令行参数。
  • HTTP服务器的地址。默认为127.0.01
    CEDAR_AGENT_ADDR环境变量。
    --addr命令行参数。
  • 过滤日志的日志级别。默认为info
    CEDAR_AGENT_LOG_LEVEL环境变量。
    --log-level-l命令行参数。
  • 从json文件加载模式。默认为None
    CEDAR_AGENT_SCHEMA环境变量。 --schema-s命令行参数。
  • 从json文件加载数据。默认为None
    CEDAR_AGENT_DATA环境变量。 --data-d命令行参数。
  • 从json文件加载策略。默认为NoneCEDAR_AGENT_POLICIES环境变量。 --policies命令行参数。

当配置Cedar Agent时,命令行参数的优先级高于环境变量。

运行

有几种方法可以运行Cedar Agent

使用cargo运行

要运行Cedar-Agent,请使用以下命令

cargo run

要将任何参数添加到命令中,请将它们附加到--之后,例如

cargo run -- --port 8080

运行二进制文件

要运行二进制文件,请确保您已执行构建步骤,然后运行此命令

./target/debug/cedar-agent

要检查可以向二进制文件传递的参数,请运行

./target/debug/cedar-agent --help

使用docker运行

要执行Cedar Agent的Docker镜像,请使用以下命令:

docker run -p 8180:8180 permitio/cedar-agent

测试

要测试Cedar-Agent,请使用以下命令:

cargo test

API端点

运行Cedar-Agent后,应用程序提供了使用Rapidoc和Swagger UI的全面API文档和端点模式,您可以通过以下路径访问:

  • https://127.0.0.1:8180/rapidoc:在您的网络浏览器中访问此路径,以探索由Rapidoc工具提供的交互式API文档。它提供了每个端点的详细信息,包括它们的参数、请求体和响应结构。
  • https://127.0.0.1:8180/swagger-ui:访问此路径以与Swagger UI交互,它提供了一个用户友好的界面来浏览API端点。它展示了可用路由的视觉表示,包括它们的描述、请求和响应模式以及示例请求。

快速入门

  1. 运行Cedar Agent

  2. 使用此命令存储模式

    curl -X PUT -H "Content-Type: application/json" -d @./examples/schema.json https://127.0.0.1:8180/v1/schema
    
  3. 使用此命令存储策略

    curl -X PUT -H "Content-Type: application/json" -d @./examples/policies.json https://127.0.0.1:8180/v1/policies
    
  4. 使用此命令存储数据

    curl -X PUT -H "Content-Type: application/json" -d @./examples/data.json https://127.0.0.1:8180/v1/data
    
  5. 使用此命令执行IsAuthorized检查

    curl -X POST -H "Content-Type: application/json" -d @./examples/allowed_authorization_query.json https://127.0.0.1:8180/v1/is_authorized
    

    响应是

    {
      "decision": "Allow",
      "diagnostics": {
        "reason": [
          "admins-policy"
        ],
        "errors": []
      }
    }
    

    如您所见,用户被允许访问资源,因为策略ID admins-policy 允许。
    检查不允许访问资源的用户

    curl -X POST -H "Content-Type: application/json" -d @./examples/denied_authorization_query.json https://127.0.0.1:8180/v1/is_authorized
    

    响应是

    {
    "decision": "Deny",
    "diagnostics": {
      "reason": [],
      "errors": []
      }
    }
    

    如您所见,用户被拒绝访问资源,因为没有策略允许此请求。

有关执行请求的更多详细信息,您可以查看示例目录

使用OPAL大规模运行Cedar-agents

想要运行多个Cedar-agents并加载您所需的数据和策略?尝试OPAL。OPAL(开放策略管理层)是Cedar-Agent的姐妹项目,已成为在规模上管理策略代理(包括OPA等)的事实标准。查看OPAL文档中的Cedar+OPAL教程

社区

和我们谈谈Cedar Agent,或者一般性的授权 - 我们非常乐意听到您的意见 ❤️

您可以在我们的GitHub讨论中提出问题,要求添加功能到路线图,在GitHub问题中报告问题,加入我们的Slack社区讨论授权、开源、实时通信、技术或任何其他内容!

如果您正在使用我们的项目,请考虑给我们一个⭐️

Button

贡献

如果您遇到任何问题或对改进有建议,请在我们Cedar-Agent GitHub存储库中打开一个问题,以获得社区的帮助。

  • 欢迎拉取请求!(请确保包括通过测试和文档)
  • 在提交PR之前 - 在GitHub上打开一个问题,或者确保您的PR很好地解决了现有问题。

依赖项

~29–61MB
~1M SLoC