30 вересня 2026 р. · 6 хв читання
Як зробити бакет Amazon S3 публічним
Нові бакети S3 блокують увесь публічний доступ, а ACL за замовчуванням вимкнено, тож стара кнопка «make public» для кожного об’єкта більше нічого не робить. Тепер публічне читання забезпечує політика бакета.
Крок 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.