Lambda에서 "최종 정책 크기가 한도보다 더 큽니다(The final policy size is bigger than the limit)"라는 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 4월 14일

AWS Lambda 함수를 호출하도록 트리거를 설정하면 "최종 정책 크기가 한도보다 더 큽니다(The final policy size is bigger than the limit)" 오류가 발생합니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

Lambda 함수의 리소스 기반 정책이 20KB를 초과하면 Lambda가 최종 정책 크기가 한도보다 더 큽니다(The final policy size is bigger than the limit) 오류를 반환합니다.

이 오류는 다음 중 하나를 수행하여 함수의 리소스 기반 정책에 정책 설명을 추가할 때 발생할 수 있습니다.

오류를 해결하려면 반복되는 정책 문을 제거하고 와일드카드(*)를 사용하는 통합 문으로 대체하여 함수의 정책 크기를 줄입니다. 자세한 내용은 Lambda 할당량리소스 기반 정책 정리를 참조하세요.

해결 방법

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

함수의 리소스 기반 정책 검토

참고: 다음 명령에서 my-function을 함수의 이름 또는 Amazon 리소스 이름(ARN)으로 바꿉니다.

1.    다음 get-policy AWS CLI 명령을 실행하여 Lambda 함수의 리소스 기반 정책을 찾고 검토합니다.

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

참고: get-policy 명령에서 명령줄 JSON 프로세서 jq를 사용하여 고급 쿼리를 작성할 수도 있습니다. jq를 다운로드하고 설치하는 방법에 대한 자세한 내용은 GitHub의 jq 웹 사이트에서 jq 다운로드를 참조하세요.

jq를 사용하여 Lambda 함수의 정책을 JSON 파일로 포맷하는 예제 get-policy 명령

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

jq를 사용하여 Lambda 함수의 정책 크기를 찾는 예제 get-policy 명령

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

jq를 사용하여 특정 정책 문의 명령문 ID(Sid)를 찾는 예제 get-policy 명령

$ aws lambda get-policy --function-name my-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 my-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이 공유하는 문자열로 바꿉니다.

2.    리소스 기반 정책에서 와일드카드로 바꿀 수 있는 정책 문을 식별합니다. 각 정책 설명서의 Sid를 적어 둡니다.

반복적인 정책 설명 제거

다음 제거 권한 AWS CLI 명령을 실행하여 각 반복 정책 설명을 제거합니다.

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

참고: myfunction을 함수의 이름 또는 ARN으로 바꿉니다. sid를 제거하려는 정책 문의 Sid로 바꿉니다.

와일드카드(*)를 사용하는 정책 문 추가

다음 add-permission AWS CLI 명령을 사용하여 와일드카드(*)가 포함된 새로운 통합 정책 문을 추가합니다.

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

참고: myfunction을 함수의 이름 또는 ARN으로 바꿉니다. sid를 모든 값의 새 Sid로 바꿉니다. events.amazonaws.com을 함수를 호출하는 AWS 서비스 또는 계정 보안 주체로 바꿉니다. arn:aws:events:region:account-id:rule/test-*를 권한을 부여할 리소스가 공유하는 ARN 문자열(와일드카드 포함)로 바꿉니다.

자세한 내용은 AWS 서비스에 함수 액세스 권한 부여를 참조하세요.