[Serverless Service] API Gateway

728x90

API Gateway

  • AWS 에서 제공하는 서버리스 서비스이고 클라이언트가 접근 가능한 public REST API 를 생성할 수 있게 해준다. 클라이언트는 API 게이트웨이와 통신을 하게 된다.
  • 람다 함수에서 오는 요청을 프록시해준다.
  • API 게이트웨이를 사용하는 이유는 HTTP 엔드포인트보다 많은 기능을 제공하기 때문이다.
  • 인증, 사용량 설정, 개발 단계를 비롯한 여러 기능이 있기 때문이다.
  • Lambda 와 통합이 가능하고 서버리스 서비스이기 때문에 인프라를 관리할 필요가 없으며 WebSocket 프로토콜도 지원하기 때문에 API 게이트웨이를 통해 실시간으로 스트리밍이 가능하다.
  • API 게이트웨이가 API 버전 관리를 해주기 때문에 여러 환경을 다루는데 아주 유용하다. 개발 및 테스트, 운영 환경으로 버전을 나눠서 관리할 수 있다는 뜻이다.
  • API 게이트웨이는 보안 상 안전해야 하기 때문에 API 게이트웨이 보안 활성(인증과 권한)을 위한 수단이 많다.
  • API 키를 생성하거나 클라이언트가 API 게이트웨이에 너무 많은 요청을 보낼 경우 요청량을 조절할 수도 있다.
  • Swagger, Open API 3.0 등 일반적으로 사용되는 녀석들을 이용해서 미리 만들어진 API 를 빠르게 가져오고 내보낼 수도 있다.
  • 주로, HTTP 엔드 포인트 위에 API 게이트웨이가 있는 구조를 사용한다. API 게이트웨이를 통해 비율 제한과 캐싱, 사용자 인증, API 키를 이용할 수 있기 때문이다.
  • 다른 AWS Service 와 연동이 간편하다. API 게이트웨이의 API 를 사용하여 SQS 에 메시지를 바로 보낼 수 있다. 이렇게 사용할 경우 AWS 인증을 추가하고, 해당 API 를 공용으로 배포할 때 유용하다.

API Gateway - Endpoint Types

  • Edge-Optimized(디폴트)
    • 글로벌 클라이언트를 위한 것으로 전 세계에서 접근 가능하고 효율성을 위해 모든 CloudFront 의 엣지 로케이션에서 요청 라우팅으로 지연 시간을 개선한다.
    • API 게이트웨이는 처음 생성된 리전에만 존재하지만 엣지 로케이션을 사용하여 효율적으로 접근 가능하다.
  • Regional
    • 모든 사용자가 API 게이트웨이를 생성한 리전에 있다고 예상될 경우 Regional 옵션을 사용한다.
    • 캐싱 전략과 CloudFront 설정을 상세하게 제어할 수 있다.
  • Private
    • 사설 API 게이트웨이는 공용이 아니기 때문에 VPC 엔드 포인트 인터페이스(ENI) 를 통해서 액세스 된다.
    • 리소스 정책을 사용하여 API 게이트웨이 액세스를 정의한다.

API 게이트웨이 보안

API Gateway Security IAM Permissions

  • 사용자나 역할에 API 접근 권한을 주고 싶다면 IAM 정책을 사용자나 역할에 연결하면 된다. API 게이트웨이는 REST API 가 호출될 때 IAM 정보를 확인하게 된다.
  • 인프라에서 API 접근 권한을 부여할 때 아주 유용하다.
  • IAM 자격 증명은 복잡하지만 헤더로 권한을 확인할 수 있기 때문에 세팅만 된다면 아주 편하게 사용 가능하다. 그냥 헤더값을 넣어서 API 게이트웨이로 보내기만 하면 되기 때문이다.
  • 클라이언트는 API 게이트웨이를 호출하는데 Sig v4 를 사용하고 API 게이트웨이가 IAM 을 사용자를 확인할 수 있게 된다.
  • 추가적인 비용이 들지 않기 때문에 비용적으로 좋다. AWS 외부의 사용자에게 권한을 부여해야 하는 경우에 사용한다.

API Gateway Security - Lambda Authorizer

  • request 의 헤더로 토큰을 넣어서 Lambda 를 사용할 수 있게 해준다. 토큰을 확인하여 권한을 체크하는 것이다.
  • 인증 결과를 캐시에 저장할 수 있어서 요청이 들어올 때 마다 인증을 또 할 필요 없다.
  • OAuth, SAML 등 서드 파티 인증을 사용할 경우에 사용된다.
  • 즉, 서드 파티 토큰을 사용하여 REST API 를 호출할 수 있고, API 게이트웨이가 Lambda Authorizer 를 호출해서 토크을 넘기게 되면 Lambda 는 IAM 정책을 부여하고 API 게이트웨이와 백엔드가 통신하게 된다.

API Gateway Security - Cognito User Pools

  • Cognito 가 사용자의 수명 주기를 전부 관리하고 API 게이트웨이는 AWS Cognito 에서 자동으로 신원을 증명한다.
  • Cognito 는 무료이지만 인증에만 관여를 하고 권한을 부여하지는 못한다. 그냥 이 사용자가 진짜 사용자가 맞는지만 체크해주고 끝낸다.
  • 클라이언트가 인증을 위해서 Cognito User Pools 를 호출하면 클라이언트에게 토큰을 반환해주고, API 게이트웨이가 해당 토큰을 확인하여 사용자 인증을 하게 된다. 사용자가 인증되면 그 후에 백엔드와 통신할 수 있게 된다.
  • 백엔드는 클라이언트가 API 를 호출할 수 있는 권한이 있는지 확인을 해야 한다.

API Gateway Security 요약

  • IAM
    • AWS 계정에 이미 사용자나 역할이 있을 경우 사용한다.
    • IAM 정책을 통해 인증 및 권한 부여를 관리한다.
    • Sig v4 를 사용한다.
  • Custom Authorizer
    • 서드 파티 토큰을 사용하여 인증을 할 때 사용한다.
    • 어떤 IAM 정책이 반환될 지 모른다.(아주 유연하다.)
    • 인증과 권한 부여를 다룰 수 있고 Lambda 를 호출할 때 마다 비용이 청구된다.
  • Cognito User Pool
    • Facebook 이나 Google 로그인 등을 이용할 때 사용한다.
    • 인증 확인은 할 수 있지만 권한은 확인할 수 없기 때문에 백엔드에서 반드시 권한을 확인하는 절차를 밟아야 한다.
728x90