亚马逊云科技开源了他们用来定义策略访问权限的领域特定语言 Cedar。Cedar 已集成在 Amazon Verified Permissions 和 AWS Verified Access 中,还可以通过 SDK 和语言规范将Cedar 直接集成到应用程序中。
Cedar 可以在应用程序代码之外定义访问策略,这种分离使得它们能够独立地进行编写、分析和审计。Cedar 支持基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)。
SDK 可用于编写和验证策略和授权访问请求。Cedar 是用 Rust 编写的,但同时提供了 Rust crate 和 Java 包,可以在 Java 中使用 Cedar。
可以通过调用 Cedar 授权引擎来验证请求是否被授权。请求信息会被转换为 Cedar 请求并传给 Cedar 授权引擎。下面是在 Rust 中使用 Cedar 的示例:
pub fn is_authorized(
&self,
principal: impl AsRef<EntityUid>,
action: impl AsRef<EntityUid>,
resource: impl AsRef<EntityUid>,
) -> Result<()> {
let es = self.entities.as_entities();
let q = Request::new(
Some(principal.as_ref().clone().into()),
Some(action.as_ref().clone().into()),
Some(resource.as_ref().clone().into()),
Context::empty(),
);
info!(
"is_authorized request: principal: {}, action: {}, resource: {}",
principal.as_ref(),
action.as_ref(),
resource.as_ref()
);
let response = self.authorizer.is_authorized(&q, &self.policies, &es);
info!("Auth response: {:?}", response);
match response.decision() {
Decision::Allow => Ok(()),
Decision::Deny => Err(Error::AuthDenied(response.diagnostics().clone())),
}
}
可以使用 self.authorizer.is_authorized(&q, &self.policies, &es)self.authorizer 来调用 Cedar 授权引擎。参数包括访问请求、Cedar 策略和实体集合。访问请求包含了所需的主体、操作和资源信息。根据具体的分析结果,授权引擎将返回 Decision::Allow 或 Decision::Deny。
策略也可以通过 SDK 来创建。在下面的 Java 示例中,我们创建了一个策略,允许主体 Alice 对 Vacation 资源的子资源执行 View_Photo 操作:
private Set<Policy> buildPolicySlice() {
Set<Policy> ps = new HashSet<>();
String fullPolicy = "permit(principal == User::\"Alice\", action == Action::\"View_Photo\", resource in Album::\"Vacation\");";
ps.add(new Policy(fullPolicy, "p1"));
return ps;
}
在 Java 中,可以调用 isAuthorized 方法来查询授权情况:
public boolean sampleMethod() throws AuthException {
AuthorizationEngine ae = new WrapperAuthorizationEngine();
AuthorizationQuery q = new AuthorizationQuery("User::\"Alice\"", "Action::\"View_Photo\"", "Photo::\"pic01\"");
return ae.isAuthorized(q, buildSlice()).isAllowed();
}
在亚马逊云科技宣布开源 Cedar 之后,Permit.io 发布了 Cedar-Agent,一个 HTTP 服务器,作为基于 Cedar 的策略的策略存储和数据存储。策略存储支持创建、检索、更新和删除策略,数据存储支持在内存中存储应用程序数据。Cedar-Agent 可以针对存储的数据执行授权检查,这些检查可以基于传入的请求进行。
HackerNews 上的一位用户 dadadad100 评论说,他们看到 Cedar 可能填补了应用程序授权领域的空白:
Cedar 介于 OPA(基于数据的搜索方法)和 Zanzibar 之间。目前还不清楚哪一方会胜出,但不管怎样,现在这个问题开始引起人们的关注了。
其他用户,如 Oxbadcafebee,对亚马逊云科技没有为 Open Policy Agent 提供支持表示失望。
Cedar 采用了 Apache License 2.0,托管在 GitHub 上。更多细节可以在最近的亚马逊云科技的博客中找到,或者加入 Cedar Policy Slack 频道。
原文链接:
https://www.infoq.com/news/2023/06/aws-cedar-open-source/
相关阅读:
亚马逊云科技 Lambda 引入响应有效负载流 (https://www.infoq.cn/article/YgsLlr5LXF1yvoZfkm2i )
从微服务转为单体架构、成本降低 90%,亚马逊内部案例引发轰动!CTO:莫慌,要持开放心态 (https://www.infoq.cn/article/NU2Y3XiazG1cqiaNoXXa )
声明:本文为 InfoQ 翻译,未经许可禁止转载。
点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!
红帽对 RHEL 下游造成毁灭性打击!停止公开企业版源代码,要挤占开源份额实现盈利?
AI之下没有秘密:网友诱骗ChatGPT激活 Windows 11,ChatGPT落入陷阱!
文章引用微信公众号"InfoQ",如有侵权,请联系管理员删除!