Как задать политики доступа для хранилища S3
Настройка и использование политик для подключения к объектному хранилищу S3 — это важный аспект управления доступом к данным хранилища. Политики позволяют контролировать, кто может взаимодействовать с бакетами S3 и какие действия он может выполнять.
Ниже приведен пошаговый процесс настройки и использования политик для работы с S3 с помощью удобного инструмента S3 Browser.
Определение политик доступа через S3 Browser
Шаг 1: Определение требований
Перед созданием политики необходимо четко определить:
- Какие сервисы будут иметь доступ к бакету
- Действия, которые должны быть разрешены: например, чтение (s3:GetObject), запись (s3:PutObject), удаление (s3:DeleteObject) и т.д.
- Ограничения : условия (например, IP-адреса, временные рамки)
Шаг 2: Создание политики
Политика определяет, какие действия разрешены или запрещены для конкретных ресурсов.
- Откройте S3 Browser и выберите нужный бакет.
- В меню выберите Buckets → Edit Bucket Policy.
- Откроется окно Bucket Policy Editor.
Используйте готовые примеры (Policy Examples), визуальный инструмент создания политик AWS (Policy Generator), или оформите в редакторе вручную JSON-файл для создания политики.
Файлы политик
Политики доступа создаются в виде файлов формата JSON.
Основные элементы описания политик:
- Действие (Action) — набор операций, которые разрешает или запрещает правило политики
- Эффект (Effect) — итоговая политика в отношении конкретного действия (разрешить или запретить его)
- Условие (Condition) — условие, при котором осуществляется то или иное действие
- Принципал (Principal) — пользователь, для которого осуществляется действие
- Ресурс (Resource) — объект, над которым осуществляется действие
«Звёздочка» («*») в описании элемента позволяет выбирать все подходящие имена элементов политики. Принцип использования этого символа такой же, как при выборе имён файлов в файловой системе, т.е.. вместо «*» подставляется любой набор символов, содержащийся в имени элемента. Например:
- действие "s3:*" позволяет выбрать все действия над объектом
- принципал "*" указывает, что правило политики применяется к любому пользователю, даже не зарегистрированному в хранилище
- ресурс "arn:aws:s3:[имя_бакета]/taw*" указывает на все объекты, содержащиеся в бакете, имя которых начинается с символов "taw"
Примечание. Ресурс arn:aws:s3:::[имя_бакета] указывает только на сам конкретный бакет, но не на объекты, которые содержатся в нём. Чтобы указать, что действие применяется также ко всем объектам внутри бакета, необходимо добавить в перечень ресурсов строку arn:aws:s3:::[имя_бакета]/* .
Действия
Действия в описании правила политики указывают, что именно разрешено или запрещено делать данным правилом с содержимым объектного хранилища. Примеры самых частых действий:
- s3:GetObject — право на чтение объектов
- s3:PutObject — право на запись объектов
- s3:DeleteObject — право на удаление объектов
В документации Amazon S3 содержится подробный перечень различных действий над объектами, доступных при применении политик доступа.
Эффект
Эффект — это разрешение или запрет на совершение действия в рамках применяемого правила политики. Эффект может принимать одно из следующих значений:
- Allow — правило разрешает указанное действие для принципала выбранного при выполнении всех указанных в правиле условий
- Deny — правило запрещает указанное действие
Условия
Условия определяют, при каких обстоятельствах применяется правило политики. Например:
- IpAddress — политика применяется только к конкретным IP-адресам
- NotIpAdress — политика применяется ко всем IP-адресам, кроме указанных
- StringNotEquals: {"параметр": "значение"} — условия применяется, если выбранный параметр не соответствует указанному значению
Последовательно перечисленные условия применяются с логическим «и», т.е. при применении правила все указанные для него условия должны выполняться.
Последовательно перечисленные значения для одного и того же условия применяются с логикой «или», т.е. условие считается выполненным, если параметр соответствует любому из указанных значений.
Принципал
Пользователь, в отношении которого применяется политика. Чаще всего политика осуществляется в отношении всех пользователей; в этом случае значение Principal указывается как «*».
Параметр CanonicalUser в описании принципала позволяет указать каноничный ID пользователя, для которого устанавливается правило политики.
Примеры описания политик доступа
Пример базовой политики, позволяющей обеспечить доступ к хранилищу S3 с определённых IP-адресов:
{
"Version": "2025-08-17",
"Id": "S3_IP_Access",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[имя_бакета]/*",
"arn:aws:s3:::[имя_бакета]"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "192.168.143.0/24"
},
"NotIpAddress": {
"aws:SourceIp": "192.168.143.188/32"
}
}
},
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[имя_бакета]/*",
"arn:aws:s3:::[имя_бакета]"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": "[IPv4_адрес]/24"
}
}
}
]
}
Здесь:
- "Effect": "Allow" — разрешает действие
- "Action" — список действий (например, s3:GetObject, s3:PutObject)
- "Resource" — ARN бакета и его содержимого. Указание «звёздочки» («*») после имени бакета в описании ресурса означает, что политика относится ко всем элементам бакета
Пример политики, обеспечивающей доступ к данным статического сайта для администраторов и разрешающей остальным пользователям только чтение данных из хранилища (остальные действия запрещены):
{
"Version": "2025-09-13",
"Statement": [
{
"Sid": "AllowAdminFullAccess",
"Effect": "Allow",
"Principal": {
"AWS": "[каноничное_имя_администратора]"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::[бакет_сайта]",
"arn:aws:s3:::[бакет_сайта]/*"
]
},
{
"Sid": "AllowPublicReadAccessToPublicFolder",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[бакет_сайта]/public/*"
},
{
"Sid": "DenyPublicWriteAccess",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::[бакет_сайта]/*"
}
]
}
Сохраните политику, нажав Apply.
Задание политик доступа с помощью s3cmd
Чтобы задать политику доступа к хранилищу данных с помощью s3cmd, выполните следующие шаги.
Шаг 1. Создание файла политики
Создайте JSON-файл с описанием политики, как было описано выше. Вы можете использовать генератор политик или готовый файл политики.
Шаг 2. Использование s3cmd для добавления файла политики
Подключитесь к хранилищу с помощью s3cmd и выполните следующую команду:
s3cmd setpolicy [имя_файла_политики].json s3://[имя_бакета]/
Политика доступа будет применена.