버킷을 공개하지 않고도 Amazon S3의 파일을 공유할 수 있어요. 버킷을 비공개로 유지하고 Block Public Access를 켜 둔 채, 대신 특정 객체에 대한 서명된 액세스를 제공하세요: 한 번만 보낼 파일에는 미리 서명된 URL, 이미 버킷 앞에 CDN을 운영하고 있다면 CloudFront 서명된 URL, 또는 비밀번호, 만료일, 다운로드 횟수 제한을 더하는 공유 링크가 있어요. 세 가지 모두 Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 같은 S3 호환 프로바이더에서 똑같이 작동해요(CloudFront는 AWS 전용).
안전한 S3 파일 공유 방법 한눈에 보기
| 방법 | 적합한 용도 | 비밀번호 | 다운로드 제한 | 링크별 취소 | 폴더 전체 | 코드 필요 |
|---|---|---|---|---|---|---|
| 공개 객체 또는 버킷 | 정말로 공개할 에셋 (웹사이트) | 아니요 | 아니요 | 아니요 | 예 | 아니요 |
| 미리 서명된 URL | CLI나 앱에서 파일 하나를 한 번 | 아니요 | 아니요 | 아니요 | 아니요 | CLI 또는 SDK |
| CloudFront 서명된 URL | 이미 사용자를 인증하는 앱 | 아니요 | 아니요 | 아니요 | 서명된 쿠키로 가능 | 예 |
| Nubbo 공유 링크 | 외부 사람들과 반복적인 공유 | 예 | 예 | 예 | 예, ZIP으로 | 아니요 |
그냥 파일을 공개하면 안 되는 이유
S3에서 파일을 공유하는 가장 빠른 방법은 파일을 공개하고 객체 URL을 보내는 거예요. 하지만 가장 위험한 방법이기도 해요: 공개된 것은 주소를 찾거나 추측한 누구나 가져갈 수 있으며, 비밀번호도, 만료도, 누가 가져갔는지에 대한 기록도 없어요. 방치된 공개 버킷은 대표적인 데이터 유출 원인이며, 내용뿐 아니라 파일 이름까지 노출해요.
AWS에 따르면 새 버킷, 액세스 포인트, 객체는 기본적으로 공개 액세스를 허용하지 않아요. 여기에 더해 S3 Block Public Access에는 네 가지 설정(BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets)이 있으며, 나중에 버킷을 열 수 있는 모든 정책이나 ACL보다 우선해요. 버킷별, 계정별 또는 AWS Organization 전체에 설정할 수 있고, S3는 가장 제한적인 조합을 적용해요. AWS는 정적 웹사이트처럼 정말로 공개 콘텐츠를 호스팅하는 경우가 아니라면 계정 수준에서 네 가지를 모두 켜 두기를 권장해요.
이 스위치는 켜 두세요. 아래의 모든 방법은 이 설정을 켠 상태에서 작동해요.
방법 1: 미리 서명된 URL
미리 서명된 URL은 쿼리 문자열에 서명이 들어 있는 객체 URL이에요. 만료될 때까지 객체 하나에 대한 작업 하나(보통 다운로드)를 허용하며, S3는 요청마다 서명을 확인해요.
aws s3 presign s3://my-bucket/reports/q3.pdf --expires-in 86400
이 URL은 24시간 동안 작동해요. CLI 기본값은 1시간이고, IAM 사용자 키로 서명하면 최대 604,800초(7일)예요. 수임한 역할 같은 임시 자격 증명으로 서명하면 그 자격 증명이 만료될 때 URL도 작동을 멈춰요.
얻는 것:
- 버킷이나 정책을 변경할 필요가 없어요.
- 정밀한 제어: 객체 하나, 메서드 하나, 만료 시간 하나.
- SigV4 미리 서명을 지원하는 모든 프로바이더에서 작동해요.
얻지 못하는 것:
- 비밀번호가 없어요. URL을 가진 사람은 누구든 만료될 때까지 원하는 만큼 사용할 수 있어요.
- 다운로드 횟수 제한도, 링크별 취소도 없어요. URL을 일찍 무효화하려면 서명한 키를 취소하는 수밖에 없어요.
- 폴더를 다룰 수 없어요. 객체마다 서명하므로 파일 300개가 있는 폴더를 공유하려면 URL이 300개 필요해요.
- 이름이 노출돼요. URL에 버킷 이름, 객체 키, 액세스 키 ID가 표시돼요.
업로드, 각 X-Amz-* 매개변수, SDK 코드를 포함한 자세한 작동 원리는 S3 미리 서명된 URL 설명을 참고하세요.
방법 2: CloudFront 서명된 URL과 서명된 쿠키
이미 Amazon CloudFront로 버킷을 제공하고 있다면, 캐시 동작에 서명된 URL이나 서명된 쿠키를 요구할 수 있어요. 버킷은 원본 액세스 제어(OAC) 뒤에서 비공개로 유지되며, AWS는 이전의 원본 액세스 ID보다 OAC를 권장해요: 버킷 정책으로 배포만 객체를 읽을 수 있게 해요. 신뢰할 수 있는 키 그룹에 공개 키를 등록하고, 짝이 되는 개인 키로 서명해요.
- 서명된 URL은 개별 파일에 알맞아요. 사용자 지정 정책으로 시작 시간과 IP 범위도 설정할 수 있고, 와일드카드로 여러 파일에 정책 하나를 재사용할 수 있어요. 수명을 짧게 하거나 몇 년 동안 유지할 수도 있어요.
- 서명된 쿠키는 동영상의 모든 세그먼트처럼 많은 파일을 한꺼번에 다룰 때 알맞으며, URL을 바꿀 필요가 없어요.
이미 사용자를 인증하고 대규모로 콘텐츠를 제공하는 애플리케이션을 운영한다면 알맞은 도구예요. 팀 외부 사람들에게 파일 몇 개를 건네려는 경우라면 배포를 설정하고, 키를 관리하고, 요청마다 서명하는 코드를 작성해야 해요.
버킷 정책을 고정 IP 범위로 제한하는 것도 기본 제공되는 방법이지만, 받는 사람의 네트워크를 알 때만 도움이 되며 조직 외부 사람들의 경우에는 드문 일이에요.
방법 3: Nubbo 공유 링크
Nubbo는 버킷에 연결해, 코드를 작성하지 않고도 미리 서명된 URL에 없는 제어 기능을 갖춘 공유 링크를 제공해요. 내부적으로는 여전히 미리 서명된 URL을 사용해요: Nubbo가 먼저 링크 규칙을 확인한 뒤에만 유효 시간이 짧은 URL을 발급하므로, 단일 파일은 버킷에서 받는 사람의 브라우저로 바로 이동해요.
1단계: 버킷 연결하기
무료로 가입하고 이메일을 인증한 뒤, 버킷을 열고 버킷 연결을 누르세요. 마법사가 프로바이더(Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 또는 커스텀 S3 호환 엔드포인트), 연결 방법(전체 액세스 키를 사용한 자동 설정 또는 버킷 하나로 제한된 키), 키, 버킷을 물어봐요. 키와 버킷을 확인하고, 마지막으로 브라우저에서 실제 업로드를 해 CORS를 테스트해요. 버킷은 비공개로 유지되며 키는 AES-256-GCM으로 암호화되어 저장돼요. 무료 요금제에는 연결 2개가 포함돼요.
2단계: 파일이나 폴더 선택하기
탐색기에서 항목을 찾아 공유를 선택하세요. 공유됨 페이지로 가서 새 링크를 누르고 거기서 버킷과 파일이나 폴더를 고를 수도 있어요.
3단계: 보호 설정하기
세 가지 제어 기능은 모두 선택 사항이며 모든 요금제에서 사용할 수 있어요:
| 제어 | 작동 방식 |
|---|---|
| 비밀번호 | 4자에서 50자. 10번 틀리면 링크가 15분 동안 잠겨요. |
| 만료일 | 기본값은 꺼짐: 파일이나 폴더가 스토리지에 있는 동안 링크가 활성 상태로 유지돼요. |
| 최대 다운로드 횟수 | 비워 두면 무제한이에요. 횟수에 도달하면 링크가 더 이상 파일을 제공하지 않아요. |
4단계: 링크 만들고 보내기
링크 만들기를 누르고 링크를 복사해 이메일, 채팅 등 평소 쓰는 방법으로 보내세요. 받는 사람은 깔끔한 다운로드 페이지를 열며 계정이 필요 없어요. 폴더 링크에서는 폴더를 탐색하고, 파일을 하나씩 다운로드하거나, 전체를 ZIP으로 받을 수 있어요. ZIP은 받는 사람의 브라우저가 각 파일을 버킷에서 바로 다운로드해 만들어요.
5단계: 비밀번호는 따로 보내기
비밀번호를 링크와 같은 메시지로 보내면 의미가 없어요. 링크에 비밀번호가 있다면 이메일로 비밀번호 보내기가 일회성 확인 링크로 전달해 줘요: 비밀번호는 한 번만 표시되고, 확인 링크는 24시간, 3일 또는 7일 후 만료되며, 짧은 메모를 덧붙일 수 있어요. 링크가 열리면 알림을 받아요.
6단계: 추적하고 취소하기
공유됨 페이지에는 모든 링크가 상태와 다운로드 수와 함께 표시돼요. 비밀번호, 만료일, 제한을 수정하거나, 링크를 비활성화하거나(즉시 새 다운로드 URL 발급이 중단돼요), 나중에 같은 주소로 다시 열 수 있어요.
링크 대신 특정 사람들과 공유하기
링크는 가진 사람 누구에게나 작동해요. 지정한 사람만 들어오게 하고 싶다면 Nubbo의 사람들과 공유(Personal과 Pro 요금제)로 파일이나 폴더를 특정 이메일 주소에 보기 또는 다운로드 권한, 선택적 만료일, 다운로드 횟수 상한과 함께 보내고, 모든 액세스를 기록할 수 있어요. 받는 사람에게는 Nubbo 계정이 필요하며, 나와 공유됨에서 항목을 찾을 수 있어요. Personal은 항목당 10명과 활성 공유 50개, Pro는 50명과 500개까지 허용해요.
유료 요금제에서는 암호화된 링크도 제공해요: 브라우저가 파일의 봉인된 사본을 만들고 키는 링크 안에만 담겨 전달되므로 Nubbo는 파일을 읽을 수 없어요.
어떤 방법을 사용해야 할까요?
- 파일 하나를 한 번만 보내고 AWS CLI가 설정되어 있다면: 미리 서명된 URL이 가장 빠른 방법이에요.
- 이미 사용자를 로그인시키고 많은 콘텐츠를 제공하는 애플리케이션이라면: CloudFront 서명된 URL이나 쿠키.
- 팀 외부 사람들과의 반복적인 공유, 폴더 전체, 또는 비밀번호나 제한이 필요한 모든 경우: 공유 링크가 시간과 실수를 줄여 줘요.
링크 하나를 넘어서
관련된 두 가지 기능이 다른 흔한 경우를 다뤄요. 인박스는 공개 업로드 링크를 제공해 사람들이 버킷의 다른 내용은 보지 못한 채 파일을 보낼 수 있게 해요. 갤러리는 사진이나 동영상 폴더를 레이아웃, 워터마크, 자체 비밀번호가 있는 탐색 가능한 페이지로 바꿔요. 무료 요금제에서는 각각 3개와 무제한 공유 링크를 사용할 수 있고, Personal과 Pro에서는 이 상한이 없어요. 솔직하게 덧붙이면: 썸네일은 Nubbo 서버에서 생성되어 내 버킷의 .nubbo-thumbs/ 아래에 저장돼요.
자주 묻는 질문
S3 파일을 공개하지 않고 공유하려면 어떻게 하나요?
버킷을 비공개로 유지하고 대신 서명된 액세스를 제공하세요: 객체 하나에 대한 미리 서명된 URL(AWS CLI나 SDK로 생성), 이미 CloudFront로 버킷을 제공하고 있다면 CloudFront 서명된 URL이나 쿠키, 또는 미리 서명된 URL 위에 비밀번호, 만료일, 다운로드 횟수 제한을 더하는 Nubbo 같은 도구의 공유 링크가 있어요.
Amazon S3는 파일 공유에 안전한가요?
네, 버킷이 비공개로 유지되는 한 안전해요. 새 버킷은 기본적으로 공개 액세스를 허용하지 않으며, S3 Block Public Access가 나중에 누군가 버킷을 여는 것을 막아요. 위험은 객체를 공개하거나 서명된 링크가 유출될 때 생기며, 서명된 링크는 만료될 때까지 가진 사람 누구에게나 작동해요.
새 S3 버킷은 기본적으로 비공개인가요?
네. AWS에 따르면 새 버킷, 액세스 포인트, 객체는 기본적으로 공개 액세스를 허용하지 않으며, 네 가지 Block Public Access 설정이 나중에 버킷을 열 수 있는 모든 정책이나 ACL보다 우선해요.
받는 사람에게 AWS나 Nubbo 계정이 필요한가요?
아니요. 미리 서명된 URL, CloudFront 서명된 URL, Nubbo 공유 링크는 모두 계정 없이 어떤 브라우저에서든 작동해요. 지정한 사람에게 항목을 보내는 사람들과 공유만 받는 사람에게 Nubbo 계정이 필요해요.
공유한 S3 링크는 얼마나 유지되나요?
미리 서명된 URL은 IAM 사용자 키로 서명하면 최대 7일, 임시 자격 증명으로 서명하면 그보다 짧아요. CloudFront 서명된 URL은 정책에서 정한 만큼 유지돼요. Nubbo 공유 링크는 다운로드할 때마다 유효 시간이 짧은 새 URL을 발급하므로, 직접 설정하지 않는 한 만료되지 않아요.
누군가 공유 링크로 다운로드할 때 파일이 Nubbo를 거치나요?
거치지 않아요: 브라우저가 미리 서명된 URL로 단일 파일을 버킷에서 바로 다운로드해요. 여러 파일 ZIP 다운로드는 브라우저에서 만들어지며 브라우저가 각 파일을 버킷에서 바로 다운로드해요: Nubbo는 내용을 전혀 보지 않아요.
출처
요금과 제한은 아래 공식 페이지를 기준으로 해요. 프로바이더가 변경할 수 있으니 결정하기 전에 확인하세요.