내용으로 건너뛰기

API Gateway REST API와 함께 Lambda 권한 부여자를 사용할 때 발생하는 ‘HTTP 403 Forbidden’ 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

Amazon API Gateway REST API용 AWS Lambda 권한 부여자를 생성한 후 API 직접 호출에 대해 ‘403 Forbidden’ 오류가 발생합니다.

간략한 설명

참고: 이 솔루션은 REST API용으로 구성된 Lambda 권한 부여자와 관련이 있는 403 오류만 해결합니다. 다른 유형의 403 오류를 해결하는 방법에 대한 자세한 내용은 API Gateway에서 발생하는 HTTP 403 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

‘403 Forbidden’ 오류는 다음과 같은 이유로 발생할 수 있습니다.

  • Lambda 권한 부여자 함수에서 반환한 AWS Identity and Access Management(IAM) 정책 문서는 호출자에 대한 액세스를 명시적으로 거부합니다.
  • Lambda 권한 부여자 함수에서 반환한 IAM 정책 문서는 호출자에 대한 액세스를 허용하지 않거나 암시적으로 거부합니다. API에 연결된 리소스 정책도 호출자에 대한 액세스를 허용하지 않거나 암시적으로 거부합니다.
  • API에 호출자에 대한 액세스를 명시적으로 거부하는 리소스 정책이 첨부되어 있습니다.

API 직접 호출에 누락되거나, null이거나, 검증되지 않은 토큰 또는 자격 증명 원본이 있는 경우 ‘401 Unauthorized’ 오류가 발생합니다. 자세한 내용은 Lambda 권한 부여자를 생성한 후 API Gateway ‘401 Unauthorized’ 오류가 발생하는 이유는 무엇입니까?를 참조하십시오.

해결 방법

오류 원인 확인

아직 활성화하지 않았다면 API Gateway REST API에 대한 Amazon CloudWatch Logs를 활성화하십시오. 권한 부여자 구성을 변경하는 경우 API를 재배포하십시오.

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

오류 로그 메시지 검토

API Gateway의 응답에서 다음 예제의 오류 로그 메시지를 찾아보십시오.

명시적 거부가 포함된 IAM 정책 문서를 반환하는 Lambda 권한 부여자 함수의 오류 로그 메시지 예:

{    "message": "User is not authorized to access this resource with an explicit deny"}

호출자에 대한 액세스를 암시적으로 거부하는 리소스 정책이 첨부된 REST API의 오류 로그 메시지 예:

{    "message": "User is not authorized to access this resource"}

호출자에 대한 액세스를 명시적으로 거부하는 리소스 정책이 첨부된 REST API의 오류 로그 메시지 예:

{    "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny"}

참고: IAM 정책이 제어하는 API Gateway API에 대한 자세한 내용은 정책 평가 결과 표를 참조하십시오.

API Gateway 로그 보기

권한 부여 워크플로를 검토하려면 CloudWatch Logs에서 API Gateway 실행 로그를 확인하십시오. Lambda 권한 부여자의 출력API Gateway 리소스 정책 평가 결과를 확인하십시오. 다음 예에서 로그 오류 메시지를 찾아보십시오.

필수 토큰이 없거나 토큰 검증과 일치하지 않는 경우의 오류 로그 메시지 예:

Extended Request Id: EXAMPLEabcIdGxzR=Unauthorized request: request-id

참고: 로그의 확장 요청 ID 값은 무작위로 생성되므로 다릅니다.

Lambda 권한 부여자가 액세스를 거부하는 정책을 반환하는 경우의 오류 로그 메시지 예:

Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/lambda-authorizer-arn/invocationsAuthorizer result body before parsing:  {  
  "principalId": "user",  
  "policyDocument": {  
    "Version": "2012-10-17",  
    "Statement": [  
      {  
        "Action": "execute-api:Invoke",  
        "Effect": "Deny",  
        "Resource": "resource-arn"  
      }  
    ]  
  }  
}  
Using valid authorizer policy for principal: principal  
Successfully completed authorizer execution  
The client is not authorized to perform this operation.

참고: 반환되는 정책은 Lambda 권한 부여자에 따라 다릅니다. 반환된 정책의 resource-arn에 요청 리소스가 포함되어 있지 않은 경우 정책은 요청을 암시적으로 거부합니다.

API Gateway 리소스 정책에서 요청을 거부하는 경우의 오류 로그 메시지 예:

Extended Request Id: EXAMPLE1ABdGeZB=ExplicitDenyException User: anonymous is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny: request-id

Lambda 권한 부여자의 ‘not authorized to access this resource’ 오류 해결

정책 캐싱으로 인해 ‘not authorized to access this resource’ 오류가 간헐적으로 표시될 수 있습니다. 권한 부여 캐싱이 활성화되어 있는지 확인하려면 API Gateway 콘솔에서 Lambda 권한 부여자의 구성을 검토하십시오. 그 후 다음 작업 중 하나를 수행하십시오.

  • 일회성 테스트의 경우 flush-stage-authorizers-cache AWS CLI 명령을 실행합니다. 권한 부여자의 캐시 항목이 비워지면 다시 API를 직접적으로 호출합니다.
  • 정책 캐싱을 비활성화하고 API를 재배포하여 변경 사항을 커밋한 다음, 다시 API를 직접적으로 호출합니다.
    참고: 요청 파라미터 기반 권한 부여자에 대해 정책 캐싱이 비활성화된 경우 API Gateway는 Lambda 권한 부여자 함수를 간접적으로 호출하기 전에 API에 대한 직접 호출을 검증하지 않습니다.
  • 권한 부여자의 캐시 키를 변경하려면 토큰 원본(토큰 기반 권한 부여자의 경우) 또는 자격 증명 원본(요청 파라미터 기반 권한 부여자의 경우)에 지정된 헤더 이름을 업데이트합니다. API를 재배포하여 변경 사항을 커밋합니다. 그런 다음, 새로 구성된 토큰 헤더 또는 자격 증명 원본을 사용하여 다시 API를 직접적으로 호출합니다.

권한 부여자가 호출자에 대한 액세스를 명시적으로 거부하는 이유를 확인하려면 Lambda 권한 부여자 함수의 코드를 검토하십시오. 문제가 캐싱으로 인해 발생한 것으로 판단되면 호출자에게 액세스를 허용하도록 코드를 업데이트하십시오.

지침은 캐싱이 활성화된 Lambda 권한 부여자를 사용하는 API Gateway 프록시 리소스가 HTTP 403 "User is not authorized to access this resource" 오류를 반환하는 이유는 무엇입니까?를 참조하십시오.

‘not authorized to perform: execute-api:Invoke’ 오류 해결

API 리소스 정책이 유효하지 않은지 또는 직접 호출에 대한 액세스를 명시적으로 거부하는지 확인하려면 API 리소스 정책을 검토하십시오. API 실행 로그를 확인하여 리소스 정책에 대한 응답 결과를 얻을 수 있습니다. 자세한 내용은 Amazon API Gateway의 액세스 정책 언어 개요Lambda 권한 부여자 및 리소스 정책을 참조하십시오.

관련 정보

API Gateway Lambda 권한 부여자 사용

API Gateway의 REST API에 대한 액세스 제어 및 관리