当我通过 AWS STS 代入 IAM 角色时,如何避免出现 PackedPolicyTooLarge 错误?

1 分钟阅读
0

我想通过 AWS Security Token Service(STS)代入 AWS Identity and Access Management(IAM)角色,同时避免出现 PackedPolicyTooLarge 错误。

简短描述

当您通过 STS 代入 IAM 角色时,可能会收到错误消息 PackedPolicyTooLarge,其中包含以下详细信息之一:

  • 打包后的会话标签大小占用 n% 的分配空间。

  • 打包后的策略占用分配空间的 n%,请使用较小的策略。
    **注意:**n 表示已用空间占 PackedPolicySize 的百分比。

STS 允许您传递以下类型的会话标签:

  • 内联会话策略
  • 托管策略 Amazon 资源名称(ARN)
  • 您代入 IAM 角色时的客户管理型策略 ARN。

STS 将与标签、策略和 ARN 相关的数据存储在 AWS 会话令牌中。所有这些数据都计入 PackedPolicySize 限制。

**注意:**客户管理策略必须与您代入的 IAM 角色属于同一 AWS 账户。

会话标签、内联会话策略和托管策略 ARN 一经设置,AWS 会话令牌的大小会随之增加。但是,无论使用了多少会话标签和会话策略配额,都会采用一个有限的令牌大小限制。 超过该有限限制会产生错误。

内联会话策略和会话标签在会话令牌中进行序列化和压缩。因此,在向 STS 发出 AssumeRole 调用之前,难以确定已使用的 PackedPolicySize

**注意:**AssumeRoleAssumeRoleWithSAMLAssumeRoleWithWebIdentity 的 AWS CloudTrail 日志会显示 PackedPolicySize。此外,作为响应的一部分,AWS API 还会返回请求所使用的空间在 PackedPolicySize 中所占的百分比。

解决方法

减少代入角色时传递给 STS 的内联会话策略或会话标签(键和值)的长度。以下各节提供了限制会话标签和内联会话策略的数据的方法。

会话标签

  • 缩写或缩短会话标签的键或值。会话标签通常用于基于属性的访问控制(ABAC)。为了有效利用 ABAC 的策略空间,请在会话标签中只添加授权决策所需的信息。

  • 对未用于 ABAC 目的的会话标签(例如审计信息) ,请将会话标签中的记录替换为对外部记录系统的引用。

  • 对所有标签的键和值使用一致的大小写,例如统一使用小写。AWS 会话令牌将存储压缩后的标签键和值,使用一致的字符大小写时,压缩算法效果最佳。

  • 如果您要将身份信息放在会话标签内,则最佳做法是将其移至具有单独配额的 SourceIdentity

内联会话策略

  • 从会话策略中删除语句 ID(Sid)元素。Sid 是会话策略语句中的可选元素。

  • 酌情使用通配符来缩短 IAM 操作和资源 ARN。

  • 传递托管策略 ARN,而不是策略文档。托管策略 ARN 只是对策略的引用,在令牌内占用的空间更少。您可以同时传递托管策略和会话策略。

  • 若要创建仅有条件地授予访问权限的策略,请使用带有托管策略的会话标签或附加到角色的内联策略。

AWS 官方
AWS 官方已更新 1 年前