...
S3 Pre-signed URL 공유
만일 이용자들이 S3 버킷에 public에서 접근해서 object를 다운받거나 업로드 하게 설정해야 하는 경우, 보통 두가지 방법이 있다.
1. 모든 파일을 퍼블릭으로 만들기
- 장점 : 별도의 관리가 필요없음
- 단점 : 아무나 파일 다운로드 가능 (보안 문제)
2. IAM 자격증명 공유 (Access Key Pair)
- 장점 : 지정한 사람만 공유 가능
- 단점 : 자격증명 유출/변경 시 공유자 모두에게 다시 부여 필요하고 관리 자체가 빡쌔다.
3. IAM 사용자 부여하기 (Role)
- 장점 : 지정한 사람만 공유 가능
- 단점 : IAM 사용자 숫자 제한 (5000개), 부여하는 과정과 유지보수의 어려움
이처럼, 버킷 자체를 public으로 열기엔 부담스럽고, 그렇다고 이용자에게 일일히 S3 접근권한을 일일히 부여하기도 번거로울 때, 사용할 수 있는게 바로 pre-signed url(미리 서명된 권한)이다.
미리 서명된 권한이란 임시 권한으로서 말 그대로 S3 접근을 위한 임시 url로, 일정 시간이 지나면 만료되면 public 접근이 불가능해진다.
- 파일에 접근 가능한 임시 URL을 생성
- 지정한 사람만 공유 가능
- URL의 만료기간 설정 가능
- GET, POST등 메소드 설정 가능 (파일 받는 것 뿐만 아니라 업로드 가능)
S3 Pre-signed URL 발급받기 (웹 콘솔)
웹에서 임시 URL을 발급받는 방법은 간단하다.
S3 Pre-signed URL 발급받기 (AWS CLI)
하지만 위와 같이 웹브라우저에서 일일히 임시 URL을 생성하는 것은 번거로우며 응용이 안된다.
따라서 AWS CLI에서 임시 URL을 발급 받는 방법을 알아보자.
먼저 S3에 접근권한이 있는 EC2를 하나 만들어준다.
만일 EC2 리소스에 IAM 역할 부여하는 방법을 잘 모른다면 다음 포스팅에서 '리소스에 역할(Role) 부여하기' 섹션을 참고하길 바란다.
S3 접근 권한이 없는 사용자가, EC2에게 요청해서 S3에 임시적으로 접근 가능한 URL을 발급 받는 방법은 다음과 같다.
- S3 접근 권한이 없는 사용자가 S3 접근 권한(IAM Role)을 가지고 있는 EC2에 HTTP(S)등의 API로 S3 접근 권한 URL을 요청한다.
- EC2에서 S3로 pre-signed url 발행을 요청한다. (IAM Role를 가지고 있어서 요청 가능)
- S3에서 pre-singed url 을 만들어 EC2에 전달한다.
- EC2는 url을 사용자에게 전달한다.
- 사용자는 발행받은 url (pre-signed url)로 S3에 접근하여 업로드/다운로드를 수행한다.
이와 같은 과정을 EC2 터미널에 접속하여 이행해보자.
$ aws configure set default.s3.addressing_style virtual # 디폴트 어드레싱 스타일 변경
$ aws s3 presign s3://버킷명/123123.pdf --region ap-northeast-2
이번엔 만료기간을 직접 지정해 주어서 발급해보자.
# 15초만 공유가능한 임시 URL 발급
$ aws s3 presign s3://test-bucket-inpa/123123.pdf --region ap-northeast-2 --expires-in 15
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.