Verified Permissions 和 Cedar 之间的区别 - Amazon Verified Permissions

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Verified Permissions 和 Cedar 之间的区别

Amazon Verified Permissions 使用 Cedar 策略语言引擎来执行其授权任务。但是,原生 Cedar 实现与 Verified Permissions 中的 Cedar 实现之间存在一些差异。本主题揭示了二者之间存在的差异。

命名空间定义

Verified Permissions 的 Cedar 实现与原生 Cedar 实现存在以下区别:

策略模板支持

Verified Permissions 和 Cedar 都只允许 principalresource 范围内的占位符。但是,Verified Permissions 还要求 principalresource 均不能不受限制。

以下策略在 Cedar 中有效,但由于 principal 不受限制,会被 Verified Permissions 拒绝。

permit(principal, action == Action::"view", resource == ?resource);

以下两个示例在 Cedar 和 Verified Permissions 中均有效,因为 principalresource 都存在限制条件。

permit(principal == User::"alice", action == Action::"view", resource == ?resource);
permit(principal == ?principal, action == Action::"a", resource in ?resource);

架构支持

Verified Permissions 要求所有架构 JSON 键名称均为非空字符串。在某些情况下,Cedar 允许使用空字符串,例如用于属性。

扩展类型支持

Verified Permissions 支持策略中的 Cedar 扩展类型,但目前不支持将其包含在架构定义中或作为 IsAuthorizedIsAuthorizedWithToken 操作的 entities 参数的一部分。

扩展类型包括定点(decimal)和 IP 地址(ipaddr)数据类型。

实体的 Cedar JSON 格式

目前,Verified Permissions 要求您使用为 EntitiesDefinitionEntityItem 元素的数组)定义的结构传递要在授权请求考虑的实体列表。Verified Permissions 目前不支持以 Cedar JSON 格式传递要在授权请求中考虑的实体列表。有关格式化实体以用于 Verified Permissions 的具体要求,请参阅 Amazon Verified Permissions 中的实体格式设置

操作组定义

Cedar 授权方法要求提供实体列表,在对策略进行授权请求评估时需要考虑这些实体。

您可以在架构中定义应用程序使用的操作和操作组。但是,Cedar 不将架构作为评估请求的一部分,仅使用架构来验证您提交的策略和策略模板。由于 Cedar 在评估请求期间不会引用架构,因此,即使在架构中定义了操作组,您也需要将所有操作组的列表包含在必须传递给授权 API 操作的实体列表中。

Verified Permissions 可以为您执行此操作。您在架构中定义的所有操作组都会自动附加到您传递至的实体列表中,作为 IsAuthorizedIsAuthorizedWithToken 操作的参数。

长度和大小限制

Verified Permissions 支持以策略存储的形式存储您的架构、策略和策略模板。这种存储方式会导致 Verified Permissions 施加一些与 Cedar 无关的长度和大小限制。

对象 Verified Permissions 限制(以字节为单位) Cedar 极限
策略大小¹ 10000
内联策略描述 150 不适用于 Cedar
策略模板大小 10000
架构大小 10000
实体类型 200
策略 ID 64
策略模板 ID 64
实体 ID 200
策略存储 ID 64 不适用于 Cedar

¹ Verified Permissions 中的每个策略存储都有策略限制,具体取决于策略存储中创建的策略的主体、操作和资源的总组合大小。与单个资源相关的所有策略的总大小不能超过 200000 字节。在计算模板链接策略的大小时,策略模板的大小仅计算一次,再加上用于实例化每个模板链接策略的每组参数的大小。