AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

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

7분 분량
0

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

간략한 설명

클라이언트가 유효한 URL에 액세스할 수 없는 경우 HTTP 403 응답 코드를 받게 됩니다. 서버가 요청을 이해하지만 클라이언트 측 문제로 인해 요청을 처리할 수 없습니다.
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에 호출자에 대한 액세스를 명시적으로 거부하는 리소스 정책이 첨부되어 있습니다. 자세한 내용은 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 권한 부여를 사용하는 API에 액세스하는 데 유효하지 않은 IAM 키를 사용했습니다.
인증 토큰 누락"x-amzn-errortype" = "MissingAuthenticationTokenException""Missing Authentication Token"요청에서 인증 토큰을 찾을 수 없습니다.
인증 토큰이 만료되었습니다"x-amzn-errortype" = "InvalidSignatureException""Signature expired"요청의 인증 토큰이 만료되었습니다.
API 키가 유효하지 않음"x-amzn-errortype" = "ForbiddenException""Forbidden"호출자가 API 키가 필요한 메서드에 API 키를 사용했지만 API 키가 정확하지 않습니다. 또는 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 리소스 경로로 전송되었습니다. 자세한 내용은 API Gateway REST API 엔드포인트 403 "인증 토큰 누락" 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
리소스 경로가 존재하지 않음"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" 헤더가 누락되었습니다. 자세한 내용은 엔드포인트별 퍼블릭 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 Frobidden 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
기본 경로 매핑 없이 사용자 지정 도메인 이름 호출"x-amzn-errortype" = "ForbiddenException""Forbidden"호출자가 사용자 지정 도메인을 호출하고 기본 경로를 API에 매핑하지 않습니다. 자세한 내용은 API Gateway의 REST API에 대한 사용자 지정 도메인 이름을 참조하십시오.
도메인 URL에 스테이지가 포함된 경우 사용자 지정 도메인을 활성화하여 API 호출"x-amzn-errortype" = "MissingAuthenticationTokenException""Missing Authentication Token"API 매핑은 API 및 스테이지와 선택 사항으로 매핑에 사용할 경로를 지정합니다. 따라서 API의 스테이지가 사용자 지정 도메인에 매핑되면 더 이상 URL에 스테이지를 포함할 필요가 없습니다. 자세한 내용은 API 스테이지를 REST API에 대한 사용자 지정 도메인 이름에 매핑을 참조하십시오.
요청 URL의 스테이지가 유효하지 않음"x-amzn-errortype" = "ForbiddenException""Forbidden"호출자의 요청 URL에 존재하지 않는 스테이지가 포함되어 있습니다. 자세한 내용은 API Gateway에서 REST API 호출을 참조하십시오.

해결 방법

오류 원인 파악

다음 예와 같은 다른 리소스에서 403 오류가 보고되면 오류의 다른 원인이 있을 수 있습니다.

  • 웹 브라우저에서 오류가 보고되면 잘못된 프록시 설정으로 인해 HTTP 액세스가 허용되지 않을 수 있습니다.
  • Amazon CloudFront와 같은 다른 AWS 서비스가 API 앞에 있는 경우 서비스가 요청을 거부할 수 있습니다.

오류의 원인을 확인하려면 API에 대한 Amazon CloudWatch 액세스 로깅을 설정하십시오. 그런 다음 CloudWatch에서 API의 로그 이벤트를 확인하여 요청이 API에 도달하는지 확인합니다.

참고: HTTP API는 실행 로깅을 지원하지 않습니다.

상호 TLS가 필요하고 HTTP API를 호출하는 사용자 지정 도메인 이름에서 반환되는 403 오류 문제를 해결하려면 다음 단계를 완료하십시오.

  1. 새 API 매핑을 생성하여 사용자 지정 도메인 이름에 대한 REST API 호출을 테스트합니다.
  2. 오류의 원인을 확인하려면 CloudWatch에서 REST API의 로그 이벤트를 확인하십시오.
  3. 오류를 확인하고 해결한 후에는 API 매핑을 HTTP API로 다시 라우팅합니다.

요청된 리소스가 API 정의에 존재하는지 확인

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, 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}

요청 헤더가 정확한지 확인

유효하지 않은 API 키로 인해 오류가 발생한 경우, 요청에 "x-api-key" 헤더가 전송되었는지 확인하십시오. 헤더가 포함되어 있지 않거나 정확하지 않은 경우 요청 헤더를 업데이트하십시오.

인터페이스 Amazon VPC 엔드포인트의 DNS 설정이 정확하게 설정되었는지 확인

참고: 다음 작업은 인터페이스 VPC 엔드포인트만 있는 Amazon VPC에서 호출하는 API에 적용됩니다.

인터페이스 엔드포인트의 DNS 설정이 사용하는 API 유형에 따라 정확하게 설정되었는지 확인하십시오.

Amazon VPC 내부에서 리전 API를 호출하려면 인터페이스 엔드포인트에서 프라이빗 DNS 이름을 비활성화하십시오. 그러면 퍼블릭 DNS가 엔드포인트의 호스트 이름을 확인할 수 있습니다. 자세한 내용은 프라이빗 API 생성을 참조하십시오.

API의 프라이빗 DNS 이름을 사용하여 Amazon VPC 내에서 프라이빗 API를 호출하려면 엔드포인트에서 프라이빗 DNS 이름을 활성화하십시오. 그러면 Amazon VPC 로컬 서브넷 리소스가 인터페이스 엔드포인트의 호스트 이름을 확인할 수 있습니다.

참고: 다음 옵션 중 하나를 사용하여 프라이빗 API를 호출하는 경우 프라이빗 API의 퍼블릭 DNS 이름 또는 Amazon Route 53 별칭을 설정할 필요가 없습니다.

API의 리소스 정책 검토

API의 리소스 정책을 검토하여 다음 구성을 확인하십시오.

HTTP 요청 및 응답 메시지 검토

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

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

관련 정보

일반적인 오류

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

API Gateway 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?

API 게이트웨이 REST API 또는 WebSocket API의 문제 해결을 위해 CloudWatch 로그를 활성화하려면 어떻게 해야 합니까?

curl 웹사이트의 Curl 프로젝트