Ir para o conteúdo

Como faço para resolver o erro “The final policy size is bigger than the limit” (O tamanho final da política é maior que o limite) do Lambda?

4 minuto de leitura
0

Quando defino um gatilho para invocar minha função do AWS Lambda, recebo o erro “The final policy size is bigger than the limit”.

Breve descrição

Se a política baseada em recursos da sua função do Lambda tiver mais de 20 KB, o Lambda retorna o erro “The final policy size is bigger than the limit”.

Esse erro pode ocorrer quando você cria recursos para outros serviços da AWS que precisam de permissão para acessar sua função.

Observação: o limite de cota da política baseada em recursos da função do Lambda é de 20 KB e não é ajustável.

Resolução

Para resolver esse erro, reduza o tamanho da política da sua função removendo instruções de política repetidas e substituindo-as por instruções consolidadas que usam curingas (*).

Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Analise as políticas baseadas em recursos da sua função

  1. Execute o seguinte comando get-policy para encontrar e analisar a política baseada em recursos da sua função do Lambda:

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

    Observação: substitua your-function pelo nome da sua função ou pelo nome do recurso da Amazon (ARN).
    Também é possível usar o processador JSON da linha de comandos, jq, no comando get-policy para escrever consultas avançadas. Para obter mais informações sobre como baixar e instalar o jq, consulte Download jq (Baixar o jq) no site do jq.
    Exemplo de comando get-policy que usa jq para formatar a política de uma função do Lambda como um arquivo JSON

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

    Exemplo de comando get-policy que usa jq para encontrar o tamanho da política de uma função do Lambda

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

    Exemplo de comando get-policy que usa jq para encontrar o ID da declaração (Sid) de determinadas instruções de política

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

    Observação: substitua events.amazonaws.com pelo serviço da AWS que invoca sua função.
    Exemplo de comando get-policy que usa jq para obter o Sid de recursos cujos nomes começam com a mesma string

    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'
    

    Observação: substitua arn:aws:events:region:account-id:rule/test- por uma string compartilhada pelos ARNs dos recursos em várias instruções repetidas de política.

  2. Na política baseada em recursos, identifique as instruções de política que é possível substituir por um curinga. Anote o Sid de cada declaração de política.

Remova instruções de política repetidas

Execute o seguinte comando remove-permission para remover cada declaração de política repetida:

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

Observação: substitua your-function pelo nome ou ARN da sua função. Substitua sid pelo Sid da declaração de política que você deseja remover.

Adicione instruções de política que usam um curinga (*)

Para adicionar instruções de política novas e consolidadas que incluam um caractere curinga (\ *), execute o seguinte 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-*'

Observação: substitua my-function pelo nome ou ARN da sua função. Substitua sid por um novo Sid de qualquer valor. Substitua events.amazonaws.com pelo serviço da AWS ou pela entidade principal da conta da AWS que invoca sua função. Substitua arn:aws:events:region:account-id:rule/test-* por uma string do ARN (mais um curinga) compartilhada pelos recursos aos quais você está concedendo permissões.

Para obter mais informações, consulte Como faço para usar políticas baseadas em recursos com o AWS Lambda para conceder permissão a serviços da AWS?

AWS OFICIALAtualizada há 5 meses
Sem comentários