본문 바로가기

카테고리 없음

aws ecs - iam role 임시 자격 증명 만료 문제 (a.k.a. Presigned URL)

개요

presigned url 을 도입했음

 

기존에 s3 에 파일 업로드하던 구조는 다음과 같음
1. client 가 server 에게 파일 객체 전송
2. server 는 받은 파일 객체를 s3 에 업로드
 

 이번에 새로 개발하는 기능은
특정 페이지에서 한 번에 100개 이상의 파일을 업로드를 할 수 있어야 했음

기존 방식으로 진행할 경우, 100개의 파일을 client 에서 server 로, server 에서 s3 로 전송해야 하기 때문에
서버에 상당한 부하가 걸릴 수 있을 것 같아서
그에 대한 해결책으로 presigned url 을 적용하게 됨
 
 
 

문제 발생 

로컬 서버에서는 presigned url 테스트 잘 됐는데

클라우드(aws)에 배포된 서버 기준으로 테스트하니 오류 발생함

 

차이점이 있다면 aws credential 밖에 없었음..

로컬 서버: iam user 이용함 
클라우드 서버:  iam role 이용함

(참고로 둘 다 presigned url 업로드 권한은 다 부여한 상태라서 권한 부족 문제는 아님)
 
에러메세지는 아래와 같다.

 

 

 

 

문제 원인

AWS STS 문서에서 ASIA 로 시작하는 access key 에 대한 설명을 발견함

https://docs.aws.amazon.com/STS/latest/APIReference/API_GetAccessKeyInfo.html

 
AWS STS를 통해 발급된 임시 자격 증명ASIA로 시작하는 Access Key ID를 가진다는 것
위에서 첨부했던 에러메세지 캡쳐를 보면 Access Key ID 가 ASIA... 로 시작하는 것을 볼 수 있음

 

우리 서버는 aws ecs 에서 기동되고 있고

그 ecs 는 iam role 을 이용하여 각종 aws 리소스에 접근하고 있음. 즉, 임시 자격 증명이라는 소리

 
결론적으로

1. 클라우드 서버에서 presigned url 생성

2. 클라이언트가 해당 url 에 파일 업로드  ➡️ 이 시점에 임시 자격 증명이 만료되어서 오류가 발생한 것으로 보임 
 
 
 

해결 방법

1. 새로운 IAM User 생성 (*IAM Role 말고 IAM User임!!) 
2. 위에서 생성한 credential 정보를 서버 환경 변수 파일(.env)에 설정
3. 위 credential 정보로 presigend url 생성
 
이렇게 한 이유는
IAM User 는 영구 자격 증명을 가질 수 있기 때문에 임시 자격 증명 만료 문제를 방지할 수 있기 때문.