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

2023. 12. 3. 20:51인프라

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