當我設定觸發程序以調用 AWS Lambda 函式時,收到錯誤「The final policy size is bigger than the limit」。
簡短說明
如果您的 Lambda 函式的資源型政策超過 20 KB,則 Lambda 會回傳「The final policy size is bigger than the limit」錯誤。
當您為其他 AWS 服務需要存取您函式的權限而建立資源時,可能會發生此錯誤。
**注意:**Lambda 函式的資源型政策限制為 20 KB,且無法調整。
若要解決此錯誤,請移除重複的政策陳述式,並使用萬用字元 (*) 的整合陳述式來減少函式政策的大小。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
檢視函式的資源型政策
若要尋找並檢視 Lambda 函式資源型政策,請執行以下 get-policy 命令:
aws lambda get-policy --function-name your-function
**注意:**將 your-function 替換為您的函式名稱或 Amazon Resource Name (ARN)。
您也可以在 get-policy 命令中使用命令列 JSON 處理器 jq 來撰寫進階查詢。有關如何下載和安裝 jq 的資訊,請參閱 jq 網站上的下載 jq。
使用 jq 將 Lambda 函式政策格式化為 JSON 檔案的 get-policy 範例命令:
aws lambda get-policy --function-name your-function | jq '.Policy|fromjson'
使用 jq 尋找 Lambda 函式政策大小的 get-policy 範例命令:
aws lambda get-policy --function-name your-function | jq -r '.Policy' | wc -c
使用 jq 尋找特定政策陳述式的 Statement ID (Sid) 的 get-policy 範例命令:
aws lambda get-policy --function-name your-function | jq '.Policy | fromjson
| .Statement[]
| select(.Principal.Service=="events.amazonaws.com")
| .Sid'
**注意:**將 events.amazonaws.com 替換為調用您函式的 AWS 服務。
使用 jq 取得名稱以相同字串開頭的資源 Sid 的 get-policy 範例命令:
aws lambda get-policy --function-name your-function | jq '.Policy| fromjson
| .Statement[]
| select(.Condition.ArnLike."AWS:SourceArn" | startswith("arn:aws:events:region:account-id:rule/test-"))
| .Sid'
**注意:**將 arn:aws:events:region:account-id:rule/test- 替換為多個重複政策陳述式的資源 ARN 所共用的字串。
在資源型政策中,識別您可以使用萬用字元替換的政策陳述式。記下每個政策陳述式的 Sid。
移除重複的政策陳述式
若要移除每個重複的政策陳述式,請執行以下 remove-permission 命令:
aws lambda remove-permission --function-name your-function --statement-id sid
**注意:**將 your-function 替換為您的函式名稱或 ARN。將 sid 替換為您要移除的政策陳述式的 Sid。
新增使用萬用字元 (*) 的政策陳述式
若要新增包含萬用字元 (*) 的整合政策陳述式,請執行以下 add-permission 命令:
aws lambda add-permission --function-name your-function \--statement-id 'sid' \
--action 'lambda:InvokeFunction' \
--principal 'events.amazonaws.com' \
--source-arn 'arn:aws:events:region:account-id:rule/test-*'
**注意:**將 my-function 替換為您的函式名稱或 ARN。將 sid 替換為任意值的新 Sid。將 events.amazonaws.com 替換為調用您函式的 AWS 服務或 AWS 帳戶主體。將 arn:aws:events:region:account-id:rule/test-* 替換為您授權的資源所共用的 ARN 字串 (加上萬用字元)。
如需更多資訊,請參閱如何使用 Lambda 的資源型政策授權 AWS 服務?