API Gateway의 HTTP 403 오류를 해결하려면 어떻게 해야 합니까?

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

Amazon API Gateway API를 호출하면 403 오류가 발생합니다. API Gateway의 403 오류를 해결하려면 어떻게 해야할까요?

간략한 설명

HTTP 403 응답 코드는 클라이언트에서 유효한 URL에 액세스하는 것이 금지되었다는 뜻입니다. 서버에서 요청을 이해하지만, 클라이언트 측 문제로 인해 요청을 이행할 수 없습니다.

API Gateway API는 다음과 같은 이유로 403 응답을 반환할 수 있습니다.

문제 응답 헤더 오류 메시지 근본 원인
액세스가 거부됨 "x-amzn-errortype" = "AccessDeniedException" "User is not authorized to access this resource with an explicit deny" 호출자가 Lambda 권한 부여자를 사용하는 API에 액세스할 수 없습니다.
액세스가 거부됨 "x-amzn-errortype" = "AccessDeniedException" "User: <user-arn> is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny"

호출자가 AWS Identity and Access Management(IAM) 권한 부여를 사용하는 API에 액세스할 수 없습니다. 또는 API에 호출자에 대한 액세스를 명시적으로 거부하는 연결된 리소스 정책이 있습니다.

자세한 내용은 IAM 인증 및 리소스 정책을 참조하십시오.

액세스가 거부됨 "x-amzn-errortype" = "AccessDeniedException" "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn>"

호출자가 IAM 권한 부여를 사용하는 API에 액세스할 수 없습니다. 또는 API에 호출자가 API를 호출하는 것을 명시적으로 허용하지 않는 연결된 리소스 정책이 있습니다.

자세한 내용은 IAM 인증 및 리소스 정책을 참조하십시오.

액세스가 거부됨 "x-amzn-errortype" = "AccessDeniedException" "The security token included in the request is invalid." 호출자가 잘못된 IAM 키를 사용하여 IAM 권한 부여를 사용하는 API에 액세스했습니다.
인증 토큰이 없음 "x-amzn-errortype" = "MissingAuthenticationTokenException" "Missing Authentication Token" 요청에서 인증 토큰을 찾을 수 없습니다.
인증 토큰이 만료됨 "x-amzn-errortype" = "InvalidSignatureException" "Signature expired" 요청의 인증 토큰이 만료되었습니다.
API 키가 유효하지 않음 "x-amzn-errortype" = "ForbiddenException" "Invalid API Key identifier specified" 호출자가 API 키를 요구하는 메서드에 대해 잘못된 API 키를 사용했습니다.
서명이 유효하지 않음 "x-amzn-errortype" = "InvalidSignatureException" "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method." IAM 권한 부여를 사용하는 API에 액세스할 때 요청의 서명이 서버의 서명과 일치하지 않습니다.
AWS WAF가 필터링됨 "x-amzn-errortype" = "ForbiddenException" "Forbidden" API에서 AWS WAF를 활성화하면 웹 애플리케이션 방화벽(WAF) 필터링에 의해 요청이 차단됩니다.
리소스 경로가 존재하지 않음 "x-amzn-errortype" = "MissingAuthenticationTokenException" "Missing Authentication Token" "Authorization" 헤더가 없는 요청이 존재하지 않는 API 리소스 경로로 전송됩니다.
리소스 경로가 존재하지 않음 "x-amzn-errortype" = "IncompleteSignatureException" "Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=allow" "Authorization" 헤더가 있는 요청이 존재하지 않는 API 리소스 경로로 전송됩니다.
퍼블릭 DNS 이름을 잘못 사용하여 프라이빗 API 호출 "x-amzn-errortype" = "ForbiddenException" "Forbidden"

퍼블릭 DNS 이름을 잘못 사용하여 Amazon Virtual Private Cloud(Amazon VPC) 내에서 프라이빗 API를 호출하는 경우입니다. 예: 요청에서 "Host" 또는 "x-apigw-api-id" 헤더가 누락되었습니다.

자세한 내용은 엔드포인트 고유의 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API 호출 단원을 참조하세요.

기본 execute-api 엔드포인트를 사용하여 사용자 지정 도메인 이름을 가진 REST API를 호출합니다.

"x-amzn-errortype" = "ForbiddenException" "Forbidden"

호출자는 기본 엔드포인트를 비활성화한 후 기본 execute-api 엔드포인트를 사용하여 REST API를 호출합니다.

자세한 내용은 REST API에 대한 기본 엔드포인트 비활성화 단원을 참조하세요.

유효하지 않은 클라이언트 인증서를 사용하여 상호 전송 계층 보안(TLS)이 필요한 API Gateway 사용자 지정 도메인 이름을 호출합니다. "x-amzn-errortype" = "ForbiddenException" "Forbidden"

API 요청에 나타나는 클라이언트 인증서가 사용자 지정 도메인 이름의 신뢰 저장소에서 발행되지 않았거나, 또는 유효하지 않습니다.

자세한 내용은 상호 TLS가 필요한 API Gateway 사용자 지정 도메인 이름에서 HTTP 403 Forbidden 오류를 해결하려면 어떻게 해야 합니까?단원을 참조하세요.

해결 방법

오류의 원인 고려

403 오류가 다른 리소스에서 보고된 경우 오류의 또 다른 원인이 있을 수 있습니다. 예를 들면 다음과 같습니다.

  • 웹 브라우저에 오류가 보고된 경우 해당 오류는 잘못된 프록시 설정이 원인일 수 있습니다. HTTP 액세스가 허용되지 않는 경우 프록시 서버가 403 오류를 반환합니다.
  • API 앞에 다른 AWS 서비스가 있는 경우 해당 서비스가 응답에 403 오류가 있는 요청을 거부할 수 있습니다. 예: Amazon CloudFront입니다.

오류의 원인 파악

아직 하지 않았다면 API에 대한 Amazon CloudWatch 액세스 로깅을 설정합니다. 그런 다음 CloudWatch에서 API의 실행 로그를 확인하여 요청이 API에 도달하는지 확인합니다.

참조: HTTP API는 실행 로깅을 지원하지 않습니다. 상호 TLS가 필요하고 HTTP API를 호출하는 사용자 지정 도메인 이름에서 반환되는 403 오류를 해결하려면 다음을 수행해야 합니다.

1.    테스트용으로만 REST API를 호출하는 사용자 지정 도메인 이름에 대한 새 API 매핑을 생성합니다.

2.    CloudWatch에서 REST API의 실행 로그를 확인하여 오류의 원인을 파악합니다.

3.    오류가 식별 및 해결되면 사용자 지정 도메인 이름에 대한 API 매핑을 HTTP API로 다시 라우팅합니다.

요청된 리소스가 API 정의에 있는지 확인

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류 메시지가 표시되는 경우 AWS CLI 최신 버전을 사용 중인지 확인하세요.

API Gateway 콘솔 또는 AWS CLI를 사용하여 다음을 확인합니다.

  • API는 최신 API 정의를 사용하여 배포해야 합니다.
  • 요청된 리소스가 API 정의에 포함되어 있습니다.

curl을 사용하여 요청 및 응답 세부 정보 가져오기

오류를 재현할 수 있는 경우 curl -v 명령을 사용하여 클라이언트와 API 사이의 세부 정보를 더 많이 가져옵니다.

curl -v 명령 예제

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

참고: 자세한 내용은 curl 프로젝트 웹 사이트를 참조하세요.

요청 헤더가 올바른지 확인하기

오류가 유효하지 않은 API 키의 결과인 경우, 요청에서 "x-api-key" 헤더가 전송되었는지 확인합니다.

인터페이스 VPC 엔드포인트의 DNS 설정이 올바르게 설정되어 있는지 확인하기

참고: 인터페이스 VPC 엔드포인트만 있는 Amazon VPC에서 호출된 API에 대해 다음을 확인하십시오.

인터페이스 엔드포인트의 DNS 설정이 사용 중인 API 유형에 따라 올바르게 설정되었는지 확인합니다.

다음 사항에 유의하세요.

API의 리소스 정책 검토하기

API의 리소스 정책을 검토하여 다음을 확인합니다.

HTTP 요청 및 응답 메시지 검토

가능한 경우 웹 브라우저에서 오류를 재현합니다. 그런 다음 브라우저의 네트워크 도구를 사용하여 HTTP 요청 및 응답 메시지를 캡처하고, 이를 분석하여 오류 발생 지점을 확인합니다.

참조: 오프라인 분석을 위해 이 메시지를 HTTP 아카이브(HAR) 파일에 저장합니다.