30 сентября 2026 г. · 6 мин чтения

Как сделать бакет Amazon S3 публичным

Новые бакеты S3 блокируют любой публичный доступ, а ACL по умолчанию отключены, поэтому старая кнопка «сделать публичным» у каждого объекта больше ничего не делает. Публичное чтение теперь обеспечивает политика бакета.

Шаг 1: разрешить публичные политики бакета

  1. Откройте бакет в консоли S3 и перейдите на вкладку Permissions.
  2. В разделе Block public access (bucket settings) выберите Edit.
  3. Снимите две настройки, касающиеся bucket and access point policies. Две настройки для ACL можно оставить включенными, так как политика не использует ACL.
  4. Сохраните и подтвердите.

Если эта настройка включена и на уровне аккаунта (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.