최근 회사에서 AWS로 서비스 구축을 진행하면서 안전한 인증과 권한 관리 체계를 갖추는 것이 매우 중요하다는 것을 깨달았다. 이러한 측면에서 AWS Cognito 서비스가 해결책이 될 수 있음을 알게 되었다.
Amazon Cognito는 웹 및 모바일 애플리케이션을 위한 사용자 인증 및 권한을 부여하는 서비스로, AWS 리소스에 대한 액세스를 쉽고 안전하게 제어할 수 있다.
따라서 본 글에서는 Amazon Cognito의 자격증명 풀(Identity Pool) 기능을 활용하여 S3 버킷의 파일 목록에 접근하는 방법을 실습해보고자 한다.
Amazon Cognito란?
- 웹 및 모바일 앱을 위한 자격 증명 플랫폼이다.
- Cognito에는 사용자 풀 (User Pool) 과 자격 증명 풀 (Identity Pool) 로 구성된다.
사용자 풀(User Pool)
- 인증(자격 증명 확인)을 담당한다.
- 앱 또는 API에 사용자를 인증하려는 경우 사용한다.
사용자 풀의 사용사례
- 앱을 위한 가입 및 로그인 웹 페이지 설계
- 사용자 데이터 액세스 및 관리
- 사용자 장치, 위치 및 IP 주소를 추적하고 여러 위험 수준의 로그인 요청에 대응
- 앱에 사용자 지정 인증 흐름 사용
자격 증명 풀(Identity Pool)
- 인증된 사용자나 익명 사용자가 AWS 리소스에 액세스할 수 있도록 권한을 부여하려는 경우에 사용한다.
- 앱이 사용자에게 리소스를 제공할 수 있도록 AWS 보안 인증을 발급한다.
자격 증명 풀의 사용사례
- 사용자에게 Amazon Simple Storage Service(Amazon S3) 버킷 또는 Amazon DynamoDB 테이블과 같은 AWS 리소스에 대한 액세스 권한 부여
- 인증되지 않은 사용자를 위한 임시 AWS 자격 증명 생성
Cognito 자격증명 풀을 생성한 뒤 S3 파일 목록에 접근하기
1. Amazon Cognito 자격 증명 풀 및 IAM 역할 생성
1-1. Cognito 사용자 풀과 Cognito 자격증명 풀을 연결해서 사용할 것이라면 인증된 액세스를 선택한다.
1-2. 필자는 사용자 풀을 따로 연결하지 않고 게스트 액세스를 사용해서 인가를 받아볼 것이다.
1-3. 2단계 권한구성에서 IAM 역할을 생성해준다.
1-4. 3단계 자격 증명 풀 이름을 작성해준 뒤에 생성을 해준다.
2. 생성된 IAM 역할에 정책 추가
2-1. 권한추가 > 정책 연결 클릭
2-2. 정책 연결에서 S3 Read Only Access 연결
3. Amazon S3 버킷 및 객체 추가
3-1. 버킷 생성 - 이름 제외하고 나머지는 모두 기본값
3-2. 파일 및 폴더 업로드하기
3-3. 버킷의 권한 탭을 선택한 다음, 교차 오리진 리소스 공유(CORS) 섹션에서 편집을 선택합니다. 다음 JSON을 입력하고 변경사항 저장
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
4. 코드 작성(Node.js SDK)
4-1-1. S3Client의 Region, identity Pool Id를 수정한다.
4-1-2. S3 버킷 이름을 수정한다.
4-2. 다음과 같이 html 코드를 작성해준다.
위의 코드를 작성할 때 조금 힘들었던 점
- Cognito 공식문서에서 SDK를 연결할 때 SDK 설정 Javascript에 들어가보면 SDK 버전2용 개발자 가이드가 나온다.
- 하지만 SDK 버전2로 Cognito 자격증명 풀을 실행하면 에러가 발생한다.
- 이 문제를 해결하기 위해서는 SDK 버전3로 전환할 필요가 있었으나, SDK 버전3를 사용하려면 SDK3 Document를 살펴봐야 했다.
- SDK 버전 3의 문서는 대체로 잘 정리되어 있었지만, 코드에 추가해야 했던 @aws-sdk/credential-providers와 관련된 부분은 문서에서 찾기 어려워 해결까지 다소 시간이 소요되었다.
5. 실행
- 다음과 같이 S3 버킷에 있는 이미지 리스트 중 하나인 "1006450.jpg"를 localhost:3500에서 확인할 수 있다.
- 나머지 정보들은 가렸지만, S3 버킷에 있는 모든 객체들을 잘 출력하고 있는 것을 볼 수 있다.
마무리
이번 실습을 통해 Amazon Cognito의 자격 증명 풀 기능을 활용하여 S3 버킷의 파일 목록에 안전하게 접근하는 방법을 알아보았다. 자격 증명 풀을 사용하면 별도의 사용자 인증 과정을 거치지 않고도 AWS 리소스에 대한 액세스 권한을 제어할 수 있다.
Cognito 서비스는 사용자 인증, 권한 관리, 임시 자격 증명 발급 등의 기능을 제공하여 안전한 리소스 액세스 환경을 구축할 수 있다. 특히 모바일 앱과 같이 다양한 클라이언트가 연결되는 환경에서 Cognito를 활용하면 효과적인 인증/인가 체계를 구축할 수 있다.
개인적으로 AWS Cognito 자격증명 관련 문서들이 여러 곳에 흩어져있어서 실습을 진행하기에 조금 어려움을 겪었다. 하지만 그 과정에서 마주친 문제들을 해결해 나가며 얻은 성취감 또한 컸다.
'Cloud&Infra > AWS' 카테고리의 다른 글
Raspberry Pi와 AWS Service를 활용한 실시간 얼굴 인식 시스템 구축하기 - Part 1: 인프라 설정 (2) | 2024.11.09 |
---|---|
AWS SageMaker Neo와 AWS IoT Greengrass V2를 활용한 라즈베리파이 ML 모델 배포 가이드 (1) | 2024.10.27 |
S3 데이터를 RDS(Aurora MySQL) 클러스터로 로드하기 (1) | 2024.02.17 |
AWS QLDB와 Node.js 연결: 단계별 실습 (0) | 2023.05.14 |
AWS QLDB: 무엇이고 왜 필요한가?(블록체인과의 차이점) (0) | 2023.05.13 |