如何解決 Lambda 中的錯誤「最終政策大小大於限制」?

2 分的閱讀內容
0

當我設定觸發條件來調用 AWS Lambda 函數時,出現錯誤「最終政策大小大於限制」。

簡短描述

如果您的 Lambda 函數的資源型政策超過 20 KB,則 Lambda 會傳回最終政策大小大於限制錯誤。

當您執行下列其中一個操作將政策陳述式新增至函數的資源型政策時,可能會發生此錯誤:

若要解決此錯誤,請移除重複的政策陳述式,並將其取代為使用萬用字元 (*) 的已合併陳述式,以減小函數政策的大小。如需詳細資訊,請參閱 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 服務的函數存取權

相關資訊

IAM JSON 政策元素:資源

從 AWS CLI 控制命令輸出 (AWS CLI 使用者指南)

為什麼我的 Amazon S3 事件通知不調用我的 Lambda 函數?

如何使用 Lambda 來定期停止和啟動 Amazon EC2 執行個體?

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