라벨이 Node.js인 게시물 표시

S3 Presigned URL 생성 완전 가이드 — SDK로 1시간 임시 다운로드 링크 만들기

프라이빗 S3 버킷에 저장된 파일을 외부 사용자에게 일시적으로 공개해야 할 때, 버킷 정책을 건드리거나 퍼블릭 ACL을 열지 않고도 해결하는 방법이 바로 Presigned URL이다. 실제 운영 환경에서는 '이 파일 한 번만 다운로드할 수 있게 해줘'라는 요구가 생각보다 자주 온다 — 계약서 전달, 리포트 공유, 미디어 파일 배포 등. S3 Presigned URL은 서버 측에서 서명된 임시 접근 토큰을 URL에 포함시켜, 지정된 만료 시간 내에만 해당 객체에 접근할 수 있도록 제어한다. TL;DR — S3 Presigned URL 핵심 요약 항목 내용 목적 IAM 자격증명 없이 특정 S3 객체에 임시 접근 허용 서명 방식 SigV4 (AWS Signature Version 4) 기본 만료 범위 최소 1초 ~ 최대 7일 (IAM 역할 기반 서명 시 최대 12시간) SDK 메서드 Python: generate_presigned_url / JS: getSignedUrl (v2), getSignedUrl from @aws-sdk/s3-request-presigner (v3) 주요 주의사항 서명에 사용된 자격증명이 만료되면 URL도 즉시 무효화됨 S3 Presigned URL 동작 원리 Presigned URL은 S3 서비스가 생성하는 것이 아니다. SDK를 실행하는 서버(혹은 Lambda)가 로컬에서 서명을 계산해 URL에 포함 시킨다. S3는 요청이 들어왔을 때 URL에 포함된 서명 파라미터를 검증할 뿐이다. 이 차이가 중요한 이유는 — 서명을 생성한 자격증명(IAM 사용자 또는 역할)이 비활성화되거나 만료되면, URL 자체의 만료 시간이 남아 있어도 요청이 거부된다. sequenceDiagram participant App as 애플리케이션 서버 parti...