Amazon Cognito 자격 증명 풀로 S3 파일 접근하기

최근 회사에서 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 파일 목록에 접근하기

Cognito Identity Pool to S3 Architecture

 

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 자격증명 관련 문서들이 여러 곳에 흩어져있어서 실습을 진행하기에 조금 어려움을 겪었다. 하지만 그 과정에서 마주친 문제들을 해결해 나가며 얻은 성취감 또한 컸다.