我想通过 AWS Security Token Service(STS)代入 AWS Identity and Access Management(IAM)角色,同时避免出现 PackedPolicyTooLarge 错误。
简短描述
当您通过 STS 代入 IAM 角色时,可能会收到错误消息 PackedPolicyTooLarge,其中包含以下详细信息之一:
STS 允许您传递以下类型的会话标签:
- 内联会话策略
- 托管策略 Amazon 资源名称(ARN)
- 您代入 IAM 角色时的客户管理型策略 ARN。
STS 将与标签、策略和 ARN 相关的数据存储在 AWS 会话令牌中。所有这些数据都计入 PackedPolicySize 限制。
**注意:**客户管理策略必须与您代入的 IAM 角色属于同一 AWS 账户。
会话标签、内联会话策略和托管策略 ARN 一经设置,AWS 会话令牌的大小会随之增加。但是,无论使用了多少会话标签和会话策略配额,都会采用一个有限的令牌大小限制。
超过该有限限制会产生错误。
内联会话策略和会话标签在会话令牌中进行序列化和压缩。因此,在向 STS 发出 AssumeRole 调用之前,难以确定已使用的 PackedPolicySize。
**注意:**AssumeRole、AssumeRoleWithSAML 和 AssumeRoleWithWebIdentity 的 AWS CloudTrail 日志会显示 PackedPolicySize。此外,作为响应的一部分,AWS API 还会返回请求所使用的空间在 PackedPolicySize 中所占的百分比。
解决方法
减少代入角色时传递给 STS 的内联会话策略或会话标签(键和值)的长度。以下各节提供了限制会话标签和内联会话策略的数据的方法。
会话标签
-
缩写或缩短会话标签的键或值。会话标签通常用于基于属性的访问控制(ABAC)。为了有效利用 ABAC 的策略空间,请在会话标签中只添加授权决策所需的信息。
-
对未用于 ABAC 目的的会话标签(例如审计信息)
,请将会话标签中的记录替换为对外部记录系统的引用。
-
对所有标签的键和值使用一致的大小写,例如统一使用小写。AWS 会话令牌将存储压缩后的标签键和值,使用一致的字符大小写时,压缩算法效果最佳。
-
如果您要将身份信息放在会话标签内,则最佳做法是将其移至具有单独配额的 SourceIdentity。
内联会话策略
-
从会话策略中删除语句 ID(Sid)元素。Sid 是会话策略语句中的可选元素。
-
酌情使用通配符来缩短 IAM 操作和资源 ARN。
-
传递托管策略 ARN,而不是策略文档。托管策略 ARN 只是对策略的引用,在令牌内占用的空间更少。您可以同时传递托管策略和会话策略。
-
若要创建仅有条件地授予访问权限的策略,请使用带有托管策略的会话标签或附加到角色的内联策略。