Amazon API Gateway에서 프라이빗 API 생성 - Amazon API Gateway

Amazon API Gateway에서 프라이빗 API 생성

Amazon API Gateway를 사용하면 인터페이스 VPC 종단점을 사용하여 Amazon VPC의 가상 사설 클라우드에서만 액세스할 수 있는 프라이빗 REST API를 생성할 수 있습니다. VPC에서 생성하는 엔드포인트 네트워크 인터페이스입니다.

여러 AWS 계정은 물론 선택한 VPC 및 VPC 종단점에서 API에 액세스하는 것을 리소스 정책으로 허용하거나 거부할 수 있습니다. 각 엔드포인트를 사용하여 여러 개의 프라이빗 API에 액세스할 수 있습니다. 또한 온프레미스 네트워크에서 AWS Direct Connect를 사용하여 Amazon VPC에 연결한 다음 그 연결을 통해 프라이빗 API에 액세스할 수도 있습니다.

중요

프라이빗 API에 대한 액세스를 특정 VPC 및 VPC 종단점으로 제한하려면 API의 리소스 정책에 aws:SourceVpcaws:SourceVpce 조건을 추가해야 합니다. 예제 정책은 예제: 소스 VPC 또는 VPC 종단점에 따라 프라이빗 API 트래픽 허용 단원을 참조하십시오.

어떤 경우에든 프라이빗 API로 가는 트래픽은 안전한 연결을 사용하고, Amazon 네트워크를 벗어나지 않으며, 퍼블릭 인터넷과 격리됩니다.

아래 다이어그램과 같이 API Gateway용 인터페이스 VPC 종단점을 통해 프라이빗 API에 액세스할 수 있습니다. 프라이빗 DNS를 활성화한 경우, 프라이빗 또는 퍼블릭 DNS 이름으로 API에 액세스할 수 있습니다. 프라이빗 DNS가 비활성인 경우, 퍼블릭 DNS 이름만 사용할 수 있습니다.

참고

API Gateway 프라이빗 API는 TLS 1.2만 지원합니다. 이전 버전의 TLS는 지원되지 않습니다.


            활성화된 프라이빗 DNS로 프라이빗 API에 액세스

프라이빗 API를 만드는 단계는 대략 다음과 같습니다.

  1. 먼저 API 실행에 사용할 API Gateway 구성 요소 서비스에 대해 인터페이스 VPC 종단점을 생성합니다. VPC에서는 이를 execute-api라고 부릅니다.

  2. 프라이빗 API를 생성 후 테스트합니다.

    1. 다음 절차 중 하나를 사용하여 API를 만듭니다.

    2. VPC 엔드포인트에 대한 액세스 권한을 부여하려면 리소스 정책을 만들어 API에 연결합니다.

    3. API를 테스트합니다.

참고

아래 절차에서는 완전히 구성된 VPC가 이미 있는 것으로 가정합니다. 자세한 내용과 VPC를 만들기 시작하는 방법은 Amazon VPC 사용 설명서의 Amazon VPC 시작하기를 참조하세요.

프라이빗 API 배포 시 고려 사항

  • 기존의 퍼블릭 API(리전 또는 엣지 최적화된 API)를 프라이빗 API로 전환할 수 있고, 프라이빗 API를 리전 API로 전환할 수 있습니다. 그러나 프라이빗 API를 엣지 최적화된 API로 전환할 수는 없습니다. 자세한 내용은 API Gateway에서 퍼블릭 또는 프라이빗 API 엔드포인트 유형 변경 단원을 참조하십시오.

  • VPC 및 VPC 종단점에 프라이빗 API 액세스 권한을 부여하려면, 리소스 정책을 생성하여 새로 생성된(또는 전환된) API에 연결해야 합니다. 정책을 연결할 때까지는 그 API에 대한 모든 호출이 실패합니다. 자세한 내용은 프라이빗 API에 대한 리소스 정책 설정 단원을 참조하십시오.

  • 사용자 지정 도메인 이름은 프라이빗 API에 사용할 수 없습니다.

  • VPC 엔드포인트 하나를 사용하여 여러 개의 프라이빗 API에 액세스할 수 있습니다.

  • 프라이빗 API를 위한 VPC 엔드포인트에도 다른 인터페이스 VPC 엔드포인트와 동일한 제한이 적용됩니다. 자세한 내용은 Amazon VPC 사용 설명서의 인터페이스 엔드포인트 속성 및 제한을 참조하세요.

  • VPC 종단점을 REST API에 연결하거나 연결을 해제하여 Route 53 별칭에 DNS 레코드를 제공하고 프라이빗 API 호출을 간소화할 수 있습니다. 자세한 내용은 VPC 엔드포인트를 프라이빗 REST API와 연결 또는 연결 해제를 참조하십시오.

API Gateway execute-api용 인터페이스 VPC 종단점 생성

API 실행을 위한 API Gateway 구성 요소 서비스를 execute-api라고 합니다. 배포된 프라이빗 API에 액세스하려면 VPC에서 해당하는 인터페이스 VPC 종단점을 생성해야 합니다.

VPC 종단점을 생성한 뒤 이를 사용하여 여러 개의 프라이빗 API에 액세스할 수 있습니다.

API Gateway execute-api용 인터페이스 VPC 종단점을 만들려면

  1. https://console.aws.amazon.com/vpc/에서 Amazon VPC 콘솔에 로그인합니다.

  2. 탐색 창에서 [Endpoints]와 [Create Endpoint]를 선택합니다.

  3. [Service category]에서 [AWS services]를 선택해야 합니다.

  4. 서비스 이름에서 연결하려는 AWS 리전을 포함하여 API Gateway 서비스 엔드포인트를 선택합니다. 형식은 com.amazonaws.region.execute-api입니다(예: com.amazonaws.us-east-1.execute-api).

    유형에서 인터페이스(Interface)를 나타내는지 확인합니다.

  5. 다음 정보를 완성합니다.

    • VPC에서 엔드포인트를 생성할 VPC를 선택합니다.

    • 서브넷에서 엔드포인트 네트워크 인터페이스를 만들 서브넷(가용 영역)을 선택합니다.

      참고

      일부 AWS 서비스에서 지원되지 않는 가용 영역도 있습니다.

    • 프라이빗 DNS 이름 활성화를 위해 확인란을 선택된 상태로 둡니다. 프라이빗 DNS는 기본적으로 활성화되어 있습니다.

      프라이빗 DNS를 활성화하면 프라이빗 DNS 또는 퍼블릭 DNS를 통해 API에 액세스할 수 있게 됩니다. (이 설정은 API에 액세스할 수 있는 사용자가 아니라, 사용할 수 있는 DNS 주소 유형에만 영향을 미칩니다.) 그러나 프라이빗 DNS가 활성화된 API Gateway VPC 종단점을 사용하면 VPC에서 퍼블릭 API에 액세스할 수 없습니다 이러한 DNS 설정은 엣지 최적화된 사용자 지정 도메인 이름을 사용하여 퍼블릭 API에 액세스하는 경우 VPC에서 이러한 퍼블릭 API를 호출하는 기능에는 영향을 미치지 않습니다. (프라이빗 DNS를 사용하여 프라이빗 API에 액세스하면서) 엣지 최적화된 사용자 지정 도메인 이름을 사용하여 퍼블릭 API에 액세스하는 것은 프라이빗 DNS가 활성화된 엔드포인트를 생성한 VPC에서 퍼블릭 API와 프라이빗 API에 모두 액세스할 수 있는 한 가지 방법입니다.

      참고

      프라이빗 DNS를 활성화된 상태로 두는 것이 바람직합니다. 프라이빗 DNS를 활성화하지 않으면 퍼블릭 DNS를 통해서만 API에 액세스할 수 있습니다.

      프라이빗 DNS 옵션을 사용하려면 VPC 속성 enableDnsSupportenableDnsHostnamestrue로 설정해야 합니다. 자세한 내용은 Amazon VPC 사용 설명서의 VPC에서 DNS 지원VPC에 대한 DNS 지원 업데이트를 참조하세요.

    • 보안 그룹에서 VPC 엔드포인트 네트워크 인터페이스와 연결할 보안 그룹을 선택합니다.

      선택한 보안 그룹은 VPC의 IP 범위 또는 VPC의 다른 보안 그룹으로부터 오는 TCP 포트 443의 인바운드 HTTPS 트래픽을 허용하도록 설정되어 있어야 합니다.

  6. [Create endpoint]를 선택합니다.

API Gateway 콘솔을 사용하여 프라이빗 API 생성

API Gateway 콘솔을 사용하여 프라이빗 API를 생성하려면

  1. API Gateway 콘솔에 로그인하고 + API 생성을 선택합니다.

  2. 새 API 생성(Create new API)에서 새 API(New API) 옵션을 선택합니다.

  3. API 이름(API name)에 이름(예: Simple PetStore (Console, Private))을 입력합니다.

  4. 엔드포인트 유형에서 Private을 선택합니다.

  5. API 생성(Create API)을 선택합니다.

여기서부터는 HTTP 사용자 지정 통합을 사용하여 API 만들기의 1 - 6단계에 설명된 대로 API 메서드와 이에 연결된 통합을 설정하는 단계로 나아갈 수 있습니다.

참고

API에 VPC 또는 VPC 엔드포인트에 대한 액세스 권한을 부여하는 리소스 정책이 생길 때까지는 모든 API 호출이 실패합니다. API를 테스트하고 배포하기 전에 프라이빗 API에 대한 리소스 정책 설정에 설명된 것과 같이 리소스 정책을 생성하고 이 정책을 API에 연결해야 합니다.

AWS CLI를 사용하여 프라이빗 API 생성

AWS CLI를 사용하여 프라이빗 API를 생성하려면 다음과 같이 create-rest-api 명령을 호출하세요.

aws apigateway create-rest-api \ --name 'Simple PetStore (AWS CLI, Private)' \ --description 'Simple private PetStore API' \ --region us-west-2 \ --endpoint-configuration '{ "types": ["PRIVATE"] }'

성공적으로 호출되면 다음과 비슷한 출력 결과를 반환합니다.

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Simple private PetStore API", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (AWS CLI, Private)" }

여기서부터는 AWS CLI 명령을 사용한 엣지 최적화 API 설정에 제공된 지침에 따라 이 API에 대해 메서드와 통합을 설정할 수 있습니다.

API를 테스트할 준비가 되면, 프라이빗 API에 대한 리소스 정책 설정에 설명된 것과 같이 리소스 정책을 만들고 이 정책을 API에 연결합니다.

JavaScript용 AWS SDK를 사용하여 프라이빗 API 생성

JavaScript용 AWS SDK를 사용하여 프라이빗 API를 생성하려면

apig.createRestApi({ name: "Simple PetStore (node.js SDK, private)", endpointConfiguration: { types: ['PRIVATE'] }, description: "Demo private API created using the AWS SDK for node.js", version: "0.00.001" }, function(err, data){ if (!err) { console.log('Create API succeeded:\n', data); restApiId = data.id; } else { console.log('Create API failed:\n', err); } });

성공적으로 호출되면 다음과 비슷한 출력 결과를 반환합니다.

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Demo private API created using the AWS SDK for node.js", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (node.js SDK, private)" }

이전 단계를 완료한 후에 Node.js용 AWS SDK를 사용한 엣지 최적화 API 설정의 지침에 따라 이 API에 대해 메서드와 통합을 설정할 수 있습니다.

API를 테스트할 준비가 되면, 프라이빗 API에 대한 리소스 정책 설정에 설명된 것과 같이 리소스 정책을 만들고 이 정책을 API에 연결합니다.

프라이빗 API에 대한 리소스 정책 설정

프라이빗 API에 액세스하려면 먼저 리소스 정책을 생성하여 API에 연결해야 합니다. 이렇게 하면 사용자의 VPC 및 VPC 종단점 또는 사용자가 명시적으로 액세스 권한을 부여한 다른 AWS 계정의 VPC 및 VPC 종단점에서 API에 대한 액세스 권한이 부여됩니다.

그러려면 API Gateway 리소스 정책을 생성하여 API에 연결의 지침을 따르십시오. 4단계에서 원본 VPC 예제를 선택합니다. {{vpceID}}(중괄호 포함)를 사용자의 VPC 종단점 ID로 바꾼 후 저장을 선택하여 리소스 정책을 저장합니다.

또한 부여되는 액세스를 지정하기 위해 VPC 종단점에 엔드포인트 정책을 연결하는 것이 좋습니다. 자세한 내용은 API Gateway의 프라이빗 API에 대한 VPC 종단점 정책 사용 단원을 참조하십시오.

API Gateway 콘솔을 사용하여 프라이빗 API 배포

프라이빗 API를 배포하려면 API Gateway 콘솔에서 다음을 수행하세요.

  1. 왼쪽 탐색 창에서 API를 선택한 다음, 작업 드롭다운 메뉴에서 API 배포를 선택합니다.

  2. Deploy API(API 배포) 대화상자에서 스테이지(API의 첫 번째 배포의 경우 [New Stage])를 선택합니다. Stage name(스테이지 이름) 입력 필드에 이름(예: “test”, “prod” 또는 “dev”)을 입력합니다. 선택적으로 Stage description(스테이지 설명) 및/또는 Deployment description(배포 설명)을 제공합니다. 그런 다음 배포를 선택합니다.

VPC 엔드포인트를 프라이빗 REST API와 연결 또는 연결 해제

VPC 종단점을 프라이빗 API와 연결하면 API Gateway에서 새로운 Route 53 ALIAS DNS 레코드를 생성합니다. Host 헤더를 재정의하거나 x-apigw-api-id 헤더를 전달하지 않고 에지 최적화 또는 리전 API를 호출할 때처럼 이 레코드를 사용하여 비공개 API를 호출할 수 있습니다.

생성된 기본 URL의 형식은 다음과 같습니다.

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

VPC 엔드포인트를 프라이빗 REST API와 연결하거나 연결을 해제하려면 API 구성을 업데이트해야 합니다. API Gateway 콘솔, AWS CLI 또는 API Gateway용 AWS SDK를 사용하여 이와 같이 변경할 수 있습니다. DNS 전파로 인해 업데이트 작업을 완료하는 데 몇 분이 걸릴 수 있습니다. 그 동안에도 API를 사용할 수 있지만, 새로 생성된 DNS URL의 DNS 전파는 계속 진행 중일 수 있습니다. 몇 분 후에도 DNS에서 새 URL이 확인되지 않으면 API의 새로운 배포 생성을 시도할 수 있습니다.

AWS CLI를 사용하여 VPC 엔드포인트를 프라이빗 REST API와 연결

API 생성 시 VPC 엔드포인트를 연결하려면 다음 명령을 사용하십시오.

aws apigateway create-rest-api \ --name Petstore \ --endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \ --region us-west-2

출력은 다음과 같습니다.

{ "apiKeySource": "HEADER", "endpointConfiguration": { "types": [ "PRIVATE" ], "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee" ] }, "id": "u67n3ov968", "createdDate": 1565718256, "name": "Petstore" }

VPC 엔드포인트를 이미 생성된 프라이빗 API에 연결하려면 다음 CLI 명령을 사용하십시오.

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \ --region us-west-2

출력은 다음과 같습니다.

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }

AWS CLI을 사용하여 프라이빗 REST API에서 VPC 엔드포인트 연결 해제

프라이빗 API에서 VPC 엔드포인트 연결을 해제하려면 다음 CLI 명령을 사용하십시오.

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \ --region us-west-2

출력은 다음과 같습니다.

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }