내용으로 건너뛰기

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

6분 분량
0

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을 올바르게 구성했는지 확인하십시오.<br id=hardline_break/> 자세한 내용은 내 CloudWatch Logs에서 API Gateway REST API 오류를 찾으려면 어떻게 해야 합니까?를 참조하십시오.

참고: API Gateway 리소스 정책을 잘못 구성했거나 프라이빗 API 엔드포인트의 호출 URL에 있는 DNS 이름이 올바르지 않으면 연결 문제가 발생할 수 있습니다.

해결 방법

문제 원인 확인

다음 단계를 완료하십시오.

  1. 프라이빗 REST API에 대해 CloudWatch Logs를 활성화합니다.
  2. 로그 수준에서 INFO를 선택한 다음, 전체 요청/응답 데이터 로깅을 선택합니다.
  3. 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에 대한 사용자 지정 도메인 이름 만들기 및 호출을 참조하십시오.<br id=hardline_break/> 중요: API의 리소스 정책을 수정한 경우 API를 스테이지에 배포하여 변경 사항을 저장합니다.

"SSL: no alternative certificate subject name matches target host name custom-domain.com/resource"

이 문제를 해결하려면 execute-api 서비스의 프라이빗 VPC 엔드포인트에 대해 프라이빗 사용자 지정 도메인 이름 액세스 연결을 만들었는지 확인하십시오.

"Connection timed out"

연결 시간 초과 문제를 해결하려면 다음 단계를 완료하십시오.

  1. 클라이언트를 호스팅하는 VPC에 API Gateway execute-api VPC 엔드포인트가 있는지 확인합니다. 그런 다음, 엔드포인트가 프라이빗 API와 동일한 AWS 리전에 있는지 확인합니다. 엔드포인트가 존재하지 않는 경우 API Gateway execute-api에 대한 인터페이스 VPC 엔드포인트를 만듭니다.

  2. traceroute를 사용하여 프라이빗 API를 호출하는 클라이언트가 동일한 VPC에 존재하는지 또는 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 기반 추적을 수행합니다. VPC-endpoint IP-address를 VPC 엔드포인트의 IP 주소로 바꾸십시오.

  3. Amazon VPC 보안 그룹에 대한 규칙을 올바르게 구성했는지 확인합니다.<br id=hardline_break/> 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"

이 문제를 해결하려면 다음 작업을 수행하십시오.

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

참고: 클라이언트가 execute-api VPC 엔드포인트가 있는 VPC 내에 있는지 확인하십시오.

다음 단계를 완료하십시오.

  1. 프라이빗 API 엔드포인트에 요청을 보내는 클라이언트에서 다음 nslookup 명령을 실행합니다.
    nslookup restapi-id.execute-api.region.amazonaws.com
    참고: restapi-id를 프라이빗 API의 ID로 바꾸고 region을 프라이빗 API 엔드포인트가 있는 리전으로 바꾸십시오.
  2. 프라이빗 API 사용자 지정 도메인 이름에 요청을 보내는 클라이언트에서 다음 nslookup 명령을 실행합니다.
    nslookup custom-domain-name
    참고: custom-domain-name을 프라이빗 API의 사용자 지정 도메인 이름으로 바꾸십시오. 성공적인 출력에는 VPC 엔드포인트의 프라이빗 IP 주소가 표시됩니다.
  3. 다음 nslookup 명령을 실행합니다.
    nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com
    참고: public-dns-hostname을 API의 VPC 엔드포인트 ID가 포함된 퍼블릭 DNS 호스트 이름으로 바꾸십시오. region을 인터페이스 VPC 엔드포인트가 있는 리전으로 바꾸십시오. 성공적인 출력에는 VPC 엔드포인트의 프라이빗 IP 주소가 표시됩니다.
  4. 각 명령의 출력에 있는 IP 주소를 비교합니다. 각 명령 출력의 IP 주소가 일치하면 설정이 제대로 작동합니다.

VPC 엔드포인트의 프라이빗 DNS를 활성화하려면 다음 단계를 완료하십시오.

  1. Amazon VPC 콘솔을 엽니다.
  2. 엔드포인트 창에서 인터페이스 VPC 엔드포인트를 선택합니다.
  3. 작업을 선택합니다.
  4. 프라이빗 DNS 이름 수정을 선택합니다.
  5. 프라이빗 DNS 이름 활성화를 선택한 다음, 변경 사항 저장을 선택합니다.

CloudWatch Logs를 활성화한 후 API 요청에서 CloudWatch Logs가 생성되지 않음

이 문제를 해결하려면 다음 작업을 수행하십시오.

  • 프라이빗 API 엔드포인트의 API Gateway 리소스 정책을 올바르게 구성합니다.
  • 프라이빗 API 엔드포인트에 액세스하기 위해 프라이빗 API의 호출 URL 형식을 올바르게 지정합니다.<br id=hardline_break/> 참고: 프라이빗 DNS를 활성화한 경우 엔드포인트별 퍼블릭 DNS 호스트 이름을 사용해야 합니다. 프라이빗 DNS를 활성화하지 않은 경우 프라이빗 DNS 이름을 사용하십시오.
  • 프라이빗 API 사용자 지정 도메인 이름을 올바른 API 단계에 매핑합니다.

관련 정보

인터페이스 VPC 엔드포인트를 사용하여 다른 계정의 API Gateway 프라이빗 REST API에 액세스하려면 어떻게 해야 합니까?

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

흐름 로그를 사용해 VPC의 트래픽을 모니터링하려면 어떻게 해야 합니까?

API Gateway REST API 또는 WebSocket API의 문제 해결을 위해 CloudWatch Logs를 활성화하려면 어떻게 해야 합니까?