Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
API Gateway의 HTTP 403 오류를 해결하려면 어떻게 해야 합니까?
Amazon API Gateway API를 호출하면 403 오류가 발생합니다.
간략한 설명
클라이언트가 유효한 URL에 액세스할 수 없는 경우 ‘HTTP 403’ 상태 코드 오류가 발생합니다. 서버는 요청을 이해하지만 클라이언트 측 문제로 인해 서버가 요청을 처리할 수 없습니다.
API Gateway API는 다음과 같은 이유로 ‘HTTP 403’ 오류를 반환할 수 있습니다.
| 문제 | 응답 헤더 | 오류 메시지 | 근본 원인 |
| 액세스 거부됨 | "x-amzn-errortype" = "AccessDeniedException" | "User is not authorized to access this resource with an explicit deny in an identity-based policy" | API에서 사용하는 API Gateway Lambda 권한 부여자는 호출자에게 권한을 부여하지 않습니다. |
| 액세스 거부됨 | "x-amzn-errortype" = "AccessDeniedException" | "User: user-arn is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny" | API에서 사용하는 AWS Identity and Access Management(IAM) 권한 부여는 호출자에게 권한을 부여하지 않습니다. 또는 API에 연결된 리소스 정책이 호출자에 대한 액세스를 명시적으로 거부합니다. 자세한 내용은 IAM 인증 및 리소스 정책을 참조하십시오. |
| 액세스 거부됨 | "x-amzn-errortype" = "AccessDeniedException" | "User: anonymous is not authorized to perform: execute-api:Invoke on resource:api-resource-arn" | API에서 사용하는 IAM 권한 부여는 호출자에게 권한을 부여하지 않습니다. 또는 API에 연결된 리소스 정책이 호출자의 API 호출을 명시적으로 허용하지 않습니다. 자세한 내용은 IAM 인증 및 리소스 정책을 참조하십시오. |
| 액세스 거부됨 | "x-amzn-errortype" = "AccessDeniedException" | "The security token included in the request is invalid." | 호출자가 IAM 권한 부여를 사용하는 API에 액세스하는 데 유효하지 않은 IAM 키를 사용했습니다. |
| API 키가 유효하지 않음 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 호출자가 API 키가 필요한 메서드에 대해 잘못된 API 키를 사용했습니다. 또는 스테이지에 연결되는 사용량 계획에 API 키를 연결하지 않았습니다. 또는 API 키를 비활성화했거나 키가 존재하지 않습니다. |
| AWS WAF 필터링됨 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 웹 애플리케이션 방화벽 필터링은 API에서 AWS WAF를 활성화할 때 요청을 차단합니다. |
| 퍼블릭 DNS 이름을 잘못 사용하여 프라이빗 API 호출 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 퍼블릭 DNS 이름을 잘못 사용하여 Amazon Virtual Private Cloud(Amazon VPC) 내에서 프라이빗 API를 호출했습니다. 예: 요청에 Host 또는 x-apigw-api-id 헤더가 누락되었습니다. 자세한 내용은 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API 호출을 참조하십시오. |
| 기본 경로 매핑 없이 사용자 지정 도메인 이름 호출 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 호출자가 사용자 지정 도메인을 호출하고 기본 경로를 API에 매핑하지 않습니다. 자세한 내용은 API Gateway의 퍼블릭 REST API에 대한 사용자 지정 도메인 이름을 참조하십시오. |
| 프라이빗 사용자 지정 도메인 이름 호출 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 프라이빗 사용자 지정 도메인 이름을 VPC 엔드포인트와 연결하지 않았습니다. |
| 요청 URL의 스테이지가 유효하지 않음 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 호출자의 요청 URL에 존재하지 않는 스테이지가 포함되어 있습니다. 자세한 내용은 API Gateway에서 REST API 호출을 참조하십시오. |
| 유효하지 않은 클라이언트 인증서를 사용하여 상호 TLS가 필요한 API Gateway 사용자 지정 도메인 이름 호출 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 사용자 지정 도메인 이름의 신뢰 저장소가 API 요청에 있는 클라이언트 인증서를 발급하지 않거나 인증서가 유효하지 않습니다. 자세한 내용은 상호 TLS가 필요한 API Gateway 사용자 지정 도메인 이름에서 HTTP 403 Frobidden 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오. |
| 기본 execute-api 엔드포인트를 사용하여 사용자 지정 도메인 이름이 있는 REST API 호출 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 기본 엔드포인트를 비활성화한 후 호출자가 기본 execute-api 엔드포인트를 사용하여 REST API를 호출합니다. 자세한 내용은 REST API에 대한 기본 엔드포인트 비활성화를 참조하십시오. |
| 사용자 지정 도메인 이름으로 라우팅 규칙 사용 | "x-amzn-errortype" = "ForbiddenException" | "Forbidden" | 사용자 지정 도메인 이름으로 일치하는 라우팅 규칙을 구성하지 않았습니다. 자세한 내용은 라우팅 규칙 관련 문제 해결을 참조하십시오. |
| 리소스 경로가 존재하지 않음 | "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 리소스 경로로 전송했습니다. |
| 인증 토큰이 만료됨 | "x-amzn-errortype" = "InvalidSignatureException" | "Signature expired" | 요청의 인증 토큰이 만료되었습니다. |
| 서명이 유효하지 않음 | "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에 액세스할 때 서버의 서명과 일치하지 않습니다. |
| 도메인 URL에 스테이지가 포함된 경우 사용자 지정 도메인을 활성화하여 API 호출 | "x-amzn-errortype" = "MissingAuthenticationTokenException" | "Missing Authentication Token" | API 매핑은 API, 스테이지 및 매핑에 사용할 선택적 경로를 지정합니다. API의 스테이지를 사용자 지정 도메인에 매핑할 때는 URL에 스테이지를 포함할 필요가 없습니다. 자세한 내용은 API 매핑을 사용하여 REST API의 사용자 지정 도메인 이름에 API 단계 연결을 참조하십시오. |
| 인증 토큰 누락 | "x-amzn-errortype" = "MissingAuthenticationTokenException" | "Missing Authentication Token" | 요청에 인증 토큰이 없습니다. |
| 인증 토큰 누락 | "x-amzn-errortype" = "MissingAuthenticationTokenException" | "Missing Authentication Token" | API에 없는 API 메서드에 요청을 보냈습니다. |
| 인증 토큰 누락 | "x-amzn-errortype" = "MissingAuthenticationTokenException" | "Missing Authentication Token" | API에 없는 API 리소스에 요청을 보냈습니다. |
| 리소스 경로가 존재하지 않음 | "x-amzn-errortype" = "MissingAuthenticationTokenException" | "Missing Authentication Token" | Authorization 헤더가 없는 요청을 존재하지 않는 API 리소스 경로로 전송했습니다. 자세한 내용은 API Gateway REST API 엔드포인트 403 ‘Missing Authentication Token’ 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오. |
해결 방법
요청된 리소스가 API 정의에 존재하는지 확인
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
API Gateway 콘솔 또는 AWS CLI를 사용하여 다음 구성을 확인하십시오.
- 최신 API 정의로 API를 배포했습니다.
- 요청된 리소스가 API 정의에 있습니다.
오류 원인 파악
오류의 원인을 파악하려면 API에 대한 Amazon CloudWatch 액세스 로깅을 설정하십시오. 그런 다음, CloudWatch에서 API의 로그 이벤트를 확인하여 요청이 API Gateway API에 도달하는지 확인합니다. 요청이 API Gateway API에 도달하고 로그에 오류 메시지가 있는 경우 API Gateway 문제를 계속 해결할 수 있습니다. 요청이 다른 리소스에 도달하면 다른 프록시나 서비스가 오류의 원인일 수 있습니다.
참고: HTTP API는 실행 로깅을 지원하지 않습니다.
오류를 재현할 수 있는 경우 curl -v 명령을 사용하여 클라이언트와 API 간의 통신 세부 정보를 얻습니다.
curl -X HTTP\_VERB -v https://api-id.execute-api.region.amazonaws.com/stage
참고: 예제 URL을 API의 호출 URL로 바꿉니다.
REST API를 확인하고 API 매핑을 다시 라우팅
상호 TLS가 필요한 사용자 지정 도메인 이름을 사용하고 HTTP API를 호출하면 403 오류가 발생할 수 있습니다.
새 API 매핑을 만들어 사용자 지정 도메인 이름에 대한 REST API 호출을 테스트합니다. 오류의 원인을 파악하려면 CloudWatch에서 REST API의 로그 이벤트를 확인하십시오. 오류를 확인하고 해결한 후에는 API 매핑을 HTTP API로 다시 라우팅합니다.
요청 헤더가 올바른지 확인
유효하지 않은 API 키로 인해 오류가 발생한 경우, 요청에 x-api-key 헤더를 전송했는지 확인하십시오. 헤더를 포함하지 않았거나 올바르지 않은 경우 요청 헤더를 업데이트하십시오.
인터페이스 Amazon VPC 엔드포인트에서 DNS 설정을 올바르게 구성했는지 확인
참고: 다음 작업은 인터페이스 VPC 엔드포인트만 있는 Amazon VPC에서 호출하는 API에 적용됩니다.
사용하는 API 유형에 따라 인터페이스 엔드포인트의 DNS 설정을 올바르게 구성했는지 확인합니다.
Amazon VPC 내부에서 AWS 리전 API를 호출하려면 인터페이스 엔드포인트에서 프라이빗 DNS 이름을 비활성화하십시오. 그러면 퍼블릭 DNS가 엔드포인트의 호스트 이름을 확인할 수 있습니다. 자세한 내용은 프라이빗 API 만들기를 참조하십시오.
API의 프라이빗 DNS 이름을 사용하여 Amazon VPC 내부에서 프라이빗 API를 호출하려면 엔드포인트에서 프라이빗 DNS 이름을 활성화하십시오. 그러면 Amazon VPC 로컬 서브넷 리소스가 인터페이스 엔드포인트의 호스트 이름을 확인할 수 있습니다.
참고: 프라이빗 DNS를 활성화하고 기본 URI를 사용하는 경우 프라이빗 API의 퍼블릭 DNS 이름 또는 Amazon Route 53 별칭을 설정할 필요가 없습니다.
API의 리소스 정책 검토
API의 리소스 정책을 검토하여 다음 구성을 확인하십시오.
- 인터페이스 VPC 엔드포인트가 있는 VPC에서 호출하는 API의 경우 API의 리소스 정책이 VPC 또는 인터페이스 VPC 엔드포인트에 대한 액세스 권한을 부여해야 합니다.
- 리소스 정책에 올바른 리소스 사양과 형식이 있습니다.
참고: 리소스 정책을 저장할 때 API Gateway는 ARN 사양을 검증하지 않습니다. 예는 API Gateway 리소스 정책 예제를 참조하십시오. - API Gateway를 사용하면 호출자가 API에 대해 정의한 인증 유형에 따라 API 엔드포인트를 호출할 수 있습니다. API Gateway는 리소스 정책과 권한 부여 유형을 평가하여 요청을 허용하거나 거부합니다.
HTTP 요청 및 응답 메시지 검토
웹 브라우저에서 오류를 재현합니다. 브라우저의 네트워크 도구를 사용하여 HTTP 요청 및 응답 메시지를 캡처한 다음, 분석하여 오류가 발생한 위치를 파악합니다.
참고: 오프라인 분석을 위해 HTTP 아카이브(HAR) 파일에 메시지를 저장합니다.
관련 정보
특정 IP 주소만 내 API Gateway REST API에 액세스하도록 허용하려면 어떻게 해야 합니까?
API Gateway 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?
API Gateway REST API 또는 WebSocket API의 문제 해결을 위해 CloudWatch Logs를 활성화하려면 어떻게 해야 합니까?
curl 웹 사이트의 curl
관련 콘텐츠
- 질문됨 일 년 전

