안녕하세요. J4J입니다.
이번 포스팅은 AWS Lambda와 API Gateway로 Serverless 구성하기 세 번째인 API Gateway에 Lambda 연결하는 방법에 대해 적어보는 시간을 가져보려고 합니다.
이전 글
[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (1) - Spring 세팅 및 로컬 테스트
[SpringBoot] AWS Lambda와 API Gateway로 Serverless 구성하기 (2) - Lambda 생성해서 배포하기
API Gateway 세팅
[ 1. API Gateway 접속 ]
[ 2. REST API 구축 ]
[ 3. API Gateway 상세 설정 ]
상세 설정은 다음과 같이 해주시면 됩니다.
그리고 여기서 설정하는 엔드포인트 유형에는 다음과 같이 있으니 원하시는 방향으로 선택해 주시면 됩니다.
- 지역 (리전 API) → 현재 리전에 배포되는 API
- 최적화된 에지 (엣지 최적화 API) → CloudFront에 배포되는 API
- 프라이빗 (프라이빗 API) → 특정 VPC에서만 접근 가능한 API
[ 4. 리소스 생성 ]
API Gateway를 생성하면 "작업"을 클릭하여 리소스를 생성해 줍니다
어떤 경로를 통해 Lambda에 접근할지에 대한 경로 값을 자유롭게 입력해 주시면 됩니다.
[ 5. 메서드 생성 ]
리소스를 생성했다면 다시 "작업"을 클릭하여 메서드를 생성해 줍니다.
HTTP 메서드는 배포하고 싶은 방식에 맞게 자유롭게 선택해 주고 등록할 Lambda 함수 명을 입력하여 메서드 등록을 완료하시면 됩니다.
[ 6. API 배포 ]
설정된 리소스와 메서드에 맞게 사용자가 접근할 수 있도록 배포하겠습니다.
"작업"을 클릭하여 API 배포를 선택해 줍니다.
기존에 작업되던 스테이지가 없을 것이기에 신규로 스테이지를 생성하여 최종 배포를 해줍니다.
[ 7. 호출 URL 확인 ]
배포가 완료되었다면 왼쪽 스테이지 메뉴에서 배포한 리소스의 메서드를 선택해 줍니다.
그러면 아래처럼 사용 가능한 호출 URL을 확인할 수 있습니다.
[ 8. 테스트 ]
이제 포스트맨과 같은 API 플랫폼을 이용하여 API를 테스트해 보겠습니다.
이전에 로컬에서 테스트했던 것처럼 동일하게 세팅을 해주고 테스트를 해보면 다음과 같은 결과를 확인해 볼 수 있습니다.
IAM 인증 활용
위의 상황까지만 확인해 보면 해당 API를 누구든 호출할 수 있습니다.
즉, 보안적으로 취약해질 수 있기 때문에 인증 방식을 추가하여 보안성을 높여보도록 하겠습니다.
먼저 IAM을 이용하여 인증하는 방법이 있습니다.
다음 순서대로 IAM 사용자를 생성한 뒤 API를 호출할 때마다 관련 정보들을 활용해 보겠습니다.
[ 1. 인증 추가하기 ]
왼쪽 리소스 메뉴에 접속한 뒤 추가할 메서드를 선택하여 "메서드 요청"을 클릭해 줍니다.
그리고 승인 쪽에 "AWS IAM"을 선택하여 적용해 줍니다.
[ 2. 재 배포하기 ]
설정이 완료되었다면 기존에 배포했던 스테이지에 재 배포를 해줍니다.
[ 3. IAM 접속 ]
[ 4. 사용자 추가 ]
왼쪽에 사용자 메뉴에 접속한 뒤 오른쪽에 있는 사용자 추가를 클릭해 줍니다.
[ 5. 사용자 상세 설정 ]
사용자 상세 설정은 다음과 같이 진행해 주시면 됩니다.
여기서 필수 값은 권한에 AmazonAPIGatewayInvokeFullAccess를 넣어줘야 합니다.
[ 6. 사용자 액세스 키 발급 ]
사용자 생성이 완료되었다면 목록에서 생성한 사용자를 클릭해 줍니다.
그리고 스크롤을 중간까지 내리면 보이는 "액세스 키 만들기"를 클릭해 줍니다.
액세스 키 사용 사례는 "AWS 컴퓨팅 서비스에서 실행되는 애플리케이션"을 선택해 준 뒤 키를 생성해 줍니다.
그러면 다음과 같이 액세스 키를 확인할 수 있고 해당 키들은 API를 호출할 때 사용될 예정이니 .csv 파일을 만드는 등의 방식을 통해 백업을 해두시면 됩니다.
[ 7. 테스트 ]
액세스 키까지 모두 완료되었다면 먼저 인증키 없이 API를 호출해 보겠습니다.
그러면 다음과 같이 API 호출이 올바르게 되지 않는 것을 확인할 수 있습니다.
이번엔 위에서 발급한 인증키를 등록하여 API를 호출해 보겠습니다.
포스트맨 기준으로 Authorization 탭으로 넘어가 Type을 "AWS Signature"로 선택해 줍니다.
그리고 AccessKey, SecretKey에는 위에서 발급된 인증키를 넣어주고 AWS Region에는 API Gateway가 생성된 Region을 입력해 줍니다.
그러면 다음과 같이 올바르게 데이터가 호출되는 것을 볼 수 있습니다.
API 키 인증 활용
이번엔 IAM을 활용하지 않고 API 키를 따로 발급하여 인증에 사용해 보도록 하겠습니다.
[ 1. 인증 추가하기 ]
왼쪽 리소스 메뉴에 접속한 뒤 추가할 메서드를 선택하여 "메서드 요청"을 클릭해 줍니다.
그리고 API 키가 필요함 쪽에 "true"를 선택하여 적용해 줍니다.
[ 2. API 키 생성하기 ]
왼쪽에 API 키 메뉴를 선택한 뒤 "작업"에서 API 키 생성을 클릭해 줍니다.
그리고 필요한 정보를 입력한 뒤 키를 생성해 줍니다.
[ 3. 사용량 계획 생성 ]
API 키를 생성했다면 이번엔 사용량 계획 메뉴에 접속하여 사용량 계획을 생성해 줍니다.
먼저 다음과 같이 기본 정보들을 입력해 줍니다.
그리고 다음과 같이 API 스테이지를 추가해 줍니다.
API 스테이지 추가가 완료되었다면 사용량 계획 API 키에 위에서 등록한 API 키를 추가해 준 뒤 최종 생성을 완료해 줍니다.
[ 4. 재 배포하기 ]
설정이 완료되었다면 기존에 배포했던 스테이지에 재 배포를 해줍니다.
[ 5. API 키 확인 ]
재 배포가 완료되었으면 생성한 API 키 상세 정보로 들어가 키 값을 확인해 줍니다.
[ 6. 테스트 ]
위의 설정이 완료되었다면 먼저 인증키 없이 API를 호출해 보겠습니다.
그러면 다음과 같이 API 호출에 실패하는 것을 확인할 수 있습니다.
이번엔 인증키를 등록한 뒤 API를 호출해 보겠습니다.
Header의 key값에는 x-api-key를 넣고 value에는 위에서 생성한 API 키를 입력합니다.
그러면 다음과 같이 API가 정상적으로 호출되는 것을 확인할 수 있습니다.
이상으로 AWS Lambda와 API Gateway로 Serverless 구성하기 세 번째인 API Gateway에 Lambda 연결하는 방법에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
댓글