Presigned URL이란? (S3 사전 서명 URL)
Presigned URL(Presigned URL, 사전 서명된 URL) 은 AWS S3에 있는 객체를 제한된 시간 동안만 접근할 수 있게 만들어주는 임시 URL임.
이 URL은 S3에 직접 접근 권한이 없는 사용자에게도 안전하게 업로드/다운로드 권한을 위임하는 방식으로 사용됨.
1. 왜 Presigned URL이 필요한가?
- 사용자가 AWS 인증 정보를 갖고 있지 않아도, 특정 파일만 안전하게 접근하도록 허용하고자 할 때 사용됨
- S3에 대한 IAM 권한 없이, 제한된 시간/동작만 허용하는 보안 기능임
- API 서버를 거치지 않고 S3에 직접 파일을 업로드/다운로드함으로써 트래픽과 비용을 절감할 수 있음
2. Presigned URL의 동작 방식
- 서버에서 AWS SDK 를 통해 Presigned URL을 생성함
- 클라이언트에게 이 URL을 전달함
- 클라이언트는 이 URL을 사용해 S3에 직접 파일 업로드 또는 다운로드를 수행함
- URL은 지정된 시간 내에서만 유효하며, 시간이 지나면 접근 불가
3. 업로드 / 다운로드 구분
목적 | HTTP Method | 예시 |
업로드 (PutObject) | PUT | 이미지, 파일 업로드 |
다운로드 (GetObject) | GET | 사용자에게 파일 보여주기 |
4. Java (Spring)에서 Presigned URL 생성 예시
@Autowired
private AmazonS3 amazonS3;
public String generatePresignedUrl(String bucket, String key, int expirationMinutes) {
Date expiration = new Date();
expiration.setTime(System.currentTimeMillis() + expirationMinutes * 60 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, key)
.withMethod(HttpMethod.PUT) // 또는 HttpMethod.GET
.withExpiration(expiration);
URL url = amazonS3.generatePresignedUrl(request);
return url.toString();
}
5. 클라이언트에서 파일 업로드 예시 (JavaScript)
fetch(presignedUrl, {
method: 'PUT',
headers: {
'Content-Type': 'image/png'
},
body: selectedFile
})
.then(res => {
if (res.ok) console.log('업로드 성공');
});
6. Presigned URL 특징 및 제한사항
항목 | 설명 |
유효 시간 제한 | 최대 7일까지 설정 가능 (일반적으로 수 분~수십 분 설정) |
접근 제한 | 특정 객체 하나에만 유효함 (key 기준) |
보안성 | URL 자체가 인증 토큰 역할 → 유출되면 누구나 접근 가능함 |
HTTP Method 제한 | GET, PUT, DELETE 등 지정한 메서드만 허용됨 |
Content-Type | 업로드 시 반드시 명확하게 설정해야 함 (S3 설정에 따라 Content-MD5 등 필요할 수도 있음) |
7. 실무에서의 활용 사례
사례 | 설명 |
사용자 프로필 이미지 업로드 | Presigned PUT URL을 발급하여 직접 S3에 업로드함 |
첨부파일 다운로드 | Presigned GET URL을 발급하여 다운로드 링크 생성 |
공개하지 않은 콘텐츠 접근 | 정해진 시간 동안만 유효한 다운로드 링크 제공 |
서버 리소스 절약 | 대용량 파일은 서버를 거치지 않고 직접 S3로 업로드 처리함 |
8. Presigned URL 보안 주의사항
- 유효 시간을 짧게 설정할 것 (보통 5~15분)
- 클라이언트에게 전달하는 URL은 HTTPS로만 전송할 것
- 업로드용 URL은 PUT, 다운로드용 URL은 GET으로 method를 명확히 제한할 것
- 업로드 완료 후, 별도의 권한으로 접근 가능한 URL을 DB에 저장하거나 로그로 남기지 말 것
정리
Presigned URL은 AWS S3 객체에 대해 일시적으로 인증된 접근 권한을 부여하는 URL임.
이를 통해 서버가 직접 파일을 처리하지 않아도, 클라이언트가 안전하게 직접 S3에 업로드/다운로드 할 수 있음.
보안 설정과 유효 시간에 주의하면서, 트래픽 절감 및 성능 향상 목적으로 실무에서 자주 활용됨.
출처 : ChatGPT
'Infra > Cloud' 카테고리의 다른 글
AWS Lambda (0) | 2025.04.12 |
---|---|
ECR (0) | 2025.04.11 |
[AWS] AWS S3(Simple Storage Service) (0) | 2025.03.10 |