본문 바로가기
인프라

S3 퍼블릭 엑세스 차단을 활성화하면서 객체에 접근하는 방법, Pre-Signed-URL

by Big Sun 2023. 12. 3.
728x90

문제 상황

 

 

위처럼 퍼블릭 엑세스 차단을 활성화하면, 객체를 안전하게 보호할 수는 있지만, 외부에서 접근할 수가 없다.

 

하지만, 객체에 접근을 해야하긴한다.

 

당연하게도, S3에서는 외부에서 해당 객체를 접근할 수 있는 방법을 제공하는 데

이것이 Pre-Signed-URL이다.

 

💡 Pre-Signed-URL을 사용하는 또 다른 이유는 뭐가 있을까??

업로드하는 방식은 크게 2가지로 분류가 가능하다.

첫 번째는 클라이언트에서 서버를 거치지 않고 S3에 바로 업로드하는 방법이다. 이때, 클라이언트에서 key값을 가지고 있어야하기때문에 보안상 문제가 있다.

두 번째는 클라이언트에 서버로 객체를 넘겨 서버에서 S3로 업로드하는 것이다. 이 방법은 key가 서버에 있기때문에 상대적으로 안전하지만 서버의 부하가 심해질 수 있다.

위 2가지 문제를 해결하는 방식이 Pre-Signed-URL이다.
즉, key 값을 가지고 있는 서버에서 유효기간이 있는 미리 서명된 URL을 클라이언트에 제공하여 클라이언트는 해당 URL을 통해 서버를 거치지 않고 객체에 접근하는 것이다.

 

Pre-Singed-URL

 

S3에서는 퍼블릭 엑세스 차단을 하면서 외부에 접근할 수 있는 방법을 제공한다.

바로, Pre-Signed-URL을 이용하는 것이다!

 

TIP : Signed-URL이란 것도 있다.

 

그렇다면, Pre-Signed-URL이 뭘까?

 

Pre-Signed-URL은 정해진 시간동안 S3 객체에 접근할 수 있는 권한을 가지는 URL이다.

해당 ULR은 정해진 기간동안 접근할 수 있고, 해당 기간이 지나면 더 이상 접근할 수 없다.

 

Pre-Signed-URL의 장점은 뭘까?

 

클라이언트에서 서버를 거쳐서 업로드하는 것이 아니라 클라이언트에서 S3에 바로 업로드하기 때문에 서버의 리소스가 절약된다.

여기서 “원래 그렇게 하는 게 아니야?”라고 생각할 수 있는 데 다시 한번 생각해보자

 

이미지를 업로드할 때 서버를 거치는 이유가 뭘까?

보안 문제때문이다. 아무나 업로드하는 것을 막고 내가 원하는 규칙 안에서 업로드를 통제하고 싶기때문이다.

 

보안 문제가 해결된다면, 서버를 거쳐서 업로드를 할 필요가 있을까??

없지~

 

한마디로 하면, 이미지 전달과 보안 절차를 분리하는 것이다!

 

그러면, 보안 문제는 어떻게 해결하는 건데?

 

먼저 Pre-Signed-URl 프로세스를 살펴보자.

 

  1. 클라이언트는 서버에게 pre-signed-url 을 요청
    1. 업로드할 시 Http Method PUT 사용
    2. 다운로드할 시 Http Method GET 사용
  2. 서버는 pre-signed-url을 응답
  3. 클라이언트가 pre-signed-url을 통해 S3에 업로드 및 객체를 다운로드
  4. S3는 클라이언트에게 성공 응답 제공

 

프로세스를 보면, 서버에서 s3에 접근하는 key값을 관리하고 있다.

즉, 보안 관련 key 값은 서버에서 잘 관리를 한다.

 

그러면, Pre-Signed-URL에 단점은 없어?

 

클라이언트에서 이미지를 조회할 일이 있을 때마다 Pre-Signed-URL을 만들어줘야하기때문에 비효율적이다.

 

 

한 번 인증한 클라이언트라면 바로바로 객체에 접근이 가능하면 좋을 것같은데 그런게 어디 없을까?

 

당연히 존재한다!

 

이는 다음 포스팅에서 다루도록 하겠다!

 

 

728x90

'인프라' 카테고리의 다른 글

왜 Private Subnet이 필요한가? (feat : 보안 그룹)  (1) 2024.11.18
네트워크 기본 학습 - IP, NAT, 포트 포워딩  (0) 2023.11.26
TCP/IP란?  (2) 2022.11.12
Port 8080 was already in use  (0) 2022.09.27