API Gateway의 HTTP 403 오류를 해결하려면 어떻게 해야 하나요?

7분 분량
0

Amazon API Gateway API를 호출하면 403 오류가 발생합니다.

간략한 설명

HTTP 403 응답 코드는 클라이언트가 유효한 URL에 액세스하는 것이 금지되었음을 의미합니다. 서버가 요청을 이해하지만 클라이언트 측 문제로 인해 요청을 처리할 수 없는 경우입니다.

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

문제응답 헤더오류 메시지근본 원인
액세스 거부됨"x-amzn-errortype" = "AccessDeniedException""User is not authorized to access this resource with an explicit deny"호출자가 API 게이트웨이 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에 호출자에 대한 액세스를 명시적으로 거부하는 리소스 정책이 첨부되어 있습니다.<br><br>자세한 내용을 보려면 IAM 인증 및 리소스 정책을 참조하세요.
액세스 거부됨"x-amzn-errortype" = "AccessDeniedException""User: anonymous is not authorized to perform: execute-api:Invoke on resource:<api-resource-arn>"호출자가 IAM 권한 부여를 사용하는 API에 액세스할 권한이 없습니다. 또는 API에 호출자에 대한 액세스를 명시적으로 허용하지 않는 리소스 정책이 첨부되어 있습니다.<br><br>자세한 내용을 보려면 IAM 인증 및 리소스 정책을 참조하세요.
액세스 거부됨"x-amzn-errortype" = "AccessDeniedException""The security token included in the request is invalid."호출자가 IAM 권한 부여를 사용하는 API에 액세스하는 데 유효하지 않은 IAM 키를 사용했습니다.
Missing authentication token"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를 활성화하는 경우 웹 애플리케이션 방화벽 필터링에 의해 요청이 차단됩니다.
리소스 경로가 존재하지 않음"x-amzn-errortype" = "MissingAuthenticationTokenException""Missing Authentication Token""Authorization" 헤더가 없는 요청이 존재하지 않는 API 리소스 경로로 전송되었습니다.<br><br>자세한 내용을 보려면 API Gateway REST API 엔드포인트에서 403 "Missing Authentication Token" 오류 문제를 해결하려면 어떻게 해야 하나요?를 참고하세요.
리소스 경로가 존재하지 않음"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(VPC) 내에서 프라이빗 API를 호출합니다. 예: "Host" 또는 "x-apigw-api-id" 헤더가 요청에 없습니다.<br><br>자세한 내용을 보려면 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API 호출을 참조하세요.
기본 execute-api 엔드포인트를 사용하여 사용자 지정 도메인 이름을 가진 REST API 호출"x-amzn-errortype" = "ForbiddenException""Forbidden"호출자는 기본 엔드포인트를 비활성화한 후 기본 execute-api 엔드포인트를 사용하여 REST API를 호출합니다.<br><br>자세한 내용을 보려면 REST API의 기본 엔드포인트 비활성화하기를 참조하세요.
유효하지 않은 클라이언트 인증서를 사용하여 상호 전송 계층 보안(TLS)이 필요한 API Gateway 사용자 지정 도메인 이름을 호출합니다."x-amzn-errortype" = "ForbiddenException""Forbidden"API 요청에 제공된 클라이언트 인증서가 사용자 지정 도메인 이름의 truststore에서 발급되지 않았거나 유효하지 않습니다.<br><br>자세한 내용을 보려면 상호 TLS가 필요한 API Gateway 사용자 지정 도메인 이름에서 HTTP 403 Forbidden 오류 문제를 해결하려면 어떻게 하나요?를 참조하세요.
기본 경로 매핑 없이 사용자 지정 도메인 이름 호출"x-amzn-errortype" = "ForbiddenException""Forbidden"호출자가 기본 경로가 API에 매핑되지 않은 사용자 지정 도메인을 호출합니다.<br><br>자세한 내용을 보려면 REST API에 대한 사용자 지정 도메인 이름 설정을 참조하세요.
도메인 URL에 단계가 포함된 경우 사용자 지정 도메인을 활성화하여 API 호출"x-amzn-errortype" = "MissingAuthenticationTokenException""Missing Authentication Token"API 매핑은 API, 단계, 그리고 선택적으로 매핑에 사용할 경로를 지정합니다. 따라서 API의 단계가 사용자 지정 도메인에 매핑되면 더 이상 URL에 단계를 포함할 필요가 없습니다.<br><br>자세한 내용을 보려면 REST API용 API 매핑으로 작업하기를 참조하세요.
요청 URL의 단계가 유효하지 않음"x-amzn-errortype" = "ForbiddenException""Forbidden"호출자의 요청 URL에 존재하지 않는 단계가 포함되어 있습니다. 단계가 존재하고 요청 URL의 철자가 맞는지 확인하세요.<br><br>자세한 내용을 보려면 Amazon API Gateway에서 REST API 호출하기를 참조하세요.

해결 방법

오류의 원인을 고려하기

다른 리소스에서 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 -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

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

요청 헤더가 올바른지 확인

유효하지 않은 API 키로 인해 오류가 발생한 경우, 요청에 "x-api-key" 헤더가 전송되었는지 확인하세요.

모든 인터페이스 Amazon VPC 엔드포인트의 DNS 설정이 올바르게 설정되었는지 확인하세요.

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

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

다음 사항에 유의하세요.

  • Amazon VPC 내부에서 리전 API를 호출하려면 인터페이스 엔드포인트에서 프라이빗 DNS 이름을 비활성화해야 합니다. 그런 다음 엔드포인트의 호스트 이름을 퍼블릭 DNS로 확인할 수 있습니다. 자세한 내용을 보려면 Amazon API Gateway에서 프라이빗 API 생성을 참조하세요.
  • API의 비공개 DNS 이름을 사용하여 Amazon VPC 내부에서 프라이빗 API를 호출하려면 인터페이스 엔드포인트에서 프라이빗 DNS 이름을 활성화해야 합니다. 그런 다음 인터페이스 엔드포인트의 호스트 이름을 Amazon VPC의 로컬 서브넷 리소스로 확인할 수 있습니다. 자세한 내용을 보려면 프라이빗 API를 호출하는 방법을 참조하세요.
    참고: 다음 중 하나를 사용하여 프라이빗 API를 호출하는 경우에는 프라이빗 DNS를 설정할 필요가 없습니다.
    프라이빗 API의 퍼블릭 DNS 이름.
    -또는-
    Amazon Route 53 별칭.

API의 리소스 정책 검토

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

HTTP 요청 및 응답 메시지 검토하기

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

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

관련 정보

일반적 오류 - Amazon API Gateway

특정 IP 주소만 내 API Gateway REST API에 액세스하도록 허용하려면 어떻게 해야 하나요?

API Gateway 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제는 어떻게 해결해야 하나요?

API Gateway REST API 또는 WebSocket API 문제 해결을 위해 Amazon CloudWatch 로그를 사용 설정하려면 어떻게 해야 하나요?