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

최종 업데이트 날짜: 2022년 9월 22일

Amazon Virtual Private Cloud(VPC)의 Amazon API Gateway 프라이빗 API 엔드포인트에 연결하는 데 문제가 있습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon VPC의 AWS 리소스는 다음과 같은 이유로 프라이빗 API 엔드포인트에 연결하지 못할 수 있습니다.

API에 대해 Amazon CloudWatch 로깅이 활성화되면 오류의 원인을 나타내는 오류 메시지가 실행 로그에 표시됩니다.

로깅이 활성화된 후 API 요청이 CloudWatch 로그를 생성하지 않으면 요청이 엔드포인트에 도달하지 않은 것입니다. API 요청이 엔드포인트에 도달하지 않는 경우, 프라이빗 API의 호출 URL 형식이 올바른지 확인합니다.

참고: 연결 문제는 잘못 구성된 API Gateway 리소스 정책 또는 프라이빗 API 엔드포인트의 호출 URL에 있는 잘못된 DNS 이름으로 인해 발생할 수 있습니다.

해결 방법

오류 원인 확인

1.    아직 활성화하지 않은 경우, 먼저 프라이빗 REST API에 대해 CloudWatch 로깅을 켭니다. 실행 로깅을 구성해야 합니다.

팁: 로깅 설정을 구성할 때 Log leve(로그 수준)에서 INFO(정보)를 선택합니다. 그런 다음, Log full requests/responses data(전체 요청/응답 데이터 로깅)를 선택합니다.

2.    CloudWatch에서 REST API의 실행 로그를 확인하여 오류의 원인을 파악합니다. API 요청이 엔드포인트에 도달하면 다음 예시 중 하나와 유사한 오류 메시지가 나타납니다.

  • "User: anonymous is not authorized to perform: execute-api:Invoke on resource:"
  • "Connection timed out"

로깅이 활성화된 후 API 요청에서 CloudWatch 로그를 생성하지 않는 경우 프라이빗 API의 호출 URL 형식이 올바른지 확인합니다. 지침은 이 문서의 로깅이 활성화된 후 API 요청이 CloudWatch 로그를 생성하지 않는 경우 섹션을 참조하세요.

자세한 내용은 CloudWatch 로그에서 API Gateway REST API 오류를 찾으려면 어떻게 해야 하나요?를 참조하세요.

"User: anonymous is not authorized to perform: execute-api:Invoke on resource:" 오류 해결

1.    프라이빗 API 엔드포인트의 API Gateway 리소스 정책인터페이스 VPC 엔드포인트 또는 소스 VPC에서 API 엔드포인트로의 트래픽을 허용하는지 확인합니다. 리소스 정책에 대한 예시는 예: 소스 VPC 또는 VPC 엔드포인트에 따라 프라이빗 API 트래픽 허용을 참조하세요.

2.    VPC 엔드포인트 정책이 프라이빗 API 엔드포인트에 대한 클라이언트 액세스를 허용하는지 확인합니다. VPC 엔드포인트 정책의 예시는 VPC 엔드포인트 정책 예를 참조하세요.

API Gateway 리소스 정책을 테스트하는 방법에 대한 지침은 특정 IP 주소만 내 API Gateway REST API에 액세스하도록 허용하려면 어떻게 해야 합니까? 문서의 리소스 정책 테스트 섹션을 참조하세요.

중요: API의 리소스 정책을 수정하는 경우 API를 배포하여 변경 사항을 커밋해야 합니다.

"Connection timed out" 오류 해결

1.    VPC에 API 게이트웨이 execute-api VPC 엔드포인트가 있는지 확인합니다. 또한 엔드포인트가 프라이빗 API와 동일한 AWS 리전에 있는지 확인합니다. 존재하지 않은 경우 API Gateway execute-api용 인터페이스 VPC 엔드포인트를 생성하세요.

2.    프라이빗 API 엔드포인트를 호출하는 클라이언트가 동일한 VPC에 존재하는지 또는 VPC 엔드포인트가 있는 VPC에 액세스할 수 있는지 확인합니다. traceroute 도구를 사용하여 이를 테스트할 수 있습니다.

참고: 프라이빗 API는 VPC 내 클라이언트 또는 VPC에 네트워크로 연결된 클라이언트에서 액세스할 수 있습니다.

traceroute를 설치하려면 다음 명령을 실행합니다.

Amazon Linux:

$ sudo yum install traceroute

Ubuntu:

$ sudo apt-get install traceroute

traceroute를 사용하여 연결 테스트하기:

$ sudo traceroute -n -T -p 443 <VPC-endpoint IP-address>

-T -p 443 -n 인수는 포트 443에서 TCP 기반 추적을 수행합니다.

3.    Amazon VPC 보안 그룹에 대한 규칙이 올바르게 구성되었는지 확인합니다.

Amazon VPC 보안 그룹 테스트하기:

프라이빗 API 엔드포인트에 요청하는 클라이언트에서 다음 명령을 실행합니다. {public-dns-hostname}을 API의 VPC 엔드포인트 ID가 포함된 퍼블릭 DNS 호스트 이름으로 바꿔야 합니다. {region}을 인터페이스 VPC 엔드포인트가 있는 AWS 리전으로 바꿉니다.

$ telnet {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com 443

연결 제한 시간이 초과되면 Amazon VPC 보안 그룹에 대한 규칙이 올바르게 구성되지 않은 것입니다.

다음 사항을 확인합니다.

  • 요청하는 리소스에는 VPC 엔드포인트의 IP 주소 범위 또는 보안 그룹으로의 TCP 포트 443의 아웃바운드 트래픽을 허용하는 보안 그룹 규칙이 있어야 합니다.
  • VPC 엔드포인트에는 요청 리소스의 IP 주소 범위 또는 보안 그룹으로부터의 TCP 포트 443 인바운드 트래픽을 허용하는 보안 그룹 규칙이 있습니다.

자세한 내용은 보안 그룹을 사용하여 리소스에 대한 트래픽 제어를 참조하세요.

로깅이 활성화된 후 API 요청이 CloudWatch 로그를 생성하지 않는 경우

1.    프라이빗 API 엔드포인트의 API Gateway 리소스 정책이 올바르게 구성되었는지 확인합니다.

자세한 내용은 이 문서의 "User: anonymous is not authorized to perform: execute-api:Invoke on resource:" 오류 해결 섹션을 참조하세요.

2.    프라이빗 API의 호출 URL 형식이 올바른지 확인합니다.

올바른 형식은 VPC 엔드포인트에 대해 프라이빗 DNS가 활성화되어 있는지에 따라 다릅니다. 프라이빗 DNS가 활성화되지 않은 경우 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용하여 프라이빗 API 엔드포인트에 액세스해야 합니다. 프라이빗 DNS가 활성화된 경우, 프라이빗 DNS 이름을 사용하여 프라이빗 API 엔드포인트에 액세스해야 합니다.

자세한 내용은 프라이빗 API를 호출하는 방법을 참조하세요.

프라이빗 API 엔드포인트의 도메인이 VPC 엔드포인트의 IP 주소로 올바르게 확인되는지 테스트합니다.

1.    프라이빗 API 엔드포인트에 요청하는 클라이언트에서 다음 nslookup 명령을 실행합니다. {restapi-id}를 프라이빗 API의 ID로 바꿔야 합니다. {region}을 프라이빗 API 엔드포인트가 있는 AWS 리전으로 바꿉니다.

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

출력이 성공하면 VPC 엔드포인트의 프라이빗 IP 주소가 표시됩니다.

2.    다음 nslookup 명령을 실행합니다. {public-dns-hostname}을 API의 VPC 엔드포인트 ID가 포함된 퍼블릭 DNS 호스트 이름으로 바꿔야 합니다. {region}을 인터페이스 VPC 엔드포인트가 있는 AWS 리전으로 바꿉니다.

$ nslookup {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com

출력이 성공하면 VPC 엔드포인트의 프라이빗 IP 주소가 표시됩니다.

3.    각 명령의 출력에서 IP 주소를 비교합니다. 각 명령 출력의 IP 주소가 일치하면 설정이 예상대로 작동하는 것입니다.

참고: Amazon VPC 콘솔에서 언제든지 다음을 수행하여 VPC 엔드포인트에 대한 프라이빗 DNS를 활성화할 수 있습니다.
엔드포인트 창(Endpoints pane)에서 인터페이스 VPC 종단점을 선택합니다.
Actions(작업)를 선택합니다.
Modify Private DNS names(프라이빗 DNS 이름 수정)를 선택합니다.
Enable Private DNS Name(프라이빗 DNS 이름 활성화) 확인란을 선택합니다. 그런 다음 변경 내용 저장(Save Changes)을 선택합니다.
Modify Private DNS names(프라이빗 DNS 이름 수정)를 선택합니다.