Amazon API Gateway는 핵심 비즈니스 서비스를 구축하는 데 집중할 수 있는 단순하고 유연하며 안전하고 완벽하게 관리되는 서비스를 제공합니다. API Gateway는 AWS Identity and Access Management(IAM), AWS Lambda 보조 장치 및 Amazon Cognito를 사용하는 다양한 액세스 제어 메커니즘을 지원합니다.

API가 호출되는 위치를 엄격하게 제어할 수 있습니다. 예를 들어 SaaS 모델을 통한 API를 제공하는 AWS 파트너인 경우 새로운 Amazon API Gateway 리소스 정책 기능을 활용하여 미리 정의된 IP 주소 범위를 사용하여 API에 대한 액세스를 제어할 수 있습니다. API Gateway 리소스 정책은 지정된 주체(일반적으로 IAM 사용자 또는 역할)가 API를 호출할 수 있는지 여부를 제어하기 위해 API에 연결하는 JSON 정책 문서입니다.

고객이 AWS Marketplace에서 SaaS 제품을 구독한 후 등록 정보에 IP 주소 범위를 요청할 수 있습니다. 그런 다음 이러한 IP 주소에서만 API에 액세스 할 수 있도록 설정하여 API를 안전하게 통합할 수 있습니다. 예를 들어 고객이 특정 지역에 분산되어 있다는 것을 알고 있다면 다른 모든 국가를 블랙리스트에 올릴 수 있습니다. 또는 글로벌 고객이 있는 경우 특정 IP 주소 범위만 화이트리스트에 추가할 수 있습니다.

리소스 정책은 어떤 문제를 해결합니까?

별도의 AWS 계정이 있는 분산 개발 팀에서는 통합 테스트가 어렵습니다. 다른 AWS 계정의 사용자가 API에 액세스 할 수 있도록 허용하려면 API 소유자 계정의 역할을 가정하기 위해 코드를 작성하고 유지해야 합니다. 또한 제 3자와 함께 작업하는 경우에는 전달자(bearer) 토큰 인증 전략을 구현하기 위해 Lambda 보조 장치를 기입해야 합니다.

이제 S3 버킷 정책과 유사한 리소스 정책을 사용하여 사용자 지정 보조 장치 또는 복잡한 응용 프로그램 로직을 작성하지 않고 API에서 중요한 제어 기능을 제공할 수 있습니다. 이 글에서는 API Gateway 리소스 정책을 사용하여 다른 AWS 계정의 사용자가 API에 안전하게 액세스 할 수 있도록 하는 방법을 시연합니다. 또한 코드를 작성하지 않고도 지정된 소스 IP 주소 범위 또는 CIDR 블록에서만 API 호출을 허용할 수 있습니다.

솔루션 개요

한 회사에 A팀과 B팀의 두 팀이 있다고 상상해 보세요. 팀 B는 Lambda 함수와 DynamoDB 데이터베이스로 지원되는 API를 생성했습니다. API를 제 3자에게 공개하고자 합니다. 첫째로, 그들은 팀 A가 통합 시험을 시행하기를 원합니다. API가 활성화되면 팀 B는 알려진 IP 주소 범위에서 API에 액세스 하는 사용자만 허용하려고 합니다.

다음 다이어그램은 시퀀스를 보여 줍니다.

API 구축부터 시작합니다. 자세한 설명으로 API를 생성하기 위해서는 SAM 템플릿과 AWS CLI를 사용합니다. 코드를 사용하여 API를 만들고 리소스 정책을 연결하려면 Sam-moviesapi-resourcepolicy GitHub repo를 참조하십시오.

https://cloud-img.hosting.kr/wp-content/uploads/2018/07/19140754/flow-diagram.png

여기에 단계별 절차가 나와 있으므로 커버 아래에서 발생하는 상황을 보다 깊이 이해할 수 있습니다.

API 생성

AccountB에서 API를 호스팅하고 있다고 가정합니다. 다음 명령을 실행합니다.

*git clone https://github.com/aws-samples/aws-sam-movies-api-resource-policy.git*