서론 지난 글에서 API gateway에 권한 부여한 후 Cognito 인증하여 백엔드 리소스인 Lambda에 접근하는 것을 실습해봤다. 하지만 실제 어플리케이션이 사용자를 인식하여 동적으로 정보를 보여주기 위해서는 이것만으로는 충분하지 않을 것이다. 유저 맞춤형으로 정보를 제공해주기 위해서는 각 API 요청에서 헤더에 담겨있는 유저 정보를 꺼낼 수 있어야 한다. 이번 글에서는 Cognito로 생성한 JWT를 API gateway 뒤에 있는 백엔드 리소스 단에서 추출하여 사용자 정보를 인식하고 사용자 맞춤형 정보를 제공하는 실습을 진행한다. 시스템 구조 및 가정 현재 프로젝트의 시스템의 구조는 아래 그림과 같다. 본 글에서는 이와 같은 연결 설정이 모두 완료되었다고 가정하고 글을 진행할 것이다. 만약 그..
서론 프로젝트를 진행하다보면 기존의 VPC를 삭제하고 새로운 VPC를 생성하여 인스턴스 환경을 바꿔야 할 필요가 있다. 하지만 VPC를 삭제하는 과정에서 VPC 내부에 사용되는 ENI가 남아있어서 삭제가 안 되는 문제가 종종 발생한다. 이 글은 그 중에 빈번하게 발생하는 원인 중 하나인 API gateway 관련 eni 문제 때문에 VPC가 삭제되지 못하는 문제와 해결책을 기록해놓은 것이다. VPC가 삭제되지 않은 원인 '네트워크 인터페이스가 포함되어있습니다.' AWS는 VPC가 삭제되지 않을 때 그 원인을 직접적으로 알려준다. 아래와 같이 VPC에 현재 사용되고 있는 eni가 있어서 삭제되지 않는다고 한다. '네트워크 인터페이스가 포함되어 있습니다.' 를 클릭하면 현재 삭제되지 않는 VPC에 관련된 E..
서론 Cognito의 역할 Cognito는 아래 그림과 같이 동작한다. - 클라이언트 측에서 특정 경로로 접속하려고하는데, 그 경로가 권한이 부여되어있다면 접근이 제한된다. - 클라이언트는 Cognito의 앱 클라이언트로 들어가서 로그인을 실행한다. - 로그인에 성공하면 Cognito에서 인증 토큰을 발급하여 클라이언트 측으로 전송한다. 그리고 Cognito에 의해 Callback URL로 redirect되어 API gateway에 다시 접근하게 된다. - HTTP API gateway는 JWT 권한 부여자를 통해 헤더의 JWT를 인식하고 이를 Cognito에 보내서 알맞은 토큰인지 검증 요청한다. - 토큰이 알맞은 토큰일 경우 라우팅으로 접속하여 어플리케이션을 실행시켜 응답을 클라이언트에게 돌려준다. ..
Private Subnet에서 배포하면서 생긴 문제 프로젝트 진행 중에 AWS ECS가 생성되지 않는 문제가 발생했다. 현재 프로젝트 설계 구조는 다음과 같이 VPC 내 프라이빗 리소스를 통해 API gateway - Load balancer - Container Service 가 연결되어있는 구조다. 보안상의 이유로 어플리케이션인 ECS에는 외부에서 접속하지 못하게 해야한다. 우리 어플리케이션의 인증/인가는 API gateway와 Cognito에서 이뤄지기 때문에 ECS에는 인증/인가 프로세스가 없기 때문이다. 그래서 허가되지 않은 외부 사용자는 ECS에 접근할 수 없어야 한다. Private subnet에서 ECS를 생성하려고 하면 딜레이가 발생하다가 생성되지 않는 문제가 발생한다. 이 문제를 해결하..