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 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제를 해결하려면 어떻게 해야 합니까?
Amazon Virtual Private Cloud(Amazon VPC)에 있는 Amazon API Gateway 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제를 해결하고 싶습니다.
간략한 설명
Amazon VPC의 AWS 리소스는 다음과 같은 이유로 프라이빗 API 엔드포인트에 연결하지 못할 수 있습니다.
- 프라이빗 API 엔드포인트에 대한 API Gateway 리소스 정책을 올바르게 구성하지 않았습니다.
- 인터페이스 VPC 엔드포인트에 대한 VPC 엔드포인트 정책을 올바르게 구성하지 않았습니다.
- Amazon VPC 보안 그룹에 대한 규칙을 올바르게 구성하지 않았습니다.
- 프라이빗 API의 간접 호출 URL에 올바른 DNS 이름이 포함되어 있지 않습니다.
- 프라이빗 사용자 지정 도메인 이름을 VPC 엔드포인트와 연결하지 않았습니다.
- 프라이빗 사용자 지정 도메인 이름에 대한 리소스 정책을 올바르게 구성하지 않았습니다.
원인을 확인하려면 API의 Amazon CloudWatch Logs를 활성화하고 로그를 검토할 수 있습니다.
CloudWatch Logs를 활성화한 후 API 요청에서 로그를 생성하지 않으면 요청이 엔드포인트에 도달하지 않은 것입니다. API 요청이 엔드포인트에 도달하지 않으면 프라이빗 API의 간접 호출 URL을 올바르게 구성했는지 확인하십시오.
자세한 내용은 내 CloudWatch Logs에서 API Gateway REST API 오류를 찾으려면 어떻게 해야 합니까?를 참조하십시오.
참고: API Gateway 리소스 정책을 잘못 구성했거나 프라이빗 API 엔드포인트의 간접 호출 URL에 DNS 이름이 올바르지 않으면 연결 문제가 발생할 수 있습니다.
해결 방법
오류 원인 확인
다음 단계를 완료하십시오.
- 프라이빗 REST API에 대해 CloudWatch Logs를 활성화합니다.
- Log level(로그 수준)에서 INFO를 선택한 다음 Log full requests/responses data(전체 요청/응답 데이터 로깅)를 선택합니다.
- CloudWatch에서 REST API의 실행 로그를 확인하여 문제의 원인을 식별합니다.
API 요청이 엔드포인트에 도달하면 다음 예시 중 하나와 비슷한 오류 메시지가 나타납니다.
- "User: anonymous is not authorized to perform: execute-api:Invoke on resource:"
- "SSL: no alternative certificate subject name matches target host name custom-domain.com/resource"
- "Connection timed out"
- "Could not resolve host: https://example.com/resource"
"User: anonymous is not authorized to perform: execute-api:Invoke on resource:"
이 문제를 해결하려면 다음 정책을 구성하십시오.
- 프라이빗 API의 API Gateway 리소스 정책은 인터페이스 VPC 엔드포인트 또는 소스 VPC에서 API 엔드포인트로 향하는 트래픽을 허용해야 합니다.
- VPC 엔드포인트 정책은 프라이빗 API 엔드포인트에 대한 클라이언트 액세스를 허용해야 합니다. 이는 execute-api 서비스에 대한 리소스 정책입니다.
- 프라이빗 사용자 지정 도메인 이름을 간접 호출하려면 사용자 지정 도메인 이름의 리소스 정책이 VPC 엔드포인트에 대한 액세스를 허용해야 합니다. 기본적으로 API Gateway는 사용자 지정 도메인 이름의 리소스 정책에서 명시적 거부와 함께 사용자 지정 도메인 이름을 프로비저닝합니다. 자세한 내용은 튜토리얼: 프라이빗 API에 대한 사용자 지정 도메인 이름 생성 및 간접 호출을 참조하십시오.
중요: API의 리소스 정책을 수정한 경우 API를 스테이지에 배포하여 변경 사항을 저장합니다.
"SSL: no alternative certificate subject name matches target host name custom-domain.com/resource"
이 문제를 해결하려면 execute-api 서비스의 프라이빗 VPC 엔드포인트에 대해 프라이빗 사용자 지정 도메인 이름 액세스 연결을 생성했는지 확인하십시오.
"Connection timed out"
연결 시간 초과 문제를 해결하려면 다음 단계를 완료하십시오.
-
클라이언트를 호스팅하는 VPC에 API Gateway execute-api VPC 엔드포인트가 있는지 확인합니다. 그런 다음 엔드포인트가 프라이빗 API와 동일한 AWS 리전에 있는지 확인합니다. 엔드포인트가 존재하지 않는 경우 API Gateway execute-api에 대한 인터페이스 VPC 엔드포인트를 생성합니다.
-
traceroute를 사용하여 프라이빗 API를 간접 호출하는 클라이언트가 동일한 VPC에 존재하는지 또는 VPC 엔드포인트를 사용하여 VPC에 액세스할 수 있는지 확인합니다.
다음 명령을 실행하여 traceroute를 설치합니다.
Amazon Linux:
sudo yum install tracerouteUbuntu:
sudo apt-get install traceroutetraceroute를 사용하여 연결을 테스트하려면 다음 명령을 실행합니다.
sudo traceroute -n -T -p 443 VPC-endpoint IP-address참고: 인수 -T -p 443 -n은 포트 443에서 TCP 기반 추적을 수행합니다. VPC-endpoint IP-address를 VPC 엔드포인트의 IP 주소로 바꿉니다.
-
Amazon VPC 보안 그룹에 대한 규칙을 올바르게 구성했는지 확인합니다.
Amazon VPC 보안 그룹을 테스트하려면 프라이빗 API 엔드포인트에 요청을 보내는 클라이언트에서 다음 명령을 실행합니다.telnet public-dns-hostname.execute-api.region.vpce.amazonaws.com 443참고: public-dns-hostname을 API의 VPC 엔드포인트 ID가 포함된 퍼블릭 DNS 호스트 이름으로 바꾸십시오. 또한 region을 인터페이스 VPC 엔드포인트가 있는 리전으로 바꾸십시오.
또는 프라이빗 API 사용자 지정 도메인 이름에 요청을 보내는 클라이언트에서 다음 명령을 실행합니다.
telnet custom-domain-name 443참고: custom-domain-name을 프라이빗 API 사용자 지정 도메인 이름으로 바꾸십시오.
연결 시간이 초과되면 Amazon VPC 보안 그룹에 대한 규칙을 올바르게 구성하지 않은 것입니다.
요청 리소스에는 VPC 엔드포인트의 IP 주소 범위 또는 보안 그룹으로의 TCP 포트 443 아웃바운드 트래픽을 허용하는 보안 그룹 규칙이 있어야 합니다. 또한 VPC 엔드포인트에는 요청 리소스의 IP 주소 범위 또는 보안 그룹으로부터의 TCP 포트 443 인바운드 트래픽을 허용하는 보안 그룹 규칙이 있어야 합니다.
자세한 내용은 Amazon VPC 리소스로 들어오고 나가는 트래픽을 제한하려면 어떻게 해야 합니까?를 참조하십시오.
"Could not resolve host:https://www.example.com/resource"
이 문제를 해결하려면 다음 작업을 수행하십시오.
- 올바른 VPC를 Amazon Route 53 호스팅 영역에 연결했는지 확인합니다.
- 대상을 VPC 엔드포인트 DNS 이름의 별칭으로 사용하여 사용자 지정 도메인 이름에 대한 레코드를 Route 53 호스팅 영역에 생성했는지 확인합니다.
프라이빗 API 엔드포인트의 도메인이 VPC 엔드포인트의 IP 주소로 올바르게 변환되는지 테스트합니다.
참고: execute-api VPC 엔드포인트가 있는 VPC 내에 클라이언트가 있는지 확인하십시오.
다음 단계를 완료하십시오.
- 프라이빗 API 엔드포인트에 요청을 보내는 클라이언트에서 다음 nslookup 명령을 실행합니다.
참고: restapi-id를 프라이빗 API의 ID로 바꾸고 region을 프라이빗 API 엔드포인트가 있는 리전으로 바꾸십시오.nslookup restapi-id.execute-api.region.amazonaws.com - 프라이빗 API 사용자 지정 도메인 이름에 요청을 보내는 클라이언트에서 다음 nslookup 명령을 실행합니다.
참고: custom-domain-name을 프라이빗 API의 사용자 지정 도메인 이름으로 바꾸십시오. 성공적인 출력에는 VPC 엔드포인트의 프라이빗 IP 주소가 표시됩니다.nslookup custom-domain-name - 다음 nslookup 명령을 실행합니다.
참고: public-dns-hostname을 API의 VPC 엔드포인트 ID가 포함된 퍼블릭 DNS 호스트 이름으로 바꾸십시오. region을 인터페이스 VPC 엔드포인트가 있는 리전으로 바꾸십시오. 성공적인 출력에는 VPC 엔드포인트의 프라이빗 IP 주소가 표시됩니다.nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com - 각 명령의 출력에 있는 IP 주소를 비교합니다. 각 명령 출력의 IP 주소가 일치하면 설정이 예상대로 작동합니다.
VPC 엔드포인트의 프라이빗 DNS를 활성화하려면 다음 단계를 완료하십시오.
- Amazon VPC 콘솔을 엽니다.
- Endpoints(엔드포인트) 창에서 인터페이스 VPC 엔드포인트를 선택합니다.
- Actions(작업)를 선택합니다.
- Modify Private DNS names(프라이빗 DNS 이름 수정)을 선택합니다.
- Enable Private DNS Name(프라이빗 DNS 이름 활성화)을 선택한 다음 Save Changes(변경 사항 저장)를 선택합니다.
CloudWatch Logs를 활성화한 후 API 요청에서 CloudWatch Logs가 생성되지 않음
이 문제를 해결하려면 다음 작업을 수행하십시오.
- 프라이빗 API 엔드포인트의 API Gateway 리소스 정책을 올바르게 구성합니다.
- 프라이빗 API 엔드포인트에 액세스하려면 프라이빗 API의 간접 호출 URL 형식을 올바르게 지정해야 합니다.
참고: 프라이빗 DNS를 활성화한 경우 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용해야 합니다. 프라이빗 DNS를 활성화하지 않은 경우 프라이빗 DNS 이름을 사용하십시오. - 프라이빗 API 사용자 지정 도메인 이름을 올바른 API 단계에 매핑하십시오.
관련 정보
인터페이스 VPC 엔드포인트를 사용하여 다른 계정의 API Gateway 프라이빗 REST API에 액세스하려면 어떻게 해야 합니까?
VPC에서 API Gateway API에 연결할 때 HTTP 403 금지됨 오류가 발생하는 이유는 무엇입니까?
흐름 로그를 사용해 VPC의 트래픽을 모니터링하려면 어떻게 해야 합니까?
API Gateway REST API 또는 WebSocket API의 문제 해결을 위해 CloudWatch Logs를 활성화하려면 어떻게 해야 합니까?
관련 콘텐츠
- 질문됨 일 년 전

