#16. AWS Security Reference Architecture

cl0·2025년 12월 2일

AWS_SRA

목록 보기
17/18

  • 나의 생각 : 사용자가 HTTPS 요청을 ALB에게 보내고, ALB는 그 요청을 받아서 AC보냄. AC는 login 람다를 통해 application에 사용자가 접근할 수 있는 경로를 제공함. 그런 다음. logout 람다를 통해 logout 할 수 있게 함.

**ALB + Cognito + Lambda 조합으로 “로그인/로그아웃”을 처리하고,
실제 앱 서버는 프라이빗 서브넷에서만 돌리는 구조


1. 구성 요소부터 정리

(1) Application account / OU – Workloads

  • 이 계정 안에

    • VPC, ALB, Lambda, EC2(ECS) 같은 애플리케이션 인프라
    • IAM Permissions, Roles 가 정의되어 있음.

(2) VPC

  • 사각형 안이 VPC.

  • 중요한 포인트: Application instance는 Private subnet 에 있음.

    • 인터넷에서 직접 접근 불가.
    • 오직 ALB 같은 프록시를 통해서만 접근.

(3) Application Load Balancer (ALB)

  • 유저가 HTTPS 로 접속하는 진입점.

  • Listener Rule 예:

    • path=/login → Login Lambda 로 라우팅
    • path=/logout → Logout Lambda 로 라우팅
    • 그 외 /, /app/* 등 → Application instance 타깃 그룹으로 라우팅

(4) AWS Lambda (login)

  • ALB 에서 /login 요청이 들어오면 이 Lambda 가 호출.

  • 역할:

    • Amazon Cognito 와 OIDC/OAuth2 플로우를 시작
    • 사용자 인증 완료 후, 세션/쿠키를 세팅하고 홈으로 리다이렉트

(5) AWS Lambda (logout)

  • ALB 에서 /logout 요청이 오면 호출.

  • 역할(그림에 텍스트로 있음):

    • ALB 세션 + Cognito 세션을 둘 다 정리
      → 사용자의 로그인 상태를 완전히 해제.

(6) Amazon Cognito

  • 유저 풀/도메인을 가진 ID 공급자(IdP) 역할.

  • Login Lambda 가 여기에 리다이렉트해서

    • ID/비밀번호, 소셜 로그인 등으로 인증 수행
    • 성공하면 auth code / token 을 Lambda 쪽으로 넘김.
  • 또한, “Access protected resources” 화살표:

    • 앱에서 Cognito 토큰을 들고 다른 보호된 리소스(API 등)에 접근하는 용도도 가능하다는 의미.

(7) Application instance (Private subnet)

  • 실제 비즈니스 로직이 도는 서버:

    • EC2, ECS 서비스 컨테이너, 혹은 내부 웹 앱.
  • ALB 에서 온 요청만 받음.

  • 유저가 인증된 상태인지, 토큰/쿠키를 보고 권한 체크.


2. 시나리오별 플로우

2-1. 사용자가 처음 접속 (로그인 과정)

  1. User → 브라우저에서 https://my-alb.example.com 접속.

  2. ALB:

    • 만약 아직 세션이 없다면, 앱이나 ALB 룰이 /login 으로 리다이렉트.
  3. ALB (path=/login)Login Lambda 호출.

  4. Login Lambda:

    • Cognito 도메인의 /authorize 로 리다이렉트 응답을 돌려줌.
  5. 브라우저가 Cognito 로그인 화면으로 이동 → 유저가 로그인.

  6. Cognito가 인증 성공 후, 설정된 redirect URI(다시 Login Lambda)로 auth code 전달.

  7. Login Lambda 가 code 를 받아 Cognito 토큰으로 교환하고,

    • ALB/앱이 사용할 세션 쿠키나 JWT 를 설정
    • / 같은 URL 로 리다이렉트 응답.
  8. 이후 요청부터는 ALB 가 Any other path value for homepage 룰에 따라
    Application instance 로 바로 보내고,
    앱은 세션/토큰을 보고 인증된 사용자로 처리.


2-2. 로그인 후 일반 요청

  1. User 가 /, /dashboard 등으로 요청.

  2. ALB 룰: Any other path value for homepage
    → 그대로 Application instance 타깃 그룹으로 라우팅.

  3. Application instance:

    • ALB 또는 쿠키/JWT 에 담긴 세션 정보를 확인.
    • 필요한 경우 Cognito 의 사용자 정보/권한을 참고해서
      보호된 리소스(API, DB 등)에 접근.

2-3. 로그아웃 과정

  1. User 가 “로그아웃” 버튼 클릭 → /logout 으로 요청.

  2. ALB Path=/logout 룰 → Logout Lambda 호출.

  3. Logout Lambda:

    • Cognito 의 /logout 엔드포인트 호출해서 Cognito 세션 제거
    • ALB 세션/쿠키도 만료 처리
      (그림에서 “Clears the session of the Application Load Balancer and Amazon Cognito”)
  4. Lambda 가 적절한 페이지(예: 로그인 페이지, 메인 랜딩 페이지)로 리다이렉트 응답.

  5. 이후 유저가 다시 접근하면 → 다시 /login 으로 유도.


3. 이 아키텍처의 특징 & 보안 포인트

  • 프론트 도어는 ALB 하나

    • HTTPS 강제, WAF 연동 가능.
  • 애플리케이션 서버는 Private subnet

    • 인터넷으로 직접 노출되지 않아서 안전.
  • 인증/세션 관리는 Cognito + Lambda 로 분리

    • 앱 코드에서 복잡한 OAuth2 플로우를 직접 구현할 필요 없음.
    • Logout 시 ALB·Cognito 둘 다 세션을 깔끔하게 지울 수 있음.
  • 필요하면 Login Lambda 에서

    • 로그인 후 사용자 그룹/클레임 읽어서
    • 특정 경로로 리다이렉트 → Role 기반 홈 화면 분기 같은 것도 구현 가능.

0개의 댓글