API Gateway REST API에서 “Lambda 함수에 대한 잘못된 권한” 오류 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 5월 26일

Amazon API Gateway REST API를 사용하여 AWS Lambda 함수를 호출하면 “Lambda 함수에 대한 잘못된 권한” 오류가 발생합니다. 오류의 원인은 무엇이며 어떻게 해결할 수 있습니까?

간략한 설명

API Gateway REST API가 Lambda 호출 권한 없이 Lambda 함수를 호출하려고 하면 API Gateway가 “Lambda 함수에 대한 잘못된 권한” 오류를 반환합니다.

REST API에 대해 CloudWatch 로깅을 설정한 경우 API Gateway는 실행 로그에 다음 오류 메시지 중 하나도 기록합니다.

Lambda 통합 사용 REST API에 대한 CloudWatch 오류 메시지 예제

"https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xx:function:xxx/invocations에 요청을 보내는 중
구성 오류로 인해 실행 실패: Lambda 함수에 대한 권한이 잘못되었습니다.
상태: 500으로 완료된 메서드"

Lambda 권한 부여자 사용 REST API에 대한 CloudWatch 오류 메시지 예제

"https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xxx:function:xx/invocations에 요청을 보내는 중
구성 오류로 인해 실행 실패: Lambda 함수에 대한 권한이 잘못되었습니다.
구성 오류: 권한 부여자 오류로 인해 실행이 실패했습니다.”

이러한 오류를 해결하려면 다음 중 하나를 수행합니다.

이 문서에서 설명하는 방법 중 하나를 사용하여 리소스 기반 Lambda 호출 권한을 REST API에 추가합니다.

-또는-

함수를 호출할 수 있는 REST API 권한을 부여하는 AWS Identity and Access Management(IAM) 실행 역할을 구성합니다.

자세한 내용은 API 호출을 위한 API Gateway 권한 모델을 참조하세요.

해결 방법

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

API Gateway 콘솔을 사용하여 Lambda 통합 사용 REST API에 Lambda 호출 권한을 추가하려면 다음을 수행합니다.

1.    API Gateway 콘솔API 창에서 REST API 이름을 선택합니다.

2.    리소스(Resources) 창에서 구성된 HTTP 메서드를 선택합니다.

3.    메서드 실행(Method Execution) 창에서 통합 요청(Integration Request)을 선택합니다.

4.    통합 유형(Integration type)에서 Lambda 함수(Lambda Function)를 선택합니다.

5.    Lambda 리전 드롭다운 목록을 확장합니다. 그런 다음 Lambda 함수가 있는 AWS 리전을 선택합니다.

6.    Lambda 함수 드롭다운 목록을 선택합니다. 그런 다음 Lambda 함수의 이름을 선택합니다.

7.    Lambda 함수에 권한 추가 옵션을 제공하는 메시지가 나타납니다. 확인(OK)을 선택합니다.

8.    저장(Save)을 선택합니다. 그런 다음 API 배포를 선택하여 Lambda 호출 권한을 API에 추가합니다.

CloudFormation 템플릿을 사용하여 Lambda 통합 사용 REST API에 Lambda 호출 권한을 추가하려면 다음을 수행합니다.

CloudFormation 템플릿에 다음 코드 조각을 추가합니다.

중요: <api-id>를  apiID로 바꿉니다. FunctionName 값을 Lambda 함수의 이름으로 바꿉니다. SourceArn 값을 API의 소스 Amazon 리소스 이름(ARN)으로 바꿉니다.

SampleApiPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref MyLambdaFnA1
      Principal: "apigateway.amazonaws.com"
      SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/*/<method>/<resource>"

다양한 CloudFormation 템플릿 파트를 선언하는 방법에 대한 자세한 내용은 템플릿 조각을 참조하세요.

AWS CLI를 사용하여 Lambda 통합 사용 REST API에 Lambda 호출 권한을 추가하려면 다음을 수행합니다.

다음 add-permission AWS CLI 명령을 실행합니다.

중요: function-name 값을 Lambda 함수의 이름으로 바꿉니다. source-arn 값을 API의 소스 ARN으로 바꿉니다. statement-id 값을 동일한 정책의 다른 명령문과 구별하는 명령문 식별자로 바꿉니다.

aws lambda add-permission   \
--function-name "$FUNCTION_NAME"   \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/*/$METHOD/$RESOURCE"   \
--principal apigateway.amazonaws.com   \
--statement-id $STATEMENT_ID   \
--action lambda:InvokeFunction

API Gateway 콘솔을 사용하여 Lambda 권한 부여자 사용 REST API에 Lambda 호출 권한을 추가하려면 다음을 수행합니다.

1.    "lambda:InvokeFunction" 작업을 허용하는 API Gateway에 대한 IAM 역할을 생성합니다. 그런 다음 IAM 역할 ARN을 클립보드에 복사합니다.

2.    API Gateway 콘솔API 창에서 REST API 이름을 선택합니다.

3.    권한 부여자 창에서 구성된 Lambda 권한 부여자를 선택합니다. 그런 다음 편집(Edit)을 선택합니다.

4.    Lambda 호출 역할의 경우 클립보드에 복사한 IAM 역할 ARN을 입력합니다.

5.    저장(Save)을 선택합니다. 그런 다음 API 배포(Deploy the API)를 선택합니다.

CloudFormation 템플릿을 사용하여 Lambda 권한 부여자 사용 REST API에 Lambda 호출 권한을 추가하려면 다음을 수행합니다.

CloudFormation 템플릿에 다음 코드 조각을 추가합니다.

중요: <api-id>apiID로 바꿉니다. FunctionName 값을 Lambda 함수의 이름으로 바꿉니다. <auth-id>를 Lambda 권한 부여자의 authorizerId로 바꿉니다.

SampleApiAuthPermission:
    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref MyLambdaFnA1
      Principal: "apigateway.amazonaws.com"
      SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/authorizers/<auth-id>"

다양한 CloudFormation 템플릿 파트를 선언하는 방법에 대한 자세한 내용은 템플릿 조각을 참조하세요.

AWS CLI를 사용하여 Lambda 권한 부여자 사용 REST API에 Lambda 호출 권한을 추가하려면 다음을 수행합니다.

다음 add-permission AWS CLI 명령을 실행합니다.

중요: function-name 값을 Lambda 함수의 이름으로 바꿉니다. source-arn 값을 API의 소스 ARN으로 바꿉니다. statement-id 값을 동일한 정책의 다른 명령문과 구별하는 명령문 식별자로 바꿉니다.

aws lambda add-permission   \
--function-name "$FUNCTION_NAME"   \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/authorizers/$AUTHORIZER_ID"   \
--principal apigateway.amazonaws.com   \
--statement-id $STATEMENT_ID   \
--action lambda:InvokeFunction

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?