내용으로 건너뛰기

‘The final policy size is bigger than the limit’이라는 Lambda 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

AWS Lambda 함수를 호출하도록 트리거를 설정하면 ‘The final policy size is bigger than the limit’이라는 오류가 발생합니다.

간략한 설명

Lambda 함수의 리소스 기반 정책이 20KB를 초과하는 경우, Lambda는 ‘The final policy size is bigger than the limit’ 오류를 반환합니다.

이 오류는 함수에 액세스할 권한이 필요한 다른 AWS 서비스의 리소스를 만들 때 발생할 수 있습니다.

참고: Lambda 함수 리소스 기반 정책 할당량 제한은 20KB이며 조정할 수 없습니다.

해결 방법

이 오류를 해결하려면 반복적인 정책 문을 제거하고 와일드카드(*)를 사용하는 통합 문으로 대체하여 함수의 정책 크기를 줄이십시오.

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

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

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

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

    참고: your-function을 함수 이름 또는 Amazon 리소스 이름(ARN)으로 바꾸십시오.
    get-policy 명령에서 명령줄 JSON 프로세서 jq를 사용하여 고급 쿼리를 작성할 수도 있습니다. jq 다운로드 및 설치 방법에 대한 자세한 내용은 jq 웹 사이트에서 jq 다운로드를 참조하십시오.
    jq를 사용하여 Lambda 함수 정책의 형식을 JSON 파일로 지정하는 get-policy 명령 예시

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

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

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

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

    aws lambda get-policy --function-name your-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 your-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를 기록해 둡니다.

반복적인 정책 문 제거

반복적인 각 정책 문을 제거하려면 다음 remove-permission 명령을 실행합니다.

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

참고: your-function을 함수 이름 또는 ARN으로 바꾸십시오. sid를 제거하려는 정책 문의 Sid로 바꾸십시오.

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

와일드카드(*)를 포함하는 새 통합 정책 문을 추가하려면 다음 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-*'

참고: my-function을 함수 이름 또는 ARN으로 바꾸십시오. sid를 모든 값의 새 Sid로 바꾸십시오. events.amazonaws.com을 함수를 호출하는 AWS 서비스 또는 AWS 계정 위탁자로 바꾸십시오. arn:aws:events:region:account-id:rule/test-*를 권한을 부여할 리소스에서 공유하는 ARN 문자열(와일드카드 포함)로 바꾸십시오.

자세한 내용은 Lambda와 함께 리소스 기반 정책을 사용하여 AWS 서비스에 권한을 부여하려면 어떻게 해야 합니까?를 참조하십시오.

AWS 공식업데이트됨 6달 전
댓글 없음