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

최종 업데이트 날짜: 2022년 2월 25일

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

간략한 설명

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

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

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

참고: 다른 AWS 계정의 Amazon VPC 또는 온프레미스 네트워크와 같은 외부 클라이언트의 연결 문제: 이 문제는 API Gateway 리소스 정책이 잘못 구성되었거나 프라이빗 API 엔드포인트의 호출 URL에 있는 DNS 이름이 잘못되어 발생할 수 있습니다.

해결 방법

오류 원인 확인

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

팁: 로깅 설정을 구성할 때 다음을 수행합니다.
로그 수준에서 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 logs에서 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" 오류를 해결하는 방법

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)을 선택합니다.
프라이빗 DNS 이름 수정(Modify Private DNS names)을 선택합니다.
프라이빗 DNS 이름 사용(Enable Private DNS Name) 확인란을 선택합니다. 그런 다음 변경 내용 저장(Save Changes)을 선택합니다.
프라이빗 DNS 이름 수정(Modify Private DNS names)을 선택합니다.