API Gateway 프라이빗 API 엔드포인트에 대한 연결 문제를 해결하려면 어떻게 해야 하나요?

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

“Forbidden” 오류가 발생하거나 Amazon Virtual Private Cloud(Amazon VPC)의 Amazon API Gateway 프라이빗 API 엔드포인트에 연결하는 데 문제가 있습니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

Amazon VPC에는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 AWS Lambda 함수와 같은 AWS 리소스가 있을 수 있습니다. 이러한 리소스가 개인 API 엔드포인트에 연결할 수 없는 경우 다음과 같은 이유 때문일 수 있습니다.

외부 클라이언트(예: 다른 AWS 계정의 Amazon VPC 또는 온프레미스 네트워크)에서 프라이빗 API 엔드포인트에 연결할 수 없는 경우 사용된 리소스 정책 또는 DNS 이름에 문제가 있을 수 있습니다.

해결 방법

아직 설정하지 않았다면 API 실행 로깅을 설정합니다. 로깅 설정을 구성할 때 [로그 수준]에서 [INFO]를 선택합니다. [전체 요청/응답 데이터 로깅]을 선택합니다. 이 설정을 사용하여 생성한 로그는 문제의 원인을 추가로 해결하는 데 도움이 될 수 있습니다.

참고: 프라이빗 API 엔드포인트에 액세스하려고 시도한 후에도 로그가 채워지지 않는다면 요청이 엔드포인트에 도달하지 않았음을 나타낼 수 있습니다. 프라이빗 API의 호출 URL 형식이 올바른지 확인합니다.

리소스 정책

연결된 API 게이트웨이 리소스 정책이 잘못 구성된 상태에서 프라이빗 API 엔드포인트에 액세스하려고 하면 “Forbidden”이라는 오류 메시지가 발생할 수 있습니다.

오류 메시지 “User: anonymous is not authorized to perform: execute-api:Invoke on resource:...”는 인터페이스 VPC 종단점에서 프라이빗 API 엔드포인트로의 트래픽을 허용하도록 리소스 정책이 올바르게 구성되지 않은 경우에 발생합니다.

이 오류를 해결하려면 액세스를 위해 올바르게 구성된 리소스 정책을 생성해 연결해야 합니다. 이러한 예제 리소스 정책을 지침으로 사용합니다.

리소스 정책을 변경한 후 API를 재배포하여 변경 사항을 적용합니다.

VPC 종단점 정책

오류 메시지 “User: anonymous is not authorized to perform: execute-api:Invoke on resource:...”는 VPC 종단점 정책을 인터페이스 VPC 종단점과 함께 사용하고 정책이 액세스를 제한하는 경우에도 발생할 수 있습니다.

VPC 종단점 정책이 프라이빗 API에 대한 액세스를 요청하는 클라이언트를 허용하는지 확인합니다. 자세한 내용은 VPC 종단점 정책 예제를 참조하세요.

VPC 보안 그룹

Connection timed out” 오류는 Amazon VPC의 보안 그룹에 대한 규칙이 올바르게 구성되지 않았음을 나타낼 수 있습니다.

테스트로 프라이빗 API에 대한 액세스를 요청하는 클라이언트에서 이 명령을 실행하세요.

참고: [vpce-id]를 VPC 종단점 ID로 바꿉니다. [region]을 VPC 종단점의 AWS 리전으로 바꿉니다.

$ telnet vpce-id.execute-api.region.vpce.amazonaws.com 443

연결 시간이 초과되면 VPC 구성을 체크하여 다음을 확인합니다.

  • 요청을 하는 AWS 리소스의 보안 그룹이 올바르게 구성되어 있습니다. 인터페이스 VPC 종단점의 IP 주소 범위 또는 보안 그룹으로의 TCP 포트 443의 아웃바운드 트래픽을 허용하는 보안 그룹 규칙이 있어야 합니다.
  • 인터페이스 VPC 종단점의 보안 그룹이 올바르게 구성되어 있습니다. 요청을 하는 AWS 리소스의 IP 주소 범위 또는 보안 그룹으로부터 TCP 포트 443 인바운드 트래픽을 허용하는 규칙이 있어야 합니다.

자세한 내용은 보안 그룹 작업을 참조하세요.

URL 형식/프라이빗 DNS 호출

프라이빗 API를 호출하려면 호출 URL의 형식이 올바로 지정되어야 합니다. 올바른 형식은 인터페이스 VPC 종단점에 대해 프라이빗 DNS를 사용하도록 설정했는지에 따라 달라집니다.

비활성화된 프라이빗 DNS의 경우 엔드포인트별로 설정한 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API에 액세스합니다.

참고: Amazon VPC 콘솔에서 언제든지 인터페이스 VPC 종단점에 대한 프라이빗 DNS를 활성화할 수 있습니다. 엔드포인트 창에서 인터페이스 VPC 종단점을 선택합니다. [작업]을 선택한 다음 [프라이빗 DNS 이름 수정]을 선택합니다. [프라이빗 DNS 이름 사용] 확인란을 선택한 다음 [프라이빗 DNS 이름 수정]을 선택합니다.

활성화된 프라이빗 DNS의 경우 프라이빗 DNS 이름을 사용하여 프라이빗 API에 액세스합니다.

프라이빗 API 엔드포인트 도메인이 인터페이스 VPC 종단점의 IP 주소로 올바르게 확인되는지 테스트합니다. 프라이빗 API에 대한 액세스를 요청하는 클라이언트에서 이 명령을 실행하세요.

참고: [restapi-id]를 프라이빗 API의 ID로 바꿉니다. [region]을 프라이빗 API의 AWS 리전으로 바꿉니다.

$ nslookup restapi-id.execute-api.region.amazonaws.com

출력은 인터페이스 VPC 종단점의 프라이빗 IP 주소여야 합니다.

다음으로 이 명령을 실행합니다.

참고: [vpce-id]를 VPC 종단점 ID로 바꿉니다. [region]을 VPC 종단점의 AWS 리전으로 바꿉니다.

$ nslookup vpce-id.execute-api.region.vpce.amazonaws.com

각 명령의 출력에서 IP 주소를 비교합니다. IP 주소가 동일한 경우 인터페이스 VPC 종단점이 예상대로 프라이빗 API 엔드포인트에 액세스하는 데 사용됩니다.

외부 액세스

다른 AWS 계정의 Amazon VPC에서 프라이빗 API에 액세스하려면 다음을 수행합니다.

  1. 다른 계정에서 인터페이스 VPC 종단점을 생성합니다.
  2. 리소스 정책을 생성해 프라이빗 API에 연결합니다. 이 정책은 다른 계정의 VPC 종단점 ID 또는 VPC ID에서 들어오는 트래픽을 허용해야 합니다.

다른 계정의 Amazon VPC에 있는 리소스(또는 인터페이스 VPC 종단점을 사용하는 리소스)는 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API에 액세스할 수 있습니다.

참고: 다른 계정의 프라이빗 API 및 인터페이스 VPC 종단점은 동일한 AWS 리전에 있어야 합니다. 다른 리전에서 프라이빗 API에 액세스하려면 VPC 피어링 연결이 필요합니다.

온프레미스 네트워크에서 AWS Direct Connect를 사용하여 VPC에 연결합니다. 그런 다음 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API에 액세스할 수 있습니다.