2026년 9월 30일 · 5분 분량

미리 서명된 URL로 비공개 S3, R2 파일을 공유하는 방법

모든 파일이 공개 버킷에 있어야 하는 건 아닙니다. 계약서, 청구서, 출시 전 빌드는 비공개로 두면서도 일정 시간 동안만 작동하는 링크로 공유할 수 있습니다.

미리 서명된 URL의 작동 방식

URL에는 S3가 요청을 확인하는 데 필요한 모든 정보가 들어 있습니다. 서명에 쓴 키, 서명한 시각, 유효 기간, 서명입니다. 다음과 같은 형태입니다.

https://your-bucket.s3.eu-central-1.amazonaws.com/contract.pdf
  ?X-Amz-Algorithm=AWS4-HMAC-SHA256
  &X-Amz-Credential=AKIA…/20260930/eu-central-1/s3/aws4_request
  &X-Amz-Date=20260930T120000Z
  &X-Amz-Expires=3600
  &X-Amz-SignedHeaders=host
  &X-Amz-Signature=…

서명은 내 컴퓨터에서 이뤄집니다. 누군가 링크를 열기 전까지 제공업체에는 아무것도 전송되지 않으며, 링크의 어느 부분이든 바꾸면 서명이 깨집니다.

AWS CLI로 만들기

aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400

이 링크는 24시간 동안 작동합니다. Cloudflare R2나 다른 S3 호환 서비스라면 CLI가 해당 엔드포인트를 가리키게 하세요.

aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400 \
  --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com

알아 둘 제한 사항

  • 최대 7일. Signature Version 4는 S3와 R2 모두 최대 604,800초까지 허용합니다.
  • 임시 자격 증명은 더 일찍 만료됩니다. STS나 SSO 세션으로 서명한 URL은 더 긴 기간을 요청했더라도 해당 세션이 만료되면 작동을 멈춥니다.
  • R2는 API 도메인이 필요합니다. R2의 미리 서명된 URL은 사용자 지정 도메인이 아니라 <ACCOUNT_ID>.r2.cloudflarestorage.com에서 작동합니다.
  • 링크가 있으면 누구나 사용할 수 있습니다. 만료될 때까지는 비밀번호처럼 다루세요.
  • 링크별 취소는 불가능합니다. 링크를 일찍 끊으려면 객체를 삭제하거나 이름을 바꾸거나, 서명에 쓴 액세스 키를 비활성화하세요.

미리 서명된 URL과 공개 버킷 중 무엇을 쓸까요?

보여 주기 위한 파일, 계속 작동해야 하는 파일(문서 속 스크린샷, README의 이미지)에는 공개 버킷을 사용하세요. 민감하거나 잠깐만 쓰는 파일에는 미리 서명된 URL을 사용하세요. 많은 사람이 두 종류의 버킷을 하나씩 두고 파일마다 골라 씁니다.

자주 묻는 질문

미리 서명된 URL을 7일보다 오래 유지할 수 있나요?

S3와 R2가 사용하는 Signature Version 4에서는 불가능합니다. 더 오래 공유하려면 파일을 공개하거나, 이전 링크가 만료될 때 새 링크를 만드세요.

미리 서명된 URL이 SignatureDoesNotMatch를 반환하는 이유는 무엇인가요?

대개 서명 후에 URL이 바뀌었기 때문입니다. 예를 들어 이메일 클라이언트가 URL을 변형했거나, 호스트를 사용자 지정 도메인으로 바꾼 경우입니다. 리전과 엔드포인트 설정도 버킷과 일치해야 합니다.

Backblaze B2와 MinIO에서도 미리 서명된 URL을 쓸 수 있나요?

네. 둘 다 S3 호환 API를 통해 Signature Version 4 미리 서명된 URL을 지원합니다.