30 сентября 2026 г. · 6 мин чтения
Как сделать бакет Amazon S3 публичным
Новые бакеты S3 блокируют любой публичный доступ, а ACL по умолчанию отключены, поэтому старая кнопка «сделать публичным» у каждого объекта больше ничего не делает. Публичное чтение теперь обеспечивает политика бакета.
Шаг 1: разрешить публичные политики бакета
- Откройте бакет в консоли S3 и перейдите на вкладку Permissions.
- В разделе Block public access (bucket settings) выберите Edit.
- Снимите две настройки, касающиеся bucket and access point policies. Две настройки для ACL можно оставить включенными, так как политика не использует ACL.
- Сохраните и подтвердите.
Если эта настройка включена и на уровне аккаунта (Block Public Access settings for this account на боковой панели S3), она важнее настройки бакета и тоже должна разрешать политики.
Шаг 2: добавить политику бакета для публичного чтения
Там же, на вкладке Permissions, отредактируйте Bucket policy и вставьте следующее, указав имя своего бакета:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket/*"
}
]
}
Это разрешает чтение объектов, но не просмотр списка файлов в бакете. Чтобы сделать публичной только одну папку, сузьте ресурс, например до arn:aws:s3:::your-bucket/public/*.
В AWS CLI те же два шага выглядят так:
aws s3api put-public-access-block --bucket your-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=false,RestrictPublicBuckets=false
aws s3api put-bucket-policy --bucket your-bucket --policy file://policy.jsonШаг 3: найти публичный URL
Теперь объекты доступны по URL в стиле virtual-hosted:
https://your-bucket.s3.eu-central-1.amazonaws.com/2026/09/report.pdf
Укажите регион своего бакета. Если этот адрес возвращает AccessDenied, значит, настройки Block Public Access все еще блокируют политику или в имени бакета в политике есть опечатка.
Более безопасный вариант: CloudFront с приватным бакетом
Если вы не хотите открывать сам бакет, оставьте Block Public Access включенным и создайте дистрибуцию CloudFront с бакетом в качестве источника и Origin access control (OAC). CloudFront покажет политику бакета, которая позволяет читать объекты только этой дистрибуции. Вы получаете HTTPS на своем домене, кэширование и бакет, который остается приватным. См. собственные домены для ссылок на файлы в бакете.
Частые вопросы
Почему «Make public using ACL» больше не работает?
С апреля 2023 года у новых бакетов параметр Object Ownership имеет значение Bucket owner enforced, что отключает ACL. Публичный доступ должен обеспечиваться политикой бакета или CloudFront.
Может ли кто-то увидеть список моих файлов в публичном бакете?
Не с политикой выше. Она разрешает только s3:GetObject. Для просмотра списка нужно разрешение s3:ListBucket на сам бакет, и выдавать его публично не стоит.
Увеличит ли публичный бакет мой счет в AWS?
Вы платите за запросы и исходящий трафик, когда люди скачивают файлы. Для файлов, которыми активно делятся, обычно дешевле CloudFront или провайдер без платы за исходящий трафик, например Cloudflare R2.