Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Object Storage
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Бакеты
      • Создание бакета
      • Удаление бакета
      • Ограничение максимального размера бакета
      • Открытие публичного доступа к бакету
      • Шифрование бакета
      • Управление жизненными циклами объектов
      • Управление конфигурацией CORS
      • Управление политикой доступа
      • Управление версионированием бакета
      • Редактирование ACL бакета
      • Включение механизма логированния
    • Объекты
      • Загрузка объекта
      • Получение информации об объекте
      • Скачивание объекта
      • Получение публичной ссылки на объект
      • Удаление объекта
      • Удаление всех объектов
      • Удаление частично загруженного объекта
      • Редактирование ACL объекта
    • Хостинг статических сайтов
      • Настройка хостинга
      • Поддержка собственного домена
      • Поддержка нескольких доменных имен
      • Настройка HTTPS
  • Практические руководства
    • Получение статистики запросов к объекту с использованием S3 Select
    • Получение cтатистики посещения сайта с использованием S3 Select
    • Формирование отчета по ресурсной детализации расходов с использованием S3 Select
    • Шифрование на стороне сервера
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Анализ логов с использованием DataLens
  • Концепции
    • Обзор
    • Бакет
    • Объект
    • Версионирование бакета
    • Жизненные циклы объектов
    • CORS
    • Хостинг статических сайтов
    • Подписанные (pre-signed) URL
    • Составная (multipart) загрузка
    • Список управления доступом (ACL)
    • Политика доступа (Bucket Policy)
    • Загрузка файла через HTML-форму
    • Класс хранилища
    • Механизм логирования действий с бакетом
    • Резервное копирование
    • Протокол TLS
    • Язык запросов S3 Select
    • Квоты и лимиты
  • Инструменты
    • Все инструменты
    • Консольные клиенты
      • AWS CLI
      • S3cmd
    • Файловые браузеры
      • CyberDuck
      • WinSCP
    • SDK
      • AWS SDK для Java
      • Python SDK (boto)
      • AWS SDK для .NET
      • AWS SDK для C++
      • AWS SDK для PHP
      • AWS SDK для Go
    • FUSE
      • GeeseFS
      • s3fs
      • goofys
    • FTP
      • Docker-контейнер для (S)FTP(S)
  • Справочник API
    • REST (совместимый с Amazon S3)
      • Как пользоваться API
      • Подписывание запросов
      • REST
        • Все сервисы и методы
        • Bucket
          • Все методы
          • create
          • getBucketEncryption
          • getMeta
          • listObjects
          • listBuckets
          • deleteBucket
          • deleteBucketEncryption
          • putBucketEncryption
          • putBucketVersioning
          • getBucketVersioning
          • putBucketLogging
          • getBucketLogging
          • listObjectVersions
        • Object
          • Все методы
          • upload
          • get
          • copy
          • getObjectMeta
          • delete
          • deleteMultipleObjects
          • options
          • selectObjectContent
        • Multipart upload
          • Общий порядок составной загрузки
          • startUpload
          • uploadPart
          • copyPart
          • listParts
          • abortUpload
          • completeUpload
          • listUploads
        • Static Website Hosting
          • Все методы
          • upload
          • get
          • delete
          • Коды ответов статического сайта
        • CORS
          • Все методы
          • XML-структура конфигурации CORS
          • upload
          • get
          • delete
        • Lifecycles
          • Все методы
          • XML-структура конфигурации жизненных циклов
          • upload
          • get
          • delete
        • ACL
          • Все методы
          • XML-структура конфигурации ACL
          • objectGetAcl
          • objectPutAcl
          • bucketGetAcl
          • bucketPutAcl
        • Bucket Policy
          • Все методы
          • GetBucketPolicy
          • PutBucketPolicy
          • DeleteBucketPolicy
          • Схема данных
          • Действия
          • Условия
        • Общие заголовки запросов
        • Общие заголовки ответов
        • Ответы
    • gRPC и REST
      • Аутентификация в API
      • gRPC (англ.)
        • Overview
        • BucketService
        • OperationService
      • REST (англ.)
        • Overview
        • Bucket
          • Overview
          • create
          • delete
          • deleteHTTPSConfig
          • get
          • getHTTPSConfig
          • getStats
          • list
          • setHTTPSConfig
          • update
  • Управление доступом
  • Правила тарификации
    • Действующие правила
    • Архив
      • До 1 января 2019 года
      • С 1 января до 1 марта 2019 года
  • Вопросы и ответы
  1. Концепции
  2. Политика доступа (Bucket Policy)

Политика доступа (bucket policy)

Статья создана
Yandex.Cloud
  • Доступ к бакету через консоль управления
  • Примеры конфигурации

Политики доступа устанавливают права на действия с бакетами, объектами и группами объектов.

Политика срабатывает, когда пользователь делает запрос к какому-либо ресурсу. В результате срабатывания политики запрос либо выполняется, либо отклоняется.

Проверка доступа происходит на трех уровнях: проверки сервиса Yandex Identity and Access Management, политика доступа и список разрешений ACL.

  1. Если запрос прошел проверку IAM, к нему применяется проверка политики доступа.
  2. Проверка правил политики доступа происходит в следующем порядке:
    1. Если запрос подошел хотя бы под одно из правил Deny, то доступ будет запрещен.
    2. Если запрос подошел хотя бы под одно из правил Allow, то доступ будет разрешен.
    3. Если запрос не подошел ни под одно из правил, то доступ будет запрещен.
  3. Если запрос не прошел проверку IAM или политики доступа, то применяется проверка доступа через ACL объекта.

Политика доступа состоит из базовых элементов:

  • Ресурс – бакет (arn:aws:s3:::samplebucket), объект в бакете (arn:aws:s3:::samplebucket/some/key), или префикс (arn:aws:s3:::samplebucket/some/path/*).
  • Действие – набор операций над ресурсом, который будет запрещен или разрешен политикой. Подробнее читайте в разделе Действия.
  • Результат – запрет или разрешение запрошенного действия. Сначала проверяется попадание запроса в фильтр с действием Deny, при совпадении запрос отклоняется и дальнейшие проверки не проводятся. При попадании в фильтр с действием Allow запрос разрешается. Если запрос не попал ни в один из фильтров, то запрос отклоняется.
  • Принципал – получатель запрошенного разрешения политики. Это может быть пользователь IAM, федеративный пользователь, сервисный аккаунт или анонимный пользователь.
  • Условие – определение случаев, когда действует политика. Подробнее читайте в разделе Условия.

Для описания правил политик используется JSON-подобный язык.

Чтобы применить политику к бакету, см. инструкцию.

Доступ к бакету через консоль управления

Если для бакета настроена политика доступа, то по умолчанию доступ к бакету через консоль управления Yandex Cloud запрещен. Чтобы разрешить доступ к бакету, нужно добавить в секцию Statement политики доступа правило, разрешающее любые запросы к ресурсам <имя бакета>/* и <имя бакета> через консоль управления.

Пример правила для конкретного пользователя Yandex Cloud:

{
  "Effect": "Allow",
  "Principal": {
    "CanonicalUser": "<идентификатор пользователя>"
  },
  "Action": "*",
  "Resource": [
    "arn:aws:s3:::<имя бакета>/*",
    "arn:aws:s3:::<имя бакета>"
  ],
  "Condition": {
    "StringLike": {
      "aws:referer": "https://console.cloud.yandex.*/folders/*/storage/buckets/your-bucket-name*"
    }
  }
}

Идентификатор пользователя можно получить по инструкции в документации Yandex Identity and Access Management.

Примеры конфигурации

  • Политика, которая разрешает анонимному пользователю чтение объектов бакета samplebucket по зашифрованному подключению:
{
  "Id": "epd4limdp3dgec7enpq5",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "f1qqoehl1q53l06kqurs",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::<имя бакета>/*",
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "true"
        }
      }
    }
  ]
}
  • Политика, которая разрешает скачивать объекты только из указанного диапазона IP-адресов:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::<имя бакета>/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "100.101.102.128/30"
        }
      }
    }
  ]
}
  • Политика, которая запрещает скачивать объекты с указанного IP-адреса:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "*",
      "Resource": "arn:aws:s3:::<имя бакета>/*"
    },
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::<имя бакета>/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "100.101.102.103"
        }
      }
    }
  ]
}
  • Политика, которая разрешает разным пользователям доступ только к определенным папкам, каждому пользователю — к своей:
{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"User1PermissionsResource",
      "Effect":"Allow",
      "Principal": {
        "CanonicalUser": "<идентификатор пользователя>"
      },
      "Action": "*",
      "Resource":["arn:aws:s3:::<имя бакета>/user1path/*"]
    },
    {
      "Sid":"User1PermissionsPrefix",
      "Effect":"Allow",
      "Principal": {
          "CanonicalUser": "<идентификатор пользователя>"
      },
      "Action": "s3:ListBucket",
      "Resource":["arn:aws:s3:::<имя бакета>"],
      "Condition": {
        "StringLike": {
          "s3:prefix": "user1path/*"
        }
      }
    },
    {
      "Sid":"User2PermissionsResource",
      "Effect":"Allow",
      "Principal": {
        "CanonicalUser": "<идентификатор пользователя>"
      },
      "Action": "*",
      "Resource":["arn:aws:s3:::<имя бакета>/user2path/*"]
    },
    {
      "Sid":"User2PermissionsPrefix",
      "Effect":"Allow",
      "Principal": {
        "CanonicalUser": "<идентификатор пользователя>"
      },
      "Action": "s3:ListBucket",
      "Resource":["arn:aws:s3:::<имя бакета>"],
      "Condition": {
        "StringLike": {
          "s3:prefix": "user2path/*"
        }
      }
    }
  ]
}

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Доступ к бакету через консоль управления
  • Примеры конфигурации