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

5분 분량
0

AWS Lambda 권한 부여자를 생성한 후 Amazon API Gateway REST API를 호출하면 403 Forbidden 오류가 발생합니다. 이 오류를 해결하려면 어떻게 해야 하나요?

간략한 설명

이 오류는 다음과 같은 경우에 발생할 수 있습니다.

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

참고: 이 문서에서는 REST API 전용으로 구성된 Lambda 권한 부여자와 관련된 403 오류를 해결합니다. 다른 유형의 403 오류 문제 해결에 대한 자세한 내용은 API Gateway의 HTTP 403 Forbidden 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

해결 방법

오류 원인 확인

참고:

1.    API Gateway의 응답에서 오류 메시지를 검토합니다. 다음 중 하나와 유사한 오류 메시지를 찾습니다.

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

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

묵시적 거부가 포함된 IAM 정책 문서를 반환하는 Lambda 권한 부여자 함수에 대한 오류 메시지 예시

{
    "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>"
}

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

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

참고: API Gateway API에 대한 액세스가 IAM 정책에 의해 제어될 때의 결과 동작에 대한 자세한 내용은 정책 평가 결과표를 참조하세요.

2.    CloudWatch에서 API Gateway 실행 로그를 확인하고 권한 부여 워크플로를 검토합니다. Lambda 권한 부여자의 출력API Gateway의 리소스 정책 평가 결과를 확인합니다. 다음 중 하나와 유사한 로그 오류 메시지가 표시됩니다.

필수 토큰이 없거나 토큰 유효성 검사와 일치하지 않는 경우의 로그 오류 메시지 예시

Extended Request Id: MY92nHDwwwIdGxzR=
Unauthorized request: <request-id>

참고: 확장 요청 ID는 무작위로 생성됩니다. 로그의 확장 요청 ID 값은 달라집니다.

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

Sending request to https://lambda.<region>.amazonaws.com/2015-03-31/functions/<lambda-authorizer-arn>/invocations
Authorizer 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: MY-BIVb4GEdGeZB=
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" 오류 해결

정책 캐싱으로 인해 간헐적으로 이 리소스에 액세스할 수 있는 권한이 없음 오류가 발생할 수 있습니다. **권한 부여 캐싱(Authorization Caching)**이 활성화되어 있는지 확인하려면 API Gateway 콘솔에서 Lambda 권한 부여자의 구성을 검토합니다. 이어서, 다음 중 하나를 수행합니다.

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

오류가 지속적으로 표시되는 경우 Lambda 권한 부여자 함수의 코드를 검토하여 권한 부여자가 호출자에 대한 액세스를 명시적으로 거부하는 이유를 확인합니다. 캐싱으로 인해 문제가 발생한 것으로 확인되면 호출자에게 액세스할 수 있도록 코드를 업데이트할 수 있습니다. 자세한 내용은 캐싱이 활성화된 Lambda 권한 부여자가 있는 API Gateway 프록시 리소스가 HTTP 403 오류를 반환하는 이유는 무엇입니까?를 참조하세요.

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

API의 리소스 정책을 검토하여 API 리소스 정책이 유효하지 않은지 또는 호출에 대한 액세스를 명시적으로 거부하는지 확인합니다. API의 실행 로그를 확인하여 리소스 정책에 대한 응답 결과를 확인할 수 있습니다.

자세한 내용은 Amazon API Gateway에 대한 액세스 정책 언어 개요Lambda 권한 부여자 및 리소스 정책을 참조하세요.


관련 정보

API Gateway Lambda 권한 부여자 사용

재배포가 필요한 REST API 업데이트

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