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

6분 분량
0

인터페이스 Virtual Private Cloud(VPC) 엔드포인트를 사용하여 다른 AWS 계정의 Amazon API Gateway 프라이빗 REST API에 액세스하려고 합니다.

간략한 설명

인터페이스 VPC 엔드포인트를 사용하여 다른 AWS 계정에 있는 API Gateway 프라이빗 REST API에 액세스하려면 다음 단계를 완료하세요.

  1. 하나의 계정(계정 A)에서 Amazon Virtual Private Cloud(VPC)에 인터페이스 엔드포인트를 생성합니다.
  2. 두 번째 계정(계정 B)에서 API Gateway 프라이빗 REST API를 생성합니다.
  3. 인터페이스 엔드포인트가 API를 호출할 수 있도록 하는 프라이빗 REST API의 리소스 정책을 구성합니다.
  4. 프라이빗 REST API를 위한 메서드를 설정합니다.
  5. 프라이빗 REST API를 배포합니다.
  6. 계정 A에서 프라이빗 REST API를 호출하여 설정을 테스트합니다.

참고: Amazon API Gateway 프라이빗 REST API와 VPC 엔드포인트는 동일한 AWS 리전에 있어야 합니다.

해결 방법

Amazon VPC의 한 계정(계정 A)에 인터페이스 엔드포인트를 생성합니다.

새 인터페이스 VPC 엔드포인트 생성

계정 A에서 API Gateway execute-api를 위한 인터페이스 VPC 엔드포인트 생성의 지침을 따르세요.

중요: 정책에서 전체 액세스를 선택합니다. VPC 엔드포인트 정책을 사용하여 API ID로 엔드포인트 액세스를 제한하는 것이 가장 좋습니다. 또한 API Gateway 리소스 정책을 사용하여 보안 주체별로 엔드포인트 액세스를 제한하는 것도 좋습니다 자세한 내용을 알아보려면 최소 권한 적용을 참조하세요.

인터페이스 엔드포인트를 생성할 때 다음 작업을 수행하세요.

인터페이스 엔드포인트의 VPC 엔드포인트 ID 가져오기

인터페이스 엔드포인트를 생성하면 VPC 엔드포인트 ID가 표시됩니다. 새 인터페이스 엔드포인트의 VPC 엔드포인트 ID를 복사합니다 (예: vpce-1a2b3c456d7e89012). 그런 다음 닫기를 선택합니다.

참고: 프라이빗 REST API를 생성하고 구성할 경우 이 ID를 사용하세요.

인터페이스 엔드포인트의 퍼블릭 DNS 이름 가져오기

닫기를 선택하면 Amazon VPC 콘솔에 엔드포인트 페이지가 표시됩니다. 엔드포인트 페이지의 세부 정보 탭에 있는 DNS 이름 열에서 인터페이스 엔드포인트의 퍼블릭 DNS 이름(예: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com)을 복사합니다.

두 번째 계정(계정 B)에서 API Gateway 프라이빗 REST API를 생성합니다.

  1. 계정 B에서 API Gateway 콘솔을 엽니다.
  2. API 생성을 선택합니다.
  3. API 유형 선택에서 REST API 프라이빗 아래에 있는 빌드를 선택합니다.
  4. 생성 페이지에서 프로토콜 선택REST로 설정합니다.
  5. 새 API 생성에서 새 API를 선택합니다.
  6. 설정에서 다음 정보를 입력합니다.
    API 이름에 이름을 입력합니다.
    (선택 사항) 설명에 설명을 입력합니다.
    엔드포인트 유형프라이빗로 설정합니다.
    VPC 엔드포인트 ID에서 인터페이스 엔드포인트 ID를 입력합니다. 그런 다음 추가를 선택합니다.
    참고: 인터페이스 엔드포인트를 프라이빗 REST API와 연결하면, API Gateway는 새로운 Amazon Route 53 별칭 레코드를 생성합니다. Route53 별칭을 사용하여 프라이빗 API에 액세스할 수 있습니다.
  7.  API 생성을 선택합니다.

자세한 내용을 보려면 Amazon API Gateway에서 프라이빗 API 생성을 참조하세요.

인터페이스 엔드포인트에서 API를 호출할 수 있도록 허용하는 프라이빗 REST API에 대한 리소스 정책을 구성합니다.

1.    API Gateway 콘솔의 탐색 창의 API에서 리소스 정책을 선택합니다.

2.    리소스 정책 페이지의 텍스트 상자에 다음 예제 리소스 정책을 입력합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-1a2b3c456d7e89012"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*"
    }
  ]
}

참고: vpce-1a2b3c456d7e89012를 인터페이스 엔드포인트 ID로 교체하세요.

자세한 내용을 보려면 프라이빗 API의 리소스 정책 설정을 참조하세요.

프라이빗 REST API를 위한 메서드 설정

  1. API Gateway 콘솔의 탐색 창의 API 아래에서 리소스를 선택합니다.
  2. 리소스 창에서 작업을 선택한 다음, API 배포를 선택합니다.
  3. /resource 노드 아래의 드롭다운 목록에서 모두를 선택한 다음 확인 표시 아이콘을 선택합니다.
  4.  / - 모두 - 설정 창에서 통합 유형에서 모의를 선택합니다.
    참고: 모의 통합은 도달하는 모든 요청에 응답합니다.
  5. 저장을 선택합니다.

자세한 내용을 보려면 API Gateway에서 REST API 메서드 설정을 참조하세요.

프라이빗 REST API 배포

  1. API Gateway 콘솔리소스 창에서 작업을 선택한 다음 API 배포를 선택합니다.
  2. API 배포 대화 상자에 다음 정보를 입력합니다.
    배포 단계에서 **[New Stage]**를 선택합니다.
    단계 이름에서, 예를 들어 dev 또는 test와 같은 이름을 입력합니다.
  3.  배포를 선택합니다.
  4.  스테이지 편집기 창에서 다음 메시지를 검색합니다.프라이빗 DNS가 활성화된 경우, 다음 URL을 사용하세요. 프라이빗 REST API의 호출 URL을 복사합니다.
    참고: 프라이빗 REST API의 호출 URL을 사용하여 설정을 테스트합니다.

자세한 내용을 보려면 API 게이트웨이 콘솔을 사용하여 프라이빗 API 생성을 참조하세요.

계정 A에서 프라이빗 REST API를 호출하여 설정을 테스트합니다.

  1. 계정 A에서 인터페이스 엔드포인트와 동일한 Amazon VPC에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작합니다.
    중요: 인터페이스 엔드포인트와 연결한 보안 그룹을 선택합니다.
  2. Amazon EC2 인스턴스에 연결합니다.
    **참고:**EC2 인스턴스는 AWS 계정에 요금이 부과될 수 있습니다. 테스트할 인스턴스를 생성한 경우, 테스트가 끝나면 인스턴스를 종료하여 요금이 반복 청구되는 것을 방지하세요.
  3. Amazon EC2 인스턴스의 명령줄에서 다음 curl 명령 중 하나를 실행하여 계정 B의 프라이빗 REST API를 호출합니다.
    **참고:**자세한 내용을 보려면 엔드포인트별 퍼블릭 DNS 호스트명을 사용하여 프라이빗 API 호출을 참조하세요. curl에 대한 자세한 내용을 보려면 curl 프로젝트웹사이트를 참조하세요.

프라이빗 DNS 이름의 경우

다음 명령을 실행합니다.

curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name

참고: https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name을 프라이빗 API의 호출 URL로 바꾸세요. 이 명령은 인터페이스 엔드포인트에 프라이빗 DNS를 사용하도록 설정한 경우에만 작동합니다. 자세한 내용을 보려면 프라이빗 DNS 이름을 사용하여 프라이빗 API 호출을 참조하세요.

Route 53 별칭의 경우 

다음 명령을 실행합니다.

curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name

참고: a1bc234d5e를 API의 ID로, vpce-1a2b3c456d7e89012를 인터페이스 엔드포인트 ID로, region을 API의 리전으로 바꾸세요. stage-name을 프라이빗 API를 배포한 스테이지의 이름으로 바꾸세요. 자세한 내용을 보려면 Route53 별칭을 사용하여 프라이빗 API 액세스를 참조하세요.

호스트 헤더가 있는 퍼블릭 DNS 이름의 경우

다음 명령을 실행합니다.

curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"

참고: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com을 인터페이스 엔드포인트의 퍼블릭 DNS 이름으로 바꾸고 stage-name을 프라이빗 API를 배포한 단계의 이름으로 바꿉니다. a1bc234d5e.execute-api.region.amazonaws.com을 프라이빗 API의 호출 URL로 바꾸세요.

x-apigw-api-id 헤더가 포함된 퍼블릭 DNS 이름의 경우

다음 명령을 실행합니다.

curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"

참고: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com을 인터페이스 엔드포인트의 퍼블릭 DNS 이름으로 바꾸고 stage-name을 프라이빗 API를 배포한 단계의 이름으로 바꿉니다. a1bc234d5e를 API ID로 바꾸세요.

4.    명령 출력을 검토합니다. 연결에 성공하는 경우 API Gateway가 200 OK 응답을 반환합니다.

관련 정보

API Gateway 프라이빗 API 엔드포인트에 연결할 때 발생하는 문제는 어떻게 해결해야 하나요?

인터페이스 VPC 엔드포인트를 사용하여 AWS 서비스에 액세스

다중 리전 프라이빗 API Gateway