내 Lambda 함수를 호출하는 Amazon S3 이벤트 알림을 만들 때 "Unable to validate the following destination configurations" 오류가 발생하는 이유는 무엇입니까?

최종 업데이트 날짜: 2021년 12월 9일

AWS Lambda 함수를 호출하기 위해 Amazon Simple Storage Service(Amazon S3) 이벤트 알림을 생성하려고 하면 “Unable to validate the following destination configurations. Not authorized to invoke function" 오류가 발생합니다. 이 오류가 나타나는 이유는 무엇이며 어떻게 해결하나요?

간략한 설명

Amazon S3 버킷에 Lambda 함수를 호출하는 데 필요한 권한이 없는 경우 Lambda는 다음 오류를 반환합니다.

"Unable to validate the following destination configurations. Not authorized to invoke function"

참고: 다음 중 하나를 수행하면 함수에 대한 리소스 기반 정책에 필요한 권한이 자동으로 추가됩니다.

이 오류가 발생할 수 있는 일반적인 이유

  • Lambda 함수의 리소스 기반 정책이 삭제 또는 제거되고 해당 함수에 대한 Amazon S3 이벤트 알림에 대한 변경 사항을 저장하려고 합니다.
  • S3 버킷에는 필요한 권한이 없는 Lambda 함수에 대한 이벤트 알림이 있으며 다른 이벤트 알림이 버킷에 저장됩니다.
  • 다음 중 하나에서 새로운 Amazon S3 이벤트 알림이 추가되며 함수의 리소스 기반 정책에는 필요한 권한이 없습니다.
    AWS SDK
    AWS Command Line 참조(AWS CLI)
    AWS CloudFormation 스택

참고: 권한을 업데이트했는데도 함수가 여전히 호출되지 않는 경우 Amazon S3 이벤트 알림이 내 Lambda 함수를 호출하지 않는 이유는 무엇입니까?를 참조하세요.

해결 방법

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

다음 중 하나를 수행합니다.

이벤트 알림 다시 생성

Amazon S3 콘솔에서 이벤트 알림을 삭제합니다. 그런 다음 알림을 다시 추가합니다.

참고: Amazon S3 콘솔에서 이벤트 알림을 다시 생성하면 Lambda 함수의 리소스 기반 정책에 적절한 권한이 추가됩니다.

AWS CLI를 사용하여 Lambda 함수의 리소스 기반 정책에 필요한 권한을 추가합니다.

Lambda AddPermission API를 사용하여 Lambda 함수의 리소스 기반 정책에 필요한 호출 권한을 추가합니다. 변경 사항을 커밋하려면 다음 AWS CLI 명령을 실행합니다.

중요: myLambdaFunction을 Lambda 함수 이름으로 변경합니다. S3StatementId를 고유한 값으로 바꾸어 동일한 정책의 다른 명령문과 구별합니다. arn:aws:s3:::myS3Bucket을 S3 버킷의 Amazon 리소스 이름(ARN)으로 바꿉니다. accountIdAWS 계정 ID로 바꿉니다.

$ aws lambda add-permission --function-name myLambdaFunction --principal s3.amazonaws.com \
--statement-id S3StatementId --action "lambda:InvokeFunction" \
--source-arn arn:aws:s3:::myS3Bucket \
--source-account accountId