API Gateway 보안

Jihun Kim·2022년 2월 24일
0

aws solutions architect

목록 보기
10/57
post-thumbnail

API Gateway 보안

IAM Permissions

  • IAM 허가 정책을 생성해 User 또는 Role에 attatch 하여 접근을 허가할 수 있다.
  • 그러면 API Gateway를 호출할 경우 IAM 허가를 증명할 수 있다.
  • 사용자의 인프라 내로 API 액세스를 제공하는 것이 좋다.
  • IAM 자격 증명이 헤더에 있는 "sig v4" 기능 활용해 헤더가 API Gateway로 전달 된다.
    - 즉, 클라가 REST API를 Sigv4를 이용해 호출하고 API Gateway는 IAM을 불러서 IAM 정책을 확인하고 모든 것을 확인한다. 그리고 허가 된 유저인 경우 이후에 백엔드로 넘어가게 된다.



Lambda Authorizer(인증자)

  • 흔히 Custom Authorizers로 알려져 있다.
  • 전달 될 헤더에 있는 토큰의 유효성을 확인하기 위해 Lambda를 이용한다.
    - 인증 결과를 캐싱할 수 있다.
  • 3rd party authenticatioin인 OAuth/ SAML 등을 이용시 사용하기에 좋다.
  • 승인의 결과로 람다는 사용자의 IAM 정책을 반환하며 이를 통해 사용자가 API를 요청할 수 있는 지 없는 지를 확인한다.



Cognito User Pools

  • Cognito는 유저 라이프싸이클을 관리한다(페이스북, 구글 로그인 등에 사용한다).
  • API Gateway는 AWS Cognito의 신원을 자동으로 확인한다.
  • 커스텀 람다 함수와 같은 어떤 것도 커스터마이징 할 필요가 없다.
    - 모두 무료로 제공된다.
  • Cognito는 인증을 도와주지만 허가를 도와주지는 않는다.
    - 즉, 승인 패턴이 아니라 인증 패턴만 제공한다.
  • 즉, 아래 도식을 보면 클라는 Cognito User Pools를 호출해 인증 요청을 하고 그러면 Cognito는 토큰을 반환한다.
    - 그리고 클라는 API Gateway에 토큰을 넘겨 준다.
    - 그 다음, API Gateway가 직접 받은 토큰이 유효한 지 Cognito를 이용해 검증한다.
    - 그러면 API Gateway는 백엔드로 토큰을 넘겨 주는데 이 때 백엔드가 직접 클라가 요청할 수 있는 권한이 있는 지 확인해야 한다.

AWS Cognito

  • 우리 앱과 사용자가 통신할 수 있도록 사용자에게 증명을 부여할 때 사용한다.

Cognito User Pools

  • 앱 사용자들이 로그인/회원가입 할 수 있도록 하는 기능을 갖는다.
  • API Gateway와 통합해 사용 된다.

Cognito Identity Pools(Federated Identity)

  • AWS 증명서를 앱 사용자에게 직접 제공하며 이를 통해 사용자가 AWS 자원에 직접 접속할 수 있다.
  • 이 때 Cognito User Pools를 증명 제공자로서 통합해 사용할 수 있다.

Cognito Sync

  • 디바이스와 Cognito의 데이터를 동기화 한다.
  • Deprecated 되어 AppSync로 대체 되었다.


Cognito User Pools(CUP)

  • 모바일 앱 사용자를 위한 서버리스 데이터베이스이다.
  • 간단한 로그인(username + 패스워드 조합)에 사용 된다.
  • 이메일 또는 전화번호 확인 등에 사용될 수 있다.
  • Federated Identities(Facebook, Google, SAML 등)를 사용할 수 있다.
    - 가령, 사용자가 구글을 이용해 로그인 하면 ID를 User Pools에서 가져온다.
    - Federated Identities를 사용할 수 있는 것이지 이것 자체는 아니다.
    - 이를 이용해 타인의 아이디를 확인하기 위한 Json Web Tokens(JWT)를 받게 된다.
  • 인증을 위해 API Gateway와 통합될 수 있다.


Federated Identity Pools

  • 클라에서 AWS 자원에 바로 접근할 수 있도록 만드는 것이 목적이다.
    - 프록시, API 등이 아니다.
  • federated identity provider에 로그인하거나 익명으로 있을 수 있다.
  • 임시 AWS 자격 증명을 받게 된다.
    • 여기에는 IAM 정책이 이미 부착되어 있어서 IAM 정책에 따라 작업을 수행할 수 있다.
  • 예시
    - 페이스북 로그인을 이용해 S3 버킷에 쓰기 위한 임시 접속을 허용한다고 할 때,
    - 즉, 토큰이 사용가능하다는 전달을 받으면 Federated Identity Pools는 AWS에 대한 임시 증명서를 얻기 위해 STS 서비스를 요청하게 된다.



Cognito Sync

  • 현재는 deprecated 이며 AWS AppSync를 사용해야 한다.
  • 이는 유저의 선호도, 환경 설정, 앱의 시작 설정 등등의 정보를 보관한다.
  • 디바이스 간(iOS, Android ...) 동기화 기능을 가지고 있다.
  • Cognito 내에 Federated Identity Pool이 필요하다.
  • 데이터베이스에 데이터를 저장한다(현재는 1MB 미만)
  • 최대 20개의 데이터셋을 동기화할 수 있다.


SAM(Serverless Application Model)

서버리스 애플리케이션을 개발하고 배포할 수 있도록 도와주는 프레임워크이다.

  • configuration은 YAML 파일을 통해 구성할 수 있으며 아래 내용이 들어간다.
    - 람다 함수
    - API Gateway
    - Dynamo DB
    - Cognito User Pools
  • 위와 같이 config를 만들어 놓으면 SAM이 이를 자동으로 배포할 수 있도록 도와준다.
  • 또한 SAM은 유저가 디버깅을 편하게 할 수 있도록 로컬에서도 이용할 수 있도록 해준다.
  • SAM은 CodePlay와의 통합으로 빠르게 람다 함수를 배포할 수 있도록 해준다.


오답노트

profile
쿄쿄

0개의 댓글