Статия

Как да споделяте S3 файлове, без да правите bucket-а публичен

Сигурно споделяне на S3 файлове от частен bucket: presigned URL, подписани URL адреси на CloudFront или връзки с парола, срок и лимит на изтеглянията.

Можете да споделяте файлове от Amazon S3, без изобщо да правите bucket-а публичен. Оставете го частен, оставете Block Public Access включено и вместо това давайте на хората подписан достъп до конкретни обекти: presigned URL за еднократен файл, подписани URL адреси на CloudFront, когато вече имате CDN пред bucket-а, или връзка за споделяне, която добавя парола, дата на изтичане и лимит на изтеглянията. И трите начина работят по същия начин при S3-съвместими доставчици като Cloudflare R2, DigitalOcean Spaces, Wasabi и Backblaze B2 (CloudFront е само за AWS).

Вариантите за сигурно споделяне на S3 файлове накратко

МетодНай-подходящ заПаролаЛимит на изтегляниятаОтмяна на една връзкаЦели папкиНужен код
Публичен обект или bucketНаистина публични ресурси (уебсайт)НеНеНеДаНе
Presigned URLЕдин файл, веднъж, от CLI или приложението виНеНеНеНеCLI или SDK
Подписан URL на CloudFrontПриложения, които вече удостоверяват потребителитеНеНеНеС подписани бисквиткиДа
Връзка за споделяне от NubboРедовно споделяне с хора отвънДаДаДаДа, със ZIPНе

Защо просто да не направите файла публичен

Най-бързият начин да споделите файл от S3 е да го направите публичен и да изпратите URL адреса на обекта. Това е и най-рисковият: всичко публично може да бъде изтеглено от всеки, който намери или познае адреса, без парола, без срок и без запис кой го е взел. Забравените публични bucket-и са класически източник на изтичане на данни и разкриват имената на файловете, както и съдържанието им.

AWS посочва, че новите bucket-и, точки за достъп и обекти по подразбиране не позволяват публичен достъп. Освен това S3 Block Public Access има четири настройки (BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy и RestrictPublicBuckets), които имат предимство пред всяка политика или ACL, която би отворила bucket-а по-късно. Те могат да се задават за bucket, за акаунт или за цяла AWS Organization, като S3 прилага най-ограничаващата комбинация. AWS препоръчва да включите и четирите на ниво акаунт, освен ако наистина не хоствате публично съдържание, като статичен уебсайт.

Оставете тази защита включена. Всичко по-долу работи с нея.

Вариант 1: presigned URL адреси

Presigned URL е URL адрес на обект с подпис в query низа. Той дава право на една операция (обикновено изтегляне) върху един обект, докато не изтече, а S3 проверява подписа при всяка заявка.

aws s3 presign s3://my-bucket/reports/q3.pdf --expires-in 86400

Този URL адрес работи 24 часа. По подразбиране в CLI срокът е един час, а максимумът е 604 800 секунди (7 дни), когато подписвате с ключове на IAM потребител. Ако подписвате с временни идентификационни данни, като поета роля, URL адресът спира да работи, когато тези данни изтекат.

Какво получавате:

  • Никаква промяна в bucket-а или неговите политики.
  • Прецизен контрол: един обект, един метод, един срок.
  • Работи при всеки доставчик, който поддържа presigning със SigV4.

Какво не получавате:

  • Парола. Който има URL адреса, може да го използва колкото пъти иска, докато не изтече.
  • Лимит на изтеглянията и отмяна на отделна връзка. Можете да спрете URL адрес по-рано само като отнемете ключовете, които са го подписали.
  • Папки. Подписвате обект по обект, така че споделянето на папка с 300 файла означава 300 URL адреса.
  • Поверителност на имената. URL адресът показва името на bucket-а, ключа на обекта и вашия access key ID.

За задълбочено обяснение на механизма, включително качванията, всеки параметър X-Amz-* и код за SDK, вижте Presigned URL адресите в S3, обяснени.

Вариант 2: подписани URL адреси и подписани бисквитки на CloudFront

Ако вече предоставяте bucket-а през Amazon CloudFront, можете да изисквате подписани URL адреси или подписани бисквитки за дадено поведение на кеша. Bucket-ът остава частен зад origin access control (OAC), който AWS препоръчва пред по-стария origin access identity: bucket policy позволява само на вашата дистрибуция да чете обектите. Регистрирате публични ключове в доверена група ключове и подписвате със съответния частен ключ.

  • Подписаните URL адреси са подходящи за отделни файлове. С персонализирана политика можете да зададете и начален час и диапазон от IP адреси, както и да използвате една политика за много файлове със заместващи символи. Могат да са краткотрайни или да важат с години.
  • Подписаните бисквитки са подходящи за много файлове наведнъж, например всеки сегмент на видео, без да променяте URL адресите си.

Това е правилният инструмент, когато имате приложение, което вече удостоверява потребителите и предоставя съдържание в голям мащаб. За да дадете няколко файла на хора извън екипа си, това означава да настроите дистрибуция, да управлявате ключове и да пишете код, който подписва всяка заявка.

Ограничаването на bucket policy до фиксиран диапазон от IP адреси е друг вграден вариант, но помага само когато знаете мрежите на получателите, което рядко е така при хора извън организацията ви.

Вариант 3: връзки за споделяне с Nubbo

Nubbo се свързва с вашия bucket и ви дава връзки за споделяне с контролите, които липсват на presigned URL адресите, без да пишете код. Отдолу той пак използва presigned URL адреси: Nubbo първо проверява правилата на връзката и едва след това издава краткотраен URL адрес, така че отделните файлове пътуват директно от вашия bucket до браузъра на получателя.

Стъпка 1: Свържете своя bucket

Регистрирайте се безплатно, потвърдете имейла си, след това отворете Bucket-и и натиснете Свързване на bucket. Съветникът пита за вашия доставчик (Amazon S3, Cloudflare R2, DigitalOcean Spaces, Wasabi, Backblaze B2 или персонализиран S3-съвместим endpoint), за начина на свързване (автоматична настройка с ключ с пълен достъп или ключ, ограничен до един bucket), за ключа и за bucket-а ви. Проверява ключа и bucket-а и накрая тества CORS с истинско качване от браузъра ви. Bucket-ът остава частен, а ключовете ви се съхраняват криптирани с AES-256-GCM. Безплатният план включва 2 връзки.

Стъпка 2: Изберете файла или папката

Намерете елемента във файловия мениджър и изберете Сподели. Можете също да отидете на страницата Споделени, да натиснете Нова връзка и да изберете bucket-а и файла или папката там.

Стъпка 3: Задайте защитата

И трите контрола са по избор и са налични във всеки план:

КонтролКак работи
ПаролаОт 4 до 50 знака. След 10 грешни опита връзката се заключва за 15 минути.
Дата на изтичанеИзключена по подразбиране: връзката остава активна, докато файлът или папката са в хранилището ви.
Максимален брой изтеглянияПразно означава неограничено. Когато бройката бъде достигната, връзката спира да предоставя файла.

Стъпка 4: Създайте и изпратете връзката

Натиснете Създаване на връзка, копирайте я и я изпратете по имейл, в чат или с каквото използвате. Получателят отваря чиста страница за изтегляне и няма нужда от акаунт. Връзка към папка му позволява да разглежда папката, да изтегля отделни файлове или да вземе всичко като ZIP, който браузърът му сглобява, като изтегля всеки файл директно от вашия bucket.

Стъпка 5: Изпратете паролата отделно

Изпращането на паролата в същото съобщение като връзката обезсмисля защитата. Ако връзката има парола, Изпрати паролата по имейл я доставя като връзка за еднократно показване: паролата се показва веднъж, връзката за показване изтича след 24 часа, 3 дни или 7 дни, а можете да добавите кратка бележка. Получавате известие, когато бъде отворена.

Стъпка 6: Следете и отменяйте

Страницата Споделени изброява всяка връзка със състоянието и броя ѝ изтегляния. Можете да редактирате паролата, срока или лимита, да деактивирате връзка (тя веднага спира да издава нови URL адреси за изтегляне) и да я отворите отново по-късно със същия адрес.

Споделяне с конкретни хора вместо с връзка

Връзката работи за всеки, който я има. Когато искате достъп да имат само посочени хора, Споделяне с хора в Nubbo (в плановете Personal и Pro) изпраща файл или папка на конкретни имейл адреси с право за преглед или изтегляне, срок на валидност по избор и лимит на изтеглянията и записва всеки достъп. Получателите се нуждаят от акаунт в Nubbo и намират елемента в Споделени с мен. Personal позволява 10 души на елемент и 50 активни споделяния; Pro позволява 50 и 500.

Платените планове предлагат и криптирани връзки: браузърът създава запечатано копие на файла, а ключът пътува само в самата връзка, така че Nubbo не може да го прочете.

Кой вариант да използвате?

  • Един файл, веднъж, и имате настроен AWS CLI: presigned URL е най-бързият път.
  • Приложение, което вече вписва потребителите и предоставя много съдържание: подписани URL адреси или бисквитки на CloudFront.
  • Редовно споделяне с хора извън екипа ви, цели папки или всичко, за което е нужна парола или лимит: връзката за споделяне спестява време и грешки.

Отвъд една връзка

Две свързани функции покриват другите чести случаи. Заявките за файлове ви дават публична връзка за качване, така че хората да изпращат файлове във вашия bucket, без да виждат нищо друго в него. Галериите превръщат папка със снимки или видеоклипове в страница за разглеждане с оформления, воден знак и собствена парола. В Безплатния план получавате по 3 от всяко и неограничени връзки за споделяне; Personal и Pro премахват тези ограничения. Една честна бележка: миниатюрите се генерират на сървъра на Nubbo и се съхраняват във вашия bucket в .nubbo-thumbs/.

Често задавани въпроси

Как да споделя файл от S3, без да го правя публичен?

Оставете bucket-а частен и вместо това раздавайте подписан достъп: presigned URL за един обект (от AWS CLI или SDK), подписан URL адрес или бисквитка на CloudFront, ако вече предоставяте bucket-а през CloudFront, или връзка за споделяне от инструмент като Nubbo, който добавя парола, срок на валидност и лимит на изтеглянията върху presigned URL адресите.

Сигурен ли е Amazon S3 за споделяне на файлове?

Да, стига bucket-ът да остане частен. Новите bucket-и по подразбиране не позволяват публичен достъп, а S3 Block Public Access не позволява на никого да ги отвори по-късно. Рискът идва от правенето на обекти публични или от изтичането на подписани връзки, които работят за всеки, който ги има, докато не изтекат.

Частни ли са по подразбиране новите S3 bucket-и?

Да. AWS посочва, че новите bucket-и, точки за достъп и обекти по подразбиране не позволяват публичен достъп, а четирите настройки на Block Public Access имат предимство пред всяка политика или ACL, която би ги отворила по-късно.

Нужен ли е на получателя акаунт в AWS или Nubbo?

Не. Presigned URL, подписан URL адрес на CloudFront и връзка за споделяне от Nubbo работят във всеки браузър без акаунт. Само Споделяне с хора, което изпраща елемент на посочени хора, изисква те да имат акаунт в Nubbo.

Колко дълго може да е валидна споделена S3 връзка?

Presigned URL е валиден най-много 7 дни, когато е подписан с ключове на IAM потребител, и по-малко с временни идентификационни данни. Подписаните URL адреси на CloudFront са валидни толкова, колкото казва вашата политика. Връзката за споделяне от Nubbo няма срок, освен ако не зададете такъв, защото при всяко изтегляне издава нов краткотраен URL адрес.

Минават ли файловете през Nubbo, когато някой изтегля от споделена връзка?

Не: браузърът изтегля отделните файлове директно от вашия bucket с presigned URL. ZIP изтеглянията на няколко файла се сглобяват в браузъра, който изтегля всеки файл директно от вашия bucket: Nubbo не вижда съдържанието.

Източници

Цените и ограниченията са взети от официалните страници по-долу. Доставчиците ги променят, затова проверете, преди да се обвържете.