Salta al contenuto

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

4 minuti di lettura
0

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

Breve descrizione

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 crei risorse per altri servizi AWS che richiedono l'autorizzazione per accedere alla funzione.

Nota: il limite della quota della policy basata sulle risorse della funzione Lambda è di 20 KB e non è modificabile.

Risoluzione

Per risolvere l'errore, rimuovi le istruzioni di policy ripetitive e sostituiscile con istruzioni consolidate che utilizzano caratteri jolly (\ *) per ridurre le dimensioni della policy della funzione.

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori relativi ad AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Rivedi le policy basate sulle risorse della funzione

  1. Per individuare e rivedere la policy basata sulle risorse della funzione Lambda, esegui questo comando get-policy:

    aws lambda get-policy --function-name your-function
    

    Nota: sostituisci your-function con il nome o il nome della risorsa Amazon (ARN) della tua funzione.
    Puoi anche utilizzare il processore JSON della riga di comando, ** jq**, nel comando get-policy per scrivere query avanzate. Per informazioni sulle modalità per scaricare e installare jq, consulta Download jq (Scarica jq) sul sito web jq.
    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 your-function | jq '.Policy|fromjson'
    

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

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

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

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

    Nota: sostituisci events.amazonaws.com con il servizio AWS che invoca la tua funzione.
    Esempio di comando get-policy che utilizza jq per ottenere il Sid delle risorse i cui nomi iniziano con la stessa stringa

    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'
    

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

  2. Nella policy basata sulle risorse, identifica le istruzioni di policy che puoi sostituire con un carattere jolly. Annota il Sid di ogni istruzione della policy.

Rimuovi le istruzioni di policy ripetitive

Per rimuovere ogni istruzione della policy ripetitiva, esegui questo comando remove-permission:

aws lambda remove-permission --function-name your-function --statement-id sid

Nota: sostituisci your-function con il nome o l'ARN della tua funzione. Sostituisci sid con il Sid dell'istruzione della policy che vuoi rimuovere.

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

Per aggiungere nuove istruzioni di policy consolidate che includono un carattere jolly (\ *), esegui questo comando 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-*'

Nota: sostituisci my-function con il nome o l'ARN della tua funzione. Sostituisci sid con un nuovo Sid di qualsiasi valore. Sostituisci events.amazonaws.com con il principale dell'account AWS o del servizio AWS che invoca 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.

Per ulteriori informazioni, consulta Come posso usare le policy basate su risorse con AWS Lambda per concedere l'autorizzazione ai servizi AWS?

AWS UFFICIALEAggiornata 5 mesi fa