문제 상황
위처럼 퍼블릭 엑세스 차단을 활성화하면, 객체를 안전하게 보호할 수는 있지만, 외부에서 접근할 수가 없다.
하지만, 객체에 접근을 해야하긴한다.
당연하게도, 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 프로세스를 살펴보자.
- 클라이언트는 서버에게 pre-signed-url 을 요청
- 업로드할 시 Http Method PUT 사용
- 다운로드할 시 Http Method GET 사용
- 서버는 pre-signed-url을 응답
- 클라이언트가 pre-signed-url을 통해 S3에 업로드 및 객체를 다운로드
- S3는 클라이언트에게 성공 응답 제공
프로세스를 보면, 서버에서 s3에 접근하는 key값을 관리하고 있다.
즉, 보안 관련 key 값은 서버에서 잘 관리를 한다.
그러면, Pre-Signed-URL에 단점은 없어?
클라이언트에서 이미지를 조회할 일이 있을 때마다 Pre-Signed-URL을 만들어줘야하기때문에 비효율적이다.
한 번 인증한 클라이언트라면 바로바로 객체에 접근이 가능하면 좋을 것같은데 그런게 어디 없을까?
당연히 존재한다!
이는 다음 포스팅에서 다루도록 하겠다!
'인프라' 카테고리의 다른 글
왜 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 |