我想透過 AWS Security Token Service (STS) 擔任 AWS Identity and Access Management (IAM) 角色,而不會產生 PackedPolicyTooLarge 錯誤。
簡短描述
您透過 STS 擔任 IAM 角色時,您可能會收到 PackedPolicyTooLarge 的錯誤訊息,其中包含下列其中一個詳細資料:
- 工作階段標籤的封包大小會耗用指定空間的 n%。
- 封包政策會耗用指定空間的 n%,請使用較小的政策。
**注意:**n 表示 PackedPolicySize 已使用空間的百分比。
STS 可讓您傳入下列類型的工作階段標籤:
- 內嵌工作階段政策
- 管理政策 Amazon Resource Name (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 只是策略的引用,佔用的權杖內部空間更少。您可以同時傳入管理的政策和工作階段政策。
- 要建立僅有條件授予存取權限的政策,使用具管理政策的工作階段標籤或附加至該角色的內嵌政策。