자습서: 프라이빗 REST API 빌드 - Amazon API Gateway

자습서: 프라이빗 REST API 빌드

이 자습서에서는 프라이빗 REST API를 생성합니다. 클라이언트는 Amazon VPC 내에서만 API에 액세스할 수 있습니다. API는 일반적인 보안 요구 사항인 공용 인터넷과 격리됩니다.

이 자습서는 완료되는데 약 30분이 걸립니다. 먼저 AWS CloudFormation 템플릿을 사용하여 Amazon VPC, VPC 엔드포인트, AWS Lambda 함수를 생성하고 API를 테스트하는 데 사용할 Amazon EC2 인스턴스를 시작합니다. 그런 다음 AWS Management Console를 사용하여 프라이빗 API를 생성하고 VPC 엔드포인트에서만 액세스를 허용하는 리소스 정책을 연결합니다. 마지막으로 API를 테스트합니다.

이 튜토리얼에서 생성하는 프라이빗 API의 개요입니다.

이 자습서를 완료하려면 AWS 계정과 콘솔 액세스 권한이 있는 AWS Identity and Access Management 사용자가 있어야 합니다. 자세한 내용은 API Gateway를 시작하기 위한 사전 조건 단원을 참조하세요.

이 자습서에서는 를 사용합니다AWS Management Console 이 API 및 모든 관련 리소스를 생성하는 AWS CloudFormation 템플릿은 template.yaml을 참조하세요.

1단계: 종속성 생성

이 AWS CloudFormation 템플릿을 다운로드하고 압축을 풉니다. 템플릿을 사용하여 Amazon VPC, VPC 엔드포인트 및 API의 백엔드 역할을 하는 Lambda 함수를 포함하여 프라이빗 API에 대한 모든 종속성을 생성합니다. 나중에 프라이빗 API를 생성합니다.

AWS CloudFormation 스택을 생성하려면
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. 스택 생성을 선택한 다음 새 리소스 사용(표준)을 선택합니다.

  3. 템플릿 지정에서 템플릿 파일 업로드를 선택합니다.

  4. 다운로드한 템플릿을 선택합니다.

  5. 다음을 선택합니다.

  6. 스택 이름private-api-tutorial을 입력하고 다음을 선택합니다.

  7. 스택 옵션 구성에서 다음을 선택합니다.

  8. 기능의 경우 AWS CloudFormation이 계정에 IAM 리소스를 생성할 수 있음을 확인합니다.

  9. 제출을 선택합니다.

AWS CloudFormation는 API에 대한 종속성을 프로비저닝합니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. AWS CloudFormation 스택 상태가 CREATE_COMPLETE인 경우 출력(Outputs)을 선택합니다. VPC 엔드포인트 ID를 적어둡니다. 이 자습서의 이후 단계를 위해 필요합니다.

2단계: 프라이빗 API 생성

프라이빗 API를 생성하여 VPC 내의 클라이언트만 액세스할 수 있도록 합니다.

프라이빗 API 생성
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API 생성(Create API)을 선택한 다음 REST API에 대해 빌드(Build)를 선택합니다.

  3. API 이름에서 private-api-tutorial을(를) 입력합니다.

  4. API 엔드포인트 유형에서 프라이빗을 선택합니다.

  5. VPC 엔드포인트 ID의 경우 AWS CloudFormation 스택의 출력에서 VPC 엔드포인트 ID를 입력합니다.

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

3단계: 메서드 및 통합 생성

GET 메서드와 Lambda 통합을 생성하여 API에 대한 GET 요청을 처리합니다. 클라이언트가 API를 호출하면 API Gateway는 1단계에서 생성한 Lambda 함수로 요청을 보낸 다음 클라이언트에 대한 응답을 반환합니다.

메서드 및 통합 생성
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API를 선택합니다.

  3. / 리소스를 선택한 다음 메서드 생성을 선택합니다.

  4. 메서드 유형에서 GET을 선택합니다.

  5. 통합 유형에서 Lambda 함수를 선택합니다.

  6. Lambda 프록시 통합을 켭니다. Lambda 프록시 통합을 통해 API Gateway는 정의된 구조를 사용하여 이벤트를 Lambda에 보내고 Lambda 함수의 응답을 HTTP 응답으로 변환합니다.

  7. Lambda 함수의 경우 1단계에서 AWS CloudFormation 템플릿으로 생성한 함수를 선택합니다. 함수의 이름은 private-api-tutorial로 시작합니다.

  8. 메서드 생성을 선택합니다.

4단계: 리소스 정책 연결

클라이언트가 VPC 엔드포인트를 통해서만 API를 호출하도록 허용하는 리소스 정책을 API에 연결합니다. API에 대한 액세스를 추가로 제한하기 위해 VPC 엔드포인트에 대한 VPC 엔드포인트 정책을 구성할 수도 있지만 이 자습서에는 필요하지 않습니다.

리소스 정책 연결
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API를 선택합니다.

  3. 리소스 정책, 정책 생성을 차례로 선택합니다.

  4. 다음 정책을 입력합니다. vpceID를 AWS CloudFormation 스택의 출력(Outputs)에서 VPC 엔드포인트 ID로 바꿉니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpceID" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*" } ] }
  5. Save changes(변경 사항 저장)를 선택합니다.

5 단계: API 배포

그런 다음 API를 배포하여 Amazon VPC의 클라이언트가 사용할 수 있도록 합니다.

API 배포
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API를 선택합니다.

  3. Deploy API(API 배포)를 선택합니다.

  4. 스테이지에서 새 스테이지를 선택합니다.

  5. 단계 이름test를 입력합니다.

  6. (선택 사항) 설명에 설명을 입력합니다.

  7. [Deploy]를 선택합니다.

이제 API를 테스트 할 준비가 되었습니다.

6단계: API에 공개적으로 액세스할 수 없는지 확인

curl를 사용하여 Amazon VPC 외부에서 API를 호출할 수 없는지 확인합니다.

API 테스트하기
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API를 선택합니다.

  3. 기본 탐색 창에서 스테이지를 선택한 후 테스트 스테이지를 선택합니다.

  4. 스테이지 세부 정보에서 복사 아이콘을 선택하여 API의 호출 URL을 복사합니다. 이 URL은 https://abcdef123.execute-api.us-west-2.amazonaws.com/test와 같은 형식입니다. 1단계에서 생성한 VPC 엔드포인트에는 프라이빗 DNS가 활성화되어 있으므로 제공된 URL을 사용하여 API를 호출할 수 있습니다.

  5. curl을 사용하여 VPC 외부에서 API를 호출합니다.

    curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test

    Curl은 API의 엔드포인트를 확인할 수 없음을 나타냅니다. 다른 응답을 받은 경우 2단계로 돌아가서 API의 엔드포인트 유형에 대해 프라이빗(Private)으로 선택해야 합니다.

    curl: (6) Could not resolve host: abcdef123.execute-api.us-west-2.amazonaws.com/test

그런 다음 VPC의 Amazon EC2 인스턴스에 연결하여 API를 호출합니다.

7단계: VPC의 인스턴스에 연결하고 API 호출

그런 다음 Amazon VPC 내에서 API를 테스트합니다. 프라이빗 API에 액세스하려면 VPC의 Amazon EC2 인스턴스에 연결한 다음 curl을 사용하여 API를 호출합니다. Systems Manager 세션 관리자를 사용하여 브라우저에서 인스턴스에 연결합니다.

API 테스트하기
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 인스턴스를 선택합니다.

  3. 1단계에서 AWS CloudFormation 템플릿으로 생성한 private-api-tutorial이라는 인스턴스를 선택합니다.

  4. 연결(Connect)을 선택한 다음 세션 관리자(Session Manager)를 선택합니다.

  5. 연결(Connect)을 선택하여 인스턴스에 대한 브라우저 기반 세션을 시작합니다.

  6. 세션 관리자 세션에서 curl을 사용하여 API를 호출합니다. Amazon VPC에서 인스턴스를 사용하고 있기 때문에 API를 호출할 수 있습니다.

    curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test

    응답 Hello from Lambda!이 수신되는지 확인합니다.

세션 관리자를 사용하여 Amazon VPC 내에서 API를 호출합니다.

Amazon VPC 내에서만 액세스할 수 있는 API를 성공적으로 생성한 다음 작동하는지 확인했습니다.

8단계: 정리

불필요한 비용을 방지하려면 이 자습서의 일부로 생성한 리소스를 삭제합니다. 다음 단계에서는 REST API 및 AWS CloudFormation 스택을 삭제합니다.

REST API 삭제
  1. https://console.aws.amazon.com/apigateway에서 API Gateway 콘솔에 로그인합니다.

  2. API 페이지에서 API를 선택합니다. API 작업을 선택하고 API 삭제를 선택한 다음 선택을 확인합니다.

AWS CloudFormation 스택을 삭제하려면
  1. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  2. AWS CloudFormation 스택을 선택합니다.

  3. 삭제를 선택한 다음 해당 선택을 확인합니다.

다음 단계: 를 통한 자동화AWS CloudFormation

이 자습서와 관련된 모든 AWS 리소스의 생성 및 정리를 자동화할 수 있습니다. 전체 예제 AWS CloudFormation 템플릿에 대해서는 template.yaml을 참조하세요.