API Gateway REST API에서 발생한 ‘Invalid permissions on Lambda function’ 오류를 해결하려면 어떻게 해야 합니까?
Amazon API Gateway REST API에서 AWS Lambda 함수를 간접 호출하면 ‘Invalid permissions on Lambda function’ 오류가 발생합니다.
간략한 설명
API Gateway REST API가 Lambda 간접 호출 권한 없이 Lambda 함수를 간접 호출하는 경우 API Gateway는 ‘Invalid permissions on Lambda function’ 오류를 반환합니다.
REST API에 대해 CloudWatch 로깅을 설정하면 API Gateway도 다음 오류 메시지 중 하나를 로깅합니다.
- Lambda 통합을 사용하는 REST API에 대한 CloudWatch 오류 메시지 예:
"Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
Execution failed due to configuration error: Invalid permissions on Lambda function
Method completed with status: 500" - Lambda 권한 부여자를 사용하는 REST API에 대한 CloudWatch 오류 메시지 예:
"Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
Execution failed due to configuration error: Invalid permissions on Lambda function
Execution failed due to configuration error: Authorizer error"
해결 방법
이러한 오류를 해결하려면 다음 중 하나를 수행하십시오.
- 이 문서에 설명된 방법 중 하나를 통해 REST API에 리소스 기반 Lambda 호출 권한을 추가합니다.
- 함수를 간접 호출할 REST API 권한을 부여하는 AWS Identity and Access Management(AWS IAM) 실행 역할을 구성합니다.
자세한 내용은 API 호출을 위한 API Gateway 권한 모델을 참조하십시오.
참고: 401 Unauthorized 오류가 발생하는 경우, Lambda 권한 부여자를 생성한 후 API Gateway ‘401 Unauthorized’ 오류가 발생하는 이유는 무엇입니까?의 지침을 따르십시오.
Lambda 통합 오류 해결
API Gateway 콘솔을 통한 Lambda 통합으로 REST API에 Lambda 간접 호출 권한 추가
다음 단계를 완료합니다.
- API Gateway 콘솔을 엽니다.
- APIs(API) 창에서 HTTP API의 이름을 선택합니다.
- Resources(리소스) 창에서 구성된 HTTP 메서드를 선택합니다.
- Method Execution(메서드 실행) 창에서 Integration Request(통합 요청)를 선택합니다.
- Integration type(통합 유형)에서 Lambda Function(Lambda 함수)을 선택합니다.
- Lambda Region(Lambda 리전) 드롭다운 목록을 확장합니다. 그런 다음 Lambda 함수가 있는 AWS 리전을 선택합니다.
- Lambda Function(Lambda 함수) 드롭다운 목록을 선택합니다. 그런 다음 Lambda 함수의 이름을 선택합니다.
- Save(저장)를 선택합니다. 그런 다음 Deploy the API(API 배포)를 선택하여 API에 Lambda 간접 호출 권한을 추가합니다.
CloudFormation 템플릿을 통한 Lambda 통합으로 REST API에 Lambda 간접 호출 권한 추가
CloudFormation template에 다음 코드 스니펫을 추가합니다.
SampleApiPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref ExampleLambdaFunction Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:example-api-id/*/example-method/example-resource"
참고: 이전 템플릿에서 다음을 대체합니다.
FunctionName 값을 Lambda 함수의 이름으로
SourceArn 값을 API의 소스 Amazon 리소스 이름(ARN)으로
SourceArn 값 내에서 example-api-id를 apiID로
다양한 CloudFormation 템플릿 부분을 선언하는 방법에 대한 자세한 내용은 템플릿 스니펫을 참조하십시오.
AWS CLI를 통한 Lambda 통합으로 REST API에 Lambda 간접 호출 권한 추가
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI 오류 문제 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
다음 add-permission AWS CLI 명령을 실행합니다.
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
참고: 이전 명령에서 다음을 대체합니다.
function-name 값을 Lambda 함수의 이름으로
source-arn 값을 API의 소스 ARN으로
statement-id 값을 해당 명령문을 고유하게 식별하는 명령문 식별자로
Lambda 권한 부여자 오류 해결
API Gateway 콘솔을 통한 Lambda 권한 부여자로 REST API에 Lambda 간접 호출 권한 추가
다음 단계를 완료합니다.
- lambda:InvokeFunction 작업을 허용하는 API Gateway의 IAM 역할을 생성합니다. 그런 다음 IAM 역할 ARN을 클립보드에 복사합니다.
- API Gateway 콘솔을 엽니다.
- APIs(API) 창에서 HTTP API의 이름을 선택합니다.
- Authorizers(권한 부여자) 창에서 구성된 Lambda 권한 부여자를 선택합니다. 그런 다음 Edit(편집)을 선택합니다.
- Lambda Invoke Role(Lambda 호출 역할)에 클립보드에 복사한 IAM 역할 ARN을 입력합니다.
- Save(저장)를 선택합니다. 그런 다음 Deploy the API(API 배포)를 선택합니다.
CloudFormation 템플릿을 통한 Lambda 권한 부여자로 REST API에 Lambda 간접 호출 권한 추가
CloudFormation template에 다음 코드 스니펫을 추가합니다.
SampleApiAuthPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref ExampleLambdaFunction Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:example-api-id/authorizers/example-auth-id"
참고: 이전 템플릿에서 다음을 대체합니다.
FunctionName 값을 Lambda 함수의 이름으로
SourceArn 값 내에서 example-api-id를 apiID로
SourceArn 값 내에서 example-auth-id를 Lambda 권한 부여자의 authorizerId로
AWS CLI를 통한 Lambda 권한 부여자로 REST API에 Lambda 간접 호출 권한 추가
다음 add-permission AWS CLI 명령을 실행합니다.
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
참고: 이전 명령에서 다음을 대체합니다.
function-name 값을 Lambda 함수의 이름으로
source-arn 값을 API의 소스 ARN으로
statement-id 값을 해당 명령문을 고유하게 식별하는 명령문 식별자로
관련 정보
관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 2년 전lg...
- AWS 공식업데이트됨 2년 전