

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

# 每个资源的策略大小
<a name="policy-size-per-resource"></a>

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

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

有关所有已验证权限配额的列表，请参阅[Amazon Verified Permissions 的配额](quotas.md)。

**Topics**
+ [如何计算策略规模](#policy-size-per-resource-calculation)
+ [保持在配额范围内](#policy-size-per-resource-manage)
+ [Template-linked 策略大小示例](#policy-size-per-resource-example)

## 如何计算策略规模
<a name="policy-size-per-resource-calculation"></a>

每项政策对资源总额的贡献如下：
+ **静态策略 **-静态策略提供其全部规模。这与根据*策略大小*配额衡量的值相同。
+ **Template-linked 策略 ** — 模板关联的策略贡献了用于实例化该策略的主体和资源的总长度。如果您未指定主体或资源，则其长度将计为 0。策略模板正文本身的大小不计入此配额。

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

## 保持在配额范围内
<a name="policy-size-per-resource-manage"></a>

如果您的应用程序接近每个资源*配额的*策略大小，请考虑以下策略：
+ **使用适当的策略类型。**如果许多策略对同一个资源授予相似的权限，则策略模板可能会减少策略存储的存储消耗。每个与模板关联的策略仅存储其主体和资源。策略模板将共享语句存储一次，但每个关联策略也会带来固定的存储开销。只有当共享语句足够大以抵消开销（大约 200 字节或更多）时，模板才会自行付费。低于该阈值时，单个静态策略消耗的空间更少。有关更多信息，请参阅 [Amazon 已验证权限策略模板和模板关联政策](policy-templates.md)。
+ **指定策略范围内的委托人和资源。**未指定资源的策略在策略存储库中共享该`"unspecified"`资源的单一总数。将每个策略的范围限定为特定资源会将您的策略分散到不同的总数，每种资源对应一个总数。
+ **对您的校长和资源进行分组。**与其为每个委托人编写策略，不如为群组编写策略并将委托人添加到群组。将资源分组到容器中同样可以减少引用单一资源的策略的数量。
+ **请求提高限额**。如果您的策略设计满足某些限制，您可以申请增加此配额。要获得资格，您的保单必须指定保单范围内的委托人或资源。增加还可能会减少您的校长和资源可以拥有的等级制度父母的数量。即使增加了配额，200,000 字节的子限制仍然适用于引用相同主体和相同资源的策略。您不能申请提高此次级限额。

## Template-linked 策略大小示例
<a name="policy-size-per-resource-example"></a>

要了解模板关联策略如何影响每个资源*配额的*策略规模，请将委托人的长度和资源的长度相加。如果您未指定资源，则经过验证的权限会将其大小计入`"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 字节。

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

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