View a markdown version of this page

每个资源的策略大小 - Amazon Verified Permissions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

每个资源的策略大小

经过验证的权限限制了引用相同资源的所有策略的总大小。此限制是每个资源配额的策略大小,其默认值为 200,000 字节。当您致电CreatePolicy或时UpdatePolicy,已验证权限会计算引用资源的新总数。如果新的总数超过配额,则请求将失败并显示ServiceQuotaExceededException。

未指定资源的策略适用于所有资源。这些策略共享"unspecified"资源的单独总额,仅限于相同的配额值。

有关所有已验证权限配额的列表,请参阅Amazon Verified Permissions 的配额。

如何计算策略规模

每项政策对资源总额的贡献如下:

  • 静态策略 -静态策略提供其全部规模。这与根据策略大小配额衡量的值相同。

  • Template-linked 策略 — 模板关联的策略贡献了用于实例化该策略的主体和资源的总长度。如果您未指定主体或资源,则其长度将计为 0。策略模板正文本身的大小不计入此配额。

每项策略还会增加固定开销,最高可达几百字节。 Template-linked 策略比静态策略增加更多的开销。

保持在配额范围内

如果您的应用程序接近每个资源配额的策略大小,请考虑以下策略:

  • 使用适当的策略类型。如果许多策略对同一个资源授予相似的权限,则策略模板可能会减少策略存储的存储消耗。每个与模板关联的策略仅存储其主体和资源。策略模板将共享语句存储一次,但每个关联策略也会带来固定的存储开销。只有当共享语句足够大以抵消开销(大约 200 字节或更多)时,模板才会自行付费。低于该阈值时,单个静态策略消耗的空间更少。有关更多信息,请参阅 Amazon 已验证权限策略模板和模板关联政策。

  • 指定策略范围内的委托人和资源。未指定资源的策略在策略存储库中共享该"unspecified"资源的单一总数。将每个策略的范围限定为特定资源会将您的策略分散到不同的总数,每种资源对应一个总数。

  • 对您的校长和资源进行分组。与其为每个委托人编写策略,不如为群组编写策略并将委托人添加到群组。将资源分组到容器中同样可以减少引用单一资源的策略的数量。

  • 请求提高限额。如果您的策略设计满足某些限制,您可以申请增加此配额。要获得资格,您的保单必须指定保单范围内的委托人或资源。增加还可能会减少您的校长和资源可以拥有的等级制度父母的数量。即使增加了配额,200,000 字节的子限制仍然适用于引用相同主体和相同资源的策略。您不能申请提高此次级限额。

Template-linked 策略大小示例

要了解模板关联策略如何影响每个资源配额的策略规模,请将委托人的长度和资源的长度相加。如果您未指定资源,则经过验证的权限会将其大小计入"unspecified"资源总量。

查看以下模板:

permit ( principal in ?principal, action in [MyApplication::Action::"ContentManagement", MyApplication::Action::"AccountAdministration", MyApplication::Action::"BillingOperations"], resource in ?resource ) when { resource has authorizedTenantIds && principal has tenantId && resource.authorizedTenantIds.contains(principal.tenantId) };

根据该模板创建以下策略:

TemplateLinkedPolicy { policyId: "policy1", templateId: "template1", principal: User::"alice", resource: Photo::"car.jpg" } TemplateLinkedPolicy { policyId: "policy2", templateId: "template1", principal: User::"bob", resource: Photo::"boat.jpg" } TemplateLinkedPolicy { policyId: "policy3", templateId: "template1", principal: User::"jane", resource: Photo::"car.jpg" } TemplateLinkedPolicy { policyId: "policy4", templateId: "template1", principal: User::"jane", resource }

通过计算每个策略的principal和resource中的字节来计算这些策略的大小。经过验证的权限以 UTF-8 字节为单位衡量大小。可打印 ASCII 范围内的每个字符计为 1 字节,但其他字符可能使用更多字节。以下示例仅使用 ASCII 字符,因此每个字符计为 1 字节。这些计算不包括固定开销。您的实际总数会更高。

的大小policy1是主体的长度 User::"alice" (13) 加上资源的长度 Photo::"car.jpg" (16)。总数为 13 + 16 = 29 字节。

的大小policy2是主体的长度 User::"bob" (11) 加上资源的长度 Photo::"boat.jpg" (17)。总数为 11 + 17 = 28 字节。

的大小policy3是主体的长度 User::"jane" (12) 加上资源的长度 Photo::"car.jpg" (16)。总数为 12 + 16 = 28 字节。

的大小policy4是主体的长度 User::"jane" (12) 加上资源的长度 (0)。总数为 12 + 0 = 12 字节。

因为policy2这是唯一引用资源的策略Photo::"boat.jpg",所以资源总大小为 28 字节。

因为policy1policy3两者都引用资源Photo::"car.jpg",所以总资源大小为 29 + 28 = 57 字节。

因为policy4这是唯一引用"unspecified"资源的策略,所以资源总大小为 12 字节。