Amazon 已验证权限升级到 Cedar 4 常见问题解答 - Amazon Verified Permissions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon 已验证权限升级到 Cedar 4 常见问题解答

Amazon Verified Permissions 正在将其使用的 Cedar 版本从版本 2 升级到版本 4。Cedar 是您用来在策略存储库中编写策略、策略模板和架构的开源语言。借助已验证权限中的 Cedar 4 支持,您可以使用is操作员和实体标签等新功能来编写更具表现力的策略。

Amazon 已验证权限会自动将策略存储升级到 Cedar 4。但是,为Cedar 2编写的某些策略、架构和授权请求与Cedar 4不兼容。如果您的保单存储是这种情况,那么我们不会自动对其进行升级。在升级到 Cedar 4 之前,您可能需要对策略、策略模板、架构或应用程序代码进行更改。

为什么有些策略、策略模板和架构与 Cedar 4 不兼容?

自Cedar 2以来,Cedar团队已经进行了几项不向后兼容的更改,以修复错误并简化语言。这些更改包括:

  • 策略、策略模板和架构的语法更改

  • 更精确的策略验证器,可以检测到更多错误

  • 更改内置函数的行为,例如 isInRange

有关向后不兼容的更改的完整列表,请查找 Cedar 变更日志(*)中标有标注的项目。

如何判断我的保单商店使用的是 Cedar 2 还是 Cedar 4?

您可以使用 Amazon Verified Permissions 控制台或使用GetPolicyStore操作来查看您的策略商店使用的 Cedar 版本。

注意

同一地区的所有保单商店都使用相同 Amazon Web Services 账户 版本的 Cedar。

Console
查看策略存储库的 Cedar 版本(控制台)
  1. 登录 Amazon Web Services Management Console 并打开 Amazon 验证权限控制台,网址为https://console.aws.amazon.com/verifiedpermissions/

  2. 在导航窗格中,选择策略存储,然后选择要检查的策略存储。

  3. 在导航窗格中,选择设置

  4. 在 “详细信息” 框中,找到 Cedar 版本字段。

该字段显示您的策略存储CEDAR_2是否使用 Cedar 2,CEDAR_4是否使用 Cedar 4。

CLI
查看策略库的 Cedar 版本 (Amazon CLI)
  1. 安装并配置 Amazon Command Line Interface (Amazon CLI)(如果尚未安装)。有关更多信息,请参阅安装或更新 Amazon CLI的最新版本

  2. 使用 get-policy-store 命令。在以下示例中,policy-store-id使用您的策略存储库的标识符替换:

    aws verifiedpermissions get-policy-store \ --policy-store-id policy-store-id

输出中的cedarVersion字段显示策略存储正在使用哪个版本的 Cedar。例如:

{ "policyStoreId": "ABCDEFG12345678abcdefg", "arn": "arn:aws:verifiedpermissions::111122223333:policy-store/ABCDEFG12345678abcdefg", "validationSettings": { "mode": "STRICT" }, "createdDate": "2025-06-03T13:09:47.752255+00:00", "lastUpdatedDate": "2025-06-03T13:09:47.752255+00:00", "deletionProtection": "ENABLED", "cedarVersion": "CEDAR_2" }

该字段显示您的策略存储CEDAR_2是否使用 Cedar 2,CEDAR_4是否使用 Cedar 4。

如何升级到 Cedar 4?

亚马逊验证权限已将大多数客户升级到 Cedar 4。如果您从未创建过策略存储,那么您创建的任何新策略存储都将使用 Cedar 4。如果您是现有客户,那么我们可能已经将您升级到 Cedar 4。查看 如何判断我的保单商店使用的是 Cedar 2 还是 Cedar 4? 您的保单商店使用的是哪个版本的 Cedar。

如果您尚未升级,则验证权限会在您的一个策略存储中检测到与 Cedar 4 不兼容的策略、策略模板、架构或授权请求。我们将在 2025 年晚些时候向您发送一封电子邮件通知,说明哪些资源不兼容。要更快地升级,请使用开箱 Amazon Web Services 支持。

重要

同一个保单存储库 Amazon Web Services 账户 使用相同版本的 Cedar。如果您账户中的一个保单存储与 Cedar 4 不兼容,则您不能在该账户的任何保单存储区中使用 Cedar 4。

我可以将我的保单商店从 Cedar 4 降级到 Cedar 2 吗?

不是。 如果您在保单商店升级到 Cedar 4 后遇到问题,请使用打开案例 Amazon Web Services 支持。

为什么我收到一条错误消息,说我的策略存储已配置为 Cedar 2?

Amazon 验证权限的某些功能依赖于 Cedar 4 中的新功能。如果您的政策存储库不使用 Cedar 4,则无法使用以下 API 字段:

  • 在IsAuthorizedBatchIsAuthorized、IsAuthorizedWithToken和BatchIsAuthorizedWithToken操作中:

    • datetimedecimal或者attributescontext字段中的duration

在升级策略存储之前,您不能在 Cedar 2 之后引入的策略、策略模板或架构中使用语法或数据类型。

如何使我的架构与 Cedar 4 兼容?

已验证权限控制台可以自动修复架构中的一些兼容性问题。如果您的架构无法自动修复,控制台将显示错误列表供您手动修复。

重要

即使您的策略存储使用 Cedar 2,Amazon 验证权限控制台中的代码编辑器也始终显示来自 Cedar 4 的错误和警告。您可以使用保存更改按钮或已验证权限 API 继续进行与 Cedar 4 不兼容的架构更新。

使用控制台修复架构
  1. 登录 Amazon Web Services Management Console 并通过 verif iedPermissions 打开亚马逊验证权限控制台。

  2. 在导航窗格中,选择策略存储,然后选择要检查的策略存储。

  3. 在导航窗格中选择 “架构”。

  4. 如果你的架构可以自动修复,你会看到一个标语,上面写着 “点击'修复'预览兼容版本”。选择 “修复”。

  5. 查看对架构所做的更改,然后单击 “预览更新的架构”。

  6. 查看更新的架构,然后单击 “保存更改”。

如果您的架构无法自动修复,则可以在控制台中看到需要自行修复的错误列表。

  1. 如上所述,打开 “编辑架构” 页面。

  2. 选择 JSON 模式

  3. 将鼠标悬停在代码编辑器左侧边框中的红色错误图标上。错误消息显示在工具提示中。

以下是您可能遇到的一些常见错误以及如何解决这些错误:

无法从 JSON 解析架构:`field-name

使用 Cedar 2,您可以在架构的某些部分(例如类型定义)中包含任意字段,即使它们作为 Cedar 架构的一部分没有任何意义。在 Cedar 4 中,不再允许这样做。要解决此错误,请field-name从 JSON 架构中移除名为的字段。有关有效架构字段的列表,请参阅 Cedar 文档

未知的扩展类型 `extension-name`

在 Cedar 2 中,当你声明的属性type为时Extension,你可以为该name字段指定任何值,无论该值是否为有效的扩展类型名称。现在,这是 Cedar 4 的错误。要解决此问题,请extension-name替换为有效的扩展类型名称。您可以在 C edar 文档中找到有效的扩展类型名称列表。

如果您仍然不确定如何解决架构中的错误,请联系 Amazon Web Services 支持

如何使我的保单和模板与 Cedar 4 兼容?

已验证权限控制台会显示您的策略或模板中存在的任何导致其与 Cedar 4 不兼容的错误。

在控制台中查看策略或模板的错误
  1. 登录 Amazon Web Services Management Console 并通过 verif iedPermissions 打开亚马逊验证权限控制台。

  2. 在导航窗格中,选择策略存储,然后选择要检查的策略存储。

  3. 根据需要在导航窗格中选择策略或策略模板

  4. 选择不兼容的策略或模板。

  5. 选择 “编辑”

  6. 将鼠标悬停在代码编辑器左侧边框中的红色错误图标上。错误消息显示在工具提示中。

以下是您可能遇到的一些常见错误以及如何解决这些错误:

策略中禁止使用空集文字

在 Cedar 2 中,你可以使用语法mySet == []来检查集合是否为空。在 Cedar 4 中,使用此语法的策略不再针对架构进行验证。mySet == []在您的保单中替换为mySet.isEmpty()