Lambda에서 발생하는 “최종 정책 크기가 한도보다 큽니다”라는 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

AWS Lambda 함수를 호출하도록 트리거를 설정하면 “최종 정책 크기가 한도보다 큽니다”라는 오류 메시지가 표시됩니다.

간략한 설명

Lambda 함수의 리소스 기반 정책이 20KB를 초과하는 경우, Lambda는 최종 정책 크기가 한도보다 큽니다 오류를 반환합니다.

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

오류를 해결하려면 반복적인 정책 문을 제거하고 와일드카드(*)를 사용하는 통합 문으로 대체하여 함수의 정책 크기를 줄이세요. 자세한 내용은 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 명령 예시

events.amazonaws.com을 함수를 호출하는 AWS 서비스로 대체합니다.

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

jq를 사용하여 이름이 동일한 문자열로 시작하는 리소스의 Sid를 가져오는 get-policy 명령 예시

**arn:aws:events:region:account-id:rule/test-**를 반복되는 여러 정책 문에서 리소스의 ARN이 공유하는 문자열로 대체합니다.

$ 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.    리소스 기반 정책에서 와일드카드로 대체할 수 있는 정책 문을 식별합니다. 각 정책 문의 Sid를 기록해 둡니다.

반복적인 정책 문 제거

다음 remove-permission AWS CLI 명령을 실행하여 반복되는 각 정책 문을 제거합니다. my-function을 사용자의 함수 이름 또는 ARN으로 대체합니다. Sid를 제거할 정책 문의 Sid로 대체합니다.

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

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

다음 add-permission AWS CLI 명령을 실행하여 와일드카드(*)를 포함하는 통합된 새로운 정책 문을 추가하고, my-function을 사용자의 함수 이름 또는 ARN으로 대체합니다. Sid를 모든 값의 새로운 Sid로 대체합니다. events.amazonaws.com을 함수를 호출하는 AWS 서비스 또는 계정 주체로 대체합니다. arn:aws:events:region:account-id:rule/test-*를 권한을 부여할 리소스에서 공유하는 ARN 문자열(와일드카드 포함)로 대체합니다.

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

참고: 리소스 기반 정책에 와일드카드가 있는 트리거는 Lambda 콘솔에서 보이지 않을 수 있습니다. 자세한 내용은 이벤트 기반 호출을 참조하세요.

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

관련 정보

IAM JSON 정책 요소: 리소스

AWS CLI의 명령 출력 제어(AWS CLI 사용 설명서)

Amazon S3 이벤트 알림이 Lambda 함수를 호출하지 않는 이유가 무엇인가요?

Lambda를 사용하여 Amazon EC2 인스턴스를 정기적으로 중지하고 시작하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 2년 전