База знаний

Как задать политики доступа для хранилища S3

Настройка и использование политик для подключения к объектному хранилищу S3 — это важный аспект управления доступом к данным хранилища. Политики позволяют контролировать, кто может взаимодействовать с бакетами S3 и какие действия он может выполнять.

Ниже приведен пошаговый процесс настройки и использования политик для работы с S3 с помощью удобного инструмента S3 Browser.

Определение политик доступа через S3 Browser

Шаг 1: Определение требований

Перед созданием политики необходимо четко определить:

  • Какие сервисы будут иметь доступ к бакету
  • Действия, которые должны быть разрешены: например, чтение (s3:GetObject), запись (s3:PutObject), удаление (s3:DeleteObject) и т.д.
  • Ограничения : условия (например, IP-адреса, временные рамки)

Шаг 2: Создание политики

Политика определяет, какие действия разрешены или запрещены для конкретных ресурсов.

  1. Откройте S3 Browser и выберите нужный бакет.
  2. В меню выберите Buckets → Edit Bucket Policy.
  3. Откроется окно 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://[имя_бакета]/

Политика доступа будет применена.