¿Cómo puedo solucionar el error «The final policy size is bigger than the limit» de Lambda?

4 minutos de lectura
0

Cuando configuro un desencadenador para invocar mi función de AWS Lambda, aparece el error «The final policy size is bigger than the limit».

Breve descripción

Si la política basada en recursos de la función de Lambda supera los 20 KB, Lambda devuelve el error The final policy size is bigger than the limit.

Este error puede producirse si se añaden instrucciones de política a la política basada en recursos de la función mediante una de las siguientes acciones:

Para solucionar el error, reduzca el tamaño de la política de la función; para ello, elimine las instrucciones de política repetitivas y sustitúyalas por instrucciones consolidadas que usen caracteres comodín (*). Para obtener más información, consulte Lambda quotas y Cleaning up resource-based policies.

Solución

Nota: Si se muestran errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

Revisión de las políticas basadas en recursos de la función

Nota: En los siguientes comandos, sustituya my-function por el nombre de su función o el nombre del recurso de Amazon (ARN).

1.    Ejecute el siguiente comando get-policy de AWS CLI para buscar y revisar la política basada en recursos de su función de Lambda:

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

Nota: También puede utilizar el procesador JSON de la línea de comandos, jq, en el comando get-policy para escribir consultas avanzadas. Para obtener información sobre cómo descargar e instalar jq, consulte Download jq en el sitio web de jq en GitHub.

Ejemplo de comando get-policy que usa jq para formatear la política de una función de Lambda como un archivo JSON

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

Ejemplo de comando get-policy que usa jq para encontrar el tamaño de la política de una función de Lambda

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

Ejemplo de comando get-policy que usa jq para buscar el ID de la instrucción (Sid) de determinadas instrucciones de política

Sustituya events.amazonaws.com por el servicio de AWS que invoca su función.

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

Ejemplo de comando get-policy que usa jq para obtener el Sid de los recursos cuyo nombre comienza con la misma cadena

Sustituya arn:aws:events:region:account-id:rule/test- por una cadena compartida por los ARN de los recursos en varias instrucciones de política repetitivas.

$ 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.    En la política basada en recursos, identifique las instrucciones de política que pueda reemplazar por un comodín. Anote el Sid de cada instrucción de política.

Eliminación de instrucciones de política repetitivas

Ejecute el siguiente comando remove-permission de AWS CLI para eliminar cada instrucción de política repetitiva. Reemplace my-function por el nombre o el ARN de su función. Sustituya sid por el Sid de la instrucción de política que desee eliminar.

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

Agregación de instrucciones de política que usen un comodín (*)

Ejecute el siguiente comando add-permission de AWS CLI para añadir instrucciones de política nuevas y consolidadas que incluyan un comodín (*). Reemplace my-function por el nombre o el ARN de su función. Sustituya sid por un nuevo Sid con cualquier valor. Sustituya events.amazonaws.com por la entidad principal del servicio o la cuenta de AWS que invoca su función. Sustituya arn:aws:events:region:account-id:rule/test-* por una cadena de ARN (más un comodín) compartida por los recursos a los que está concediendo permisos.

$ 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: Es posible que los desencadenadores con comodines en la política basada en recursos no estén visibles en la consola de Lambda. Para obtener más información, consulte Event-driven invocation.

Para obtener más información, consulte Granting function access to AWS services.

Información relacionada

Elementos de política JSON de IAM: Resource

Control de la salida de comandos desde la AWS CLI (Guía del usuario de la AWS CLI)

¿Por qué mi notificación de eventos de Amazon S3 no invoca mi función de Lambda?

¿Cómo puedo utilizar la función de Lambda para detener e iniciar instancias de Amazon EC2 a intervalos regulares?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años