내용으로 건너뛰기

VPC에서 API Gateway 퍼블릭 API에 연결할 때 HTTP "403 Forbidden" 오류가 발생하는 이유는 무엇입니까?

4분 분량
0

Amazon Virtual Private Cloud(Amazon VPC)에서 Amazon API Gateway 퍼블릭 API를 호출할 때 HTTP "403 Forbidden" 오류가 발생합니다.

간략한 설명

Amazon VPC 인터페이스 엔드포인트는 프라이빗 API로만 트래픽을 라우팅하기 때문에 API Gateway 퍼블릭 API에 액세스하려고 하면 HTTP "403 Forbidden" 오류가 발생할 수 있습니다.

프라이빗 DNS 이름이 활성화된 VPC에서 API Gateway 퍼블릭 API에 액세스하려고 하면 HTTP "403 Forbidden" 오류가 발생합니다. 프라이빗 DNS 이름을 활성화하면 Amazon VPC에서 API Gateway API로 전송되는 모든 요청이 인터페이스 VPC 엔드포인트로 확인됩니다.

하지만 엔드포인트의 프라이빗 DNS 이름이 *.execute-api.{region}.amazonaws.com 형식이므로 인터페이스 VPC 엔드포인트를 사용하여 퍼블릭 API에 연결할 수 없습니다. * 문자는 API ID의 자리 표시자입니다. 이 형식은 퍼블릭 및 프라이빗 API 모두의 API Gateway 기본 호출 URL과 일치합니다.

프라이빗 DNS 이름을 활성화하면 *.execute-api.{region}.amazonaws.com 형식의 API Gateway API URL에 대한 호출이 인터페이스 VPC 엔드포인트의 프라이빗 IP 주소로 확인됩니다. 이 설정은 퍼블릭 및 프라이빗 API의 인터페이스 VPC 엔드포인트를 통해 모든 트래픽을 API Gateway로 라우팅합니다.

또한 AWS Direct Connect를 사용하여 기본 execute-api URL을 호출하여 온프레미스 네트워크에서 프라이빗 API에 연결하는 경우에도 "403 Forbidden" 오류가 발생합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

Amazon VPC가 프라이빗 DNS 설정을 사용하는지 확인

HTTP "403 Forbidden" 오류를 해결하려면 먼저 Amazon VPC가 프라이빗 DNS 설정을 사용하는지 퍼블릭 DNS 설정을 사용하는지 확인하십시오. AWS CLI 또는 Amazon VPC 콘솔을 사용할 수 있습니다.

AWS CLI

다음 describe-vpc-endpoints 명령을 실행합니다.

export VPC_ID=YOUR_VPC_ID  
export REGION=YOUR_REGION  
aws ec2 describe-vpc-endpoints \  
  --filters "Name=vpc-id,Values=${VPC_ID}" \  
            "Name=service-name,Values=com.amazonaws.${REGION}.execute-api" \  
  --query 'Amazon VPC endpointndpoints[].{Name:Tags[?Key==`Name`].Value|[0],Amazon VPC endpointndpointId:Amazon VPC endpointndpointId,PrivateDnsEnabled:PrivateDnsEnabled}' \  
  --output table

참고: YOUR_VPC_ID를 VPC ID로 바꾸고 YOUR_REGION을 AWS 리전으로 바꾸십시오.

Amazon VPC 콘솔

인터페이스 VPC 엔드포인트 구성에서 프라이빗 DNS 이름을 활성화했는지 확인합니다. 또한 VPC에 프라이빗 REST API에 액세스할 수 있는 인터페이스 VPC 엔드포인트가 있는지 확인합니다. 인터페이스 VPC 엔드포인트가 있는 경우 DNS 속성이 활성화되어 있는지 확인합니다. 

프라이빗 DNS 이름을 활성화한 상태로 퍼블릭 API에 연결

프라이빗 DNS를 활성화한 경우 엣지에 최적화된 사용자 지정 도메인 이름 또는 리전별 사용자 지정 도메인 이름을 설정하여 퍼블릭 API에 연결합니다. 그런 다음 api.example.com과 같은 사용자 지정 도메인 이름을 사용하여 API Gateway 퍼블릭 API를 호출할 수 있습니다. 프라이빗 REST API에 대한 연결은 프라이빗 REST API 엔드포인트를 통해 계속 작동합니다.

클라이언트가 온프레미스 네트워크에서 연결하는 경우 Amazon Route 53 Resolver 인바운드 엔드포인트를 설정합니다. execute-api 호출 URL을 사용하려면 온프레미스 네트워크의 모든 프라이빗 DNS 쿼리를 인바운드 엔드포인트로 전달합니다.

참고: 퍼블릭 API에 연결하려면 VPC 리소스가 인터넷에 연결되어 있어야 합니다.

프라이빗 DNS 이름을 비활성화한 상태로 퍼블릭 API에 연결

퍼블릭 API에 대한 아웃바운드 트래픽을 허용하려면 VPC의 보안 그룹을 사용합니다. 또한 VPC의 액세스를 허용하도록 API에 연결된 리소스 정책을 수정합니다.

VPC에 퍼블릭 REST API에 액세스할 수 있는 권한이 있는 경우 기본 execute-api 명령을 사용하여 퍼블릭 REST API에 연결합니다. 사용자 지정 도메인 이름을 사용하여 퍼블릭 REST API에 연결할 수도 있습니다. 자세한 내용은 API Gateway의 REST API에 대한 액세스 제어 및 관리를 참조하십시오.

인터페이스 VPC 엔드포인트의 프라이빗 DNS 이름을 비활성화하면 기본 execute-api 호출 URL이 더 이상 프라이빗 REST API에 연결되지 않습니다.

프라이빗 REST API를 호출하려면 다음 작업 중 하나를 수행하십시오.

  • 다음 예와 같이 Amazon VPC 엔드포인트에 호스트 헤더를 DNS로 사용합니다.

    curl -H "Host: {your-api-id}.execute-api.{region}.amazonaws.com" \  
         https://Amazon VPC endpoint-xxxxx-xxxxx.execute-api.{region}.Amazon VPC endpoint.amazonaws.com/stage/path
  • execute-api.{region}.amazonaws.com의 프라이빗 호스팅 영역을 만듭니다. 프라이빗 호스팅 영역에서 API 식별자에 대한 A 레코드를 추가합니다. A 레코드가 인터페이스 VPC 엔드포인트의 IP 주소를 가리키도록 해야 프라이빗 REST API의 기본 execute-api 호출 URL을 사용할 수 있습니다.

인터페이스 VPC 엔드포인트의 프라이빗 DNS 속성 변경

인터페이스 엔드포인트의 프라이빗 DNS 속성을 변경할 수 있습니다. 변경 사항은 API 스테이지 URL이 인터페이스 VPC 엔드포인트의 프라이빗 IP 주소로 확인되는 방식에 영향을 줍니다. 또한 VPC에서 프라이빗 API와 퍼블릭 API에 연결하는 방법에도 영향을 줍니다. 자세한 내용은 VPC의 DNS 속성을 참조하십시오.

관련 정보

인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스