Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何解決 Lambda 中的錯誤「最終政策大小大於限制」?
當我設定觸發條件來調用 AWS Lambda 函數時,出現錯誤「最終政策大小大於限制」。
簡短描述
如果您的 Lambda 函數的資源型政策超過 20 KB,則 Lambda 會傳回最終政策大小大於限制錯誤。
當您執行下列其中一個操作將政策陳述式新增至函數的資源型政策時,可能會發生此錯誤:
- 手動使用 add-permission AWS Command Line Interface (AWS CLI) 命令。
- 為需要存取您函數之權限的其他 AWS 服務建立資源。
若要解決此錯誤,請移除重複的政策陳述式,並將其取代為使用萬用字元 (*) 的已合併陳述式,以減小函數政策的大小。如需詳細資訊,請參閱 Lambda 配額和清理資源型政策。
解決方法
**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本。
檢閱函數的資源型政策
**注意:**對於下列命令,將 my-function 取代為您的函數名稱或 Amazon Resource Name (ARN)。
1. 執行下列 get-policy AWS CLI 命令,以尋找並檢閱 Lambda 函數的資源型政策:
$ aws lambda get-policy --function-name my-function
**注意:**您還可以在 get-policy 命令中使用命令列 JSON 處理器 jq 來撰寫進階查詢。如需有關如何下載和安裝 jq 的資訊,請參閱 GitHub 的 jq 網站上的下載 jq。
使用 jq 將 Lambda 函數政策格式化為 JSON 檔案的範例 get-policy 命令
$ aws lambda get-policy --function-name my-function | jq '.Policy|fromjson'
使用 jq 尋找 Lambda 函數政策大小的範例 get-policy 命令
$ aws lambda get-policy --function-name my-function | jq -r '.Policy' | wc -c
使用 jq 尋找特定政策陳述式的陳述式 ID (Sid) 的範例 get-policy 命令
將 events.amazonaws.com 取代為調用函數的 AWS 服務。
$ aws lambda get-policy --function-name my-function | jq '.Policy | fromjson | .Statement[] | select(.Principal.Service=="events.amazonaws.com") | .Sid'
使用 jq 取得名稱以相同字串開頭的資源 Sid 的範例 get-policy 命令
將 arn:aws:events:region:account-id:rule/test- 取代為跨多個重複政策陳述式的資源 ARN 共用的字串。
$ aws lambda get-policy --function-name my-function | jq '.Policy | fromjson | .Statement[] | select(.Condition.ArnLike."AWS:SourceArn" | startswith("arn:aws:events:region:account-id:rule/test-")) | .Sid'
2. 在資源型政策中,識別可以用萬用字元取代的政策陳述式。請注意每個政策陳述式的 Sid。
移除重複性政策陳述式
執行下列 remove-permission AWS CLI 命令以移除每個重複性政策陳述式。將 my-function 取代為您的函數名稱或 ARN。將 sid 取代為您要移除的政策陳述式的 Sid。
$ aws lambda remove-permission --function-name my-function --statement-id sid
新增使用萬用字元 (*) 的政策陳述式
執行下列 add-permission AWS CLI 命令,以新增包含萬用字元 (*) 的新的合併政策陳述式。將 my-function 取代為您的函數名稱或 ARN。將 sid 取代為任何值的新的 Sid。將 events.amazonaws.com 取代為調用函數的 AWS 服務或帳戶主體。將 arn:aws:events:region:account-id:rule/test-* 取代為您要授與許可的資源共用的 ARN 字串 (加上萬用字元)。
$ aws lambda add-permission --function-name my-function \ --statement-id 'sid' \ --action 'lambda:InvokeFunction' \ --principal 'events.amazonaws.com' \ --source-arn 'arn:aws:events:region:account-id:rule/test-*'
注意: Lambda 主控台中可能看不到資源型政策中具有萬用字元的觸發條件。如需詳細資訊,請參閱事件驅動調用。
如需詳細資訊,請參閱授與 AWS 服務的函數存取權。
相關資訊
從 AWS CLI 控制命令輸出 (AWS CLI 使用者指南)
相關內容
- 已提問 2 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前