본문 바로가기
[AWS]/Lambda

[AWS] REST API Gateway와 Cognito & Lambda 연동

by METAVERSE STORY 2022. 11. 14.
반응형
728x170

 

 

REST API Gateway에 인증을 Cognito를 이용하여 적용해보도록 하겠다.
REST API Gateway를 통해서 사용자들이 접근하여 데이터를 바꾸거나, 삭제할수 있기 때문에, 해당 인증 절차가 중요한 부분을 차지한다.

오늘은 이전에 생성한 REST API Gateway의 Post Method 방식으로 요청하는것에 Cognito를 적용할것이다.

 

우선 구상도는 위와 같다
사용자가 API Gateway로 요청을 보내고, API Gateway는 연동되어 있는 인증 절차인 Cognito로 인증을 보낸다.
인증 성공시 Token이 발행되고 해당 Token으로 Lambda로 요청을 한다.
Token과 함께 수신된 요청에 대해서는 Dynamo DB로 Body 부분의 데이터를 적재하고,
데이터 적재가 성공되면 성공코드와 함께 Lambda, API Gateway를 통해서 사용자에게 response를 보낸다.

 

 

1. Cognito 설정

우선 Cognito로 이동한다.

처음 Cognito로 접근하면 위와 같은 화면을 확인할 수 있다.

Cognito는 사용자들의 회원가입, 로그인, 접속 등을 관리한다.
해당 서비스를 적용하면 코드상의 Authentication 로직을 작성하지 않아도 Cognito에서 처리가 가능하다.

우선 Manage User Pools를 클릭하고 Create a user pool 버튼을 클릭한다.

Cognito의 이름을 입력하고 Review defaults를 클릭한다.

모든 항목을 확인하고 가장 하단의 Create pool을 클릭한다.

Pool 생성이 완료 되었다.
여기서 User Pool이란, 사용자들을 적재하고, 각각의 사용자들의 인증 방식과, 어떤 경로로 접근을 할것인지에 대한 관리라고 보면 된다.

 

다음으로는 Domain name을 클릭한다.

Amazon Cognito domain에 이름을 입력하는데, 해당 도메인은 글로벌하게 사용되는것이기 때문에, 유니크한 이름을 입력해야 한다.

 

다음으로는 Resource servers를 클릭하여 API Gateway와 연동한다. (이전 글 참고 https://cloud-allstudy.tistory.com/907)

이름을 입력하고 Identifier에 REST API Gateway의 이름을 입력하고 Scopes에 데이터를 입력한 후에 저장한다.

 

 

 

다음으로는 App Client로 이동한다.
App Client의 경우는 인증되지 않은 사용자들을 어디로 redirect 할것인지 등을 설정한다.

이름만 입력후 저장한다.

다음으로는 App client settings로 이동하여 Callback URL에 localhost, 하단에 추가 설정을 한후 저장을 누른다.

 

 

관리를 위한 Admin 계정 생성.

다음으로 Users and groups로 이동하여 사용자를 생성하거나, 그룹을 생성한다.

Create user를 클릭하여 user를 생성한다.

 

 

2. API Gateway 설정

API Gateway 생성 관련 이전 블로그 참조 https://cloud-allstudy.tistory.com/907

 

[AWS] Lambda와 API Gateway 연동

Lambda를 이용해서 다양한 서비스를 시도했었는데, 오늘은 API Gateway에서 API를 생성하여 Lambda와 연동시켜서 DB에 데이터를 적재해보도록 하겠다. 이전에 사용했던 Dynamo DB를 그대로 사용할것이다.

cloud-allstudy.tistory.com

다음으로는 API Gateway로 다시 이동하여 

우리는 Cognito를 연동할 것이기 때문에 Type에서 Cognito를 선택한다.
Cognito User Pool에서는 생성한 Cognito를 선택하고, Token Source에 Authorization을 입력하고 Create 버튼을 클릭하여 생성한다.

인증이 모두 생성이 되었고, 다음으로 메뉴에서 Resources를 클릭하고 Post 메소드와 연결을 해야한다.

Resources로 이동하여 Post를 선택한다.

다음으로 해당 Method의 Request를 클릭하고

위와 같이 모든 설정을 입력하고 Actions 버튼을 클릭하고 Deploy를 한다.

 

Deploy까지 되면 다시 Cognito로 이동한다.

Cognito에서 가장 하단에 위치한 Hosted UI를 클릭한다.

그럼 URL을 보면 Cognito에서 우리가 설정한 API Gateway로 접속하기전에 인증을 거치는 단계를 생성한다.
User Pool에 생성한 Username과 Password를 입력하고 로그인을 클릭한다.

 

최초 로그인이기 때문에 비밀번호를 변경하면, 아래와 같이 연결 할 수 없다는 문구만 확인된다.

잘못된 것이 아니니 당황하지 말고 다음 스탭으로 넘어가자.

 

 

3. PostMan 활용

그 다음은 PostMan을 활용한다.

이전에 테스트를 진행했던 Post 방식이다.
해당 테스트에서 Authorization탭으로 이동한다.

그리고 OAuth2.0을 선택한다.

설정에서 Token Name에는 적당한 이름으로 입력하고, Grant Type은 implicit를 선택하고 Callback URL은 http://localhost를 입력한다.

다음으로는 인증을 거치는 주소를 가져와야 하는데 이전에 유저명과 비밀번호를 입력했던 URL을 가져온다.

해당 URL을 Auth URL에 입력한다.

다음으로는 Cognito의 App Client ID를 

Client ID에 입력하고 Get New Access Token을 클릭한다.

그러면 위와 같이 로그인창을 확인할수 있는데, 해당 항목에 Username과 변경한 password를 입력하고 로그인한다.

성공했다는 알림창과 함께 토큰이 발행되었다.

Postman은 해당 과정에서 바로 토큰을 사용할수 있게 되었다. Use Token 버튼을 클릭하여 토큰을 사용하자.

그러면 인증과 관련된 모든 절차가 끝났으니, Send 버튼을 눌러서 테스트를 진행하면 정상적으로 동작하는것을 확인할 수 있다.

 

출처 : 

https://www.youtube.com/watch?v=3BtsKa0IFYQ 

 

반응형
그리드형

댓글