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

최종 업데이트 날짜: 2020년 8월 10일

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

간략한 설명

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

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

문제 응답 헤더 오류 메시지 세부 정보
액세스가 거부됨 "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 호출을 참조하십시오.

​해결 방법

다음 문제 해결 단계를 따르면 오류의 원인을 파악하는 데 도움이 됩니다.

오류의 원인 고려

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

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

API 액세스 로깅을 활성화하여 조사합니다.

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

API Gateway 콘솔 또는 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 API에 요청된 리소스가 있는지 확인합니다.

참고: API는 최신 API 정의를 사용하여 배포해야 합니다.

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

오류를 재현할 수 있는 경우 curl -v를 사용하여 클라이언트와 API 사이의 세부 정보를 더 많이 가져올 수 있습니다. 예를 들어 다음과 같습니다.

curl -X GET -v https://apiId.execute-api.region.amazonaws.com/stageName/resourceName

curl에 대한 자세한 내용은 curl 프로젝트 웹 사이트를 참조하십시오.

헤더 확인

API 키에 대한 오류인 경우 요청에서 "x-api-key" 헤더가 전송되었는지 확인합니다.

VPC 종단점의 DNS 설정 확인

인터페이스 VPC 종단점이 있는 Amazon VPC에서 API가 호출되면 인터페이스 엔드포인트의 DNS 설정이 API 유형에 따라 올바르게 설정되어 있는지 확인합니다.

리소스 정책 확인

다음 사항을 확인하십시오.

  • 인터페이스 VPC 종단점이 있는 Amazon VPC에서 API가 호출되면 API의 리소스 정책이 Amazon VPC 또는 인터페이스 엔드포인트에 API에 대한 액세스 권한을 부여해야 합니다.
  • 리소스 정책의 리소스 사양과 형식이 올바릅니다. (리소스 정책을 저장할 때 리소스 사양의 확인은 없습니다.) 예제는 API Gateway 리소스 정책 예제를 참조하십시오.

API 액세스 로그 분석

API의 액세스 로그를 활성화하고 분석하여 요청이 API에 도달하는지 확인합니다.

HTTP 요청 및 응답 메시지 분석

가능한 경우 웹 브라우저에서 오류를 재현하고 브라우저의 네트워크 도구를 사용하여 분석을 위한 HTTP 요청 및 응답 메시지를 캡처합니다. 오프라인 분석을 위해 이 메시지를 HTTP 아카이브(HAR) 파일에 저장합니다.

팁: HAR 파일 생성에 대한 지침은 AWS Support 사례에 대해 브라우저에서 HAR 파일을 생성하려면 어떻게 해야 합니까?를 참조하십시오.

클라이언트와 API 간 요청 및 응답을 분석하고 오류가 발생한 위치를 확인합니다.