Come faccio a risolvere l'errore "The final policy size is bigger than the limit" da Lambda?

4 minuti di lettura
0

Quando imposto un trigger per richiamare la mia funzione AWS Lambda, visualizzo l'errore "The final policy size is bigger than the limit".

Descrizione breve

Se la policy basata sulle risorse della funzione Lambda supera i 20 KB, Lambda restituisce il messaggio di errore The final policy size is bigger than the limit.

L'errore può verificarsi quando aggiungi istruzioni della policy alla policy basata sulle risorse della funzione effettuando una delle seguenti operazioni:

Per risolvere l'errore, riduci le dimensioni della policy della funzione rimuovendo le istruzioni della policy ripetitive e sostituendole con istruzioni consolidate che utilizzano caratteri jolly (*). Per ulteriori informazioni, consulta Quote Lambda e Pulizia delle policy basate sulle risorse.

Risoluzione

Nota: in caso di errori durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Rivedi le policy basate sulle risorse della tua funzione

Nota: per i seguenti comandi, sostituisci my-function con il nome della tua funzione o il nome della risorsa Amazon (ARN).

1.    Esegui il comando get-policy di AWS CLI per trovare ed esaminare la policy basata sulle risorse della tua funzione Lambda:

$ aws lambda get-policy --function-name my-function

Nota: puoi utilizzare anche il processore JSON a riga di comando, jq, nel comando get-policy per scrivere query avanzate. Per informazioni su come scaricare e installare jq, consulta Scarica jq sul sito web di jq su GitHub.

Esempio di comando get-policy che utilizza jq per formattare la policy di una funzione Lambda come file JSON

$ aws lambda get-policy --function-name my-function | jq '.Policy|fromjson'

Esempio di comando get-policy che utilizza jq per trovare la dimensione della policy di una funzione Lambda

$ aws lambda get-policy --function-name my-function | jq -r '.Policy' | wc -c

Esempio di comando get-policy che utilizza jq per trovare l’ID dell'istruzione (Sid) di istruzioni della policy specifiche

Sostituisci events.amazonaws.com con il servizio AWS che richiama la tua funzione.

$ aws lambda get-policy --function-name my-function | jq '.Policy
| fromjson
| .Statement[]
| select(.Principal.Service=="events.amazonaws.com")
| .Sid'

Esempio di comando get-policy che utilizza jq per ottenere il Sid delle risorse i cui nomi iniziano con la stessa stringa

Sostituisci arn:aws:events:region:account-id:rule/test- con una stringa condivisa dagli ARN delle risorse in più istruzioni della policy ripetitive.

$ 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.    Nella policy basata sulle risorse, identifica le istruzioni della policy che puoi sostituire con un carattere jolly. Annota il Sid di ogni istruzione della policy.

Rimuovi le istruzioni della policy ripetitive

Esegui il comando remove-permission di AWS CLI per rimuovere ogni istruzione della policy ripetitiva. Sostituisci my-function con il nome o l'ARN della tua funzione. Sostituisci sid con il Sid dell'istruzione della policy che vuoi rimuovere.

$ aws lambda remove-permission --function-name my-function --statement-id sid

Aggiungi istruzioni della policy che utilizzano un carattere jolly (*)

Esegui il comando add-permission di AWS CLI per aggiungere nuove istruzioni della policy consolidate che includono un carattere jolly (*). Sostituisci my-function con il nome o l'ARN della funzione. Sostituisci sid con un nuovo Sid di qualsiasi valore. Sostituisci events.amazonaws.com con il servizio AWS o l'account principale che richiama la tua funzione. Sostituisci arn:aws:events:region:account-id:rule/test-* con una stringa ARN (più un carattere jolly) condivisa dalle risorse a cui concedi le autorizzazioni.

$ 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-*'

Nota: i trigger con caratteri jolly nella policy basata sulle risorse potrebbero non essere visibili nella console Lambda. Per ulteriori informazioni, consulta Invocazione basata su eventi.

Per ulteriori informazioni, consulta Garantire l'accesso alla funzione ai servizi AWS.

Informazioni correlate

Elementi della policy IAM JSON: risorsa

Controllo dell'output dei comandi AWS CLI (Guida per l'utente di AWS CLI)

Perché la notifica degli eventi di Amazon S3 non richiama la mia funzione Lambda?

Come faccio a interrompere e avviare le istanze Amazon EC2 a intervalli regolari utilizzando Lambda?

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa