Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Object Storage
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Бакеты
      • Создание бакета
      • Удаление бакета
      • Ограничение максимального размера бакета
      • Открытие публичного доступа к бакету
      • Шифрование бакета
      • Управление жизненными циклами объектов
      • Управление конфигурацией CORS
      • Управление политикой доступа
      • Управление версионированием бакета
      • Редактирование ACL бакета
      • Включение механизма логирования
      • Управление блокировками версий объектов
    • Объекты
    • Хостинг статических сайтов
  • Практические руководства
  • Концепции
  • Инструменты
  • Справочник API
  • Управление доступом
  • Правила тарификации
  • Вопросы и ответы
  1. Пошаговые инструкции
  2. Бакеты
  3. Управление политикой доступа

Управление политикой доступа (bucket policy)

Статья создана
Yandex Cloud
  • Применить или изменить политику
  • Просмотреть политику
  • Удалить политику

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

Применить или изменить политику

Минимально необходимая роль для применения или изменения политики доступа — storage.configurer. См. описание роли.

Для применения или изменения политики доступа к бакету:

Консоль управления
Yandex Cloud CLI
AWS CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором нужно настроить политику доступа для бакета.
  2. Выберите сервис Object Storage.
  3. Выберите бакет в списке.
  4. Перейдите на вкладку Политика доступа в меню слева.
  5. Нажмите кнопку Настроить доступ.
  6. Введите идентификатор политики доступа.
  7. Настройте правило:
    1. Введите идентификатор правила.
    2. Настройте параметры правила:
      • Результат — разрешить или запретить.
      • Принцип выбора — включить или исключить пользователей.
      • Пользователь — все пользователи или набор конкретных пользователей.
      • Действие, для которого создается правило. Вы также можете выбрать опцию Все действия.
      • Ресурс — по умолчанию указан выбранный бакет. Чтобы добавить другие ресурсы в правило, нажмите кнопку Добавить ресурс.
    3. При необходимости добавьте условие для правила:
      • Выберите Ключ из списка.
      • Выберите Оператор из списка. Чтобы оператор действовал в существующих полях, выберите опцию Применить, если поле существует. Тогда, если поля не существует, условие будет считаться выполненным.
      • Введите Значение.
      • Нажмите кнопку Добавить значение, чтобы добавить дополнительное значение в условие.
  8. При необходимости добавьте правила и настройте их.
  9. Нажмите кнопку Сохранить.

Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

  1. Посмотрите описание команды CLI для редактирования ACL бакета:

    yc storage bucket update --help
    
  2. Опишите конфигурацию политики доступа в виде схемы данных в формате JSON:

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::<имя бакета>/*",
        "Condition": {
          "Bool": {
            "aws:SecureTransport": "true"
          }
        }
      }
    }
    
  3. Выполните команду:

    yc storage bucket update <имя_бакета> --policy-from-file <путь_к_файлу_с_политиками>
    

    Результат:

    name: my-bucket
    folder_id: csgeoelk7fl15s6dsvbo
    default_storage_class: STANDARD
    versioning: VERSIONING_SUSPENDED
    max_size: "10737418240"
    policy:
        Statement:
          Action: s3:GetObject
          Condition:
            Bool:
              aws:SecureTransport: "true"
            Effect: Allow
            Principal: '*'
            Resource: arn:aws:s3:::my-bucket
          Version: "2012-10-17"
    acl: {}
    created_at: "2022-12-14T08:42:16.273717Z"
    

Примечание

Для управления политикой доступа с помощью AWS CLI сервисному аккаунту должна быть назначена роль storage.admin.

Если у вас еще нет AWS CLI, установите и сконфигурируйте его.

  1. Опишите конфигурацию политики доступа в виде схемы данных формата JSON:

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::<имя бакета>/*",
        "Condition": {
          "Bool": {
            "aws:SecureTransport": "true"
          }
        }
      }
    }
    

    Сохраните готовую конфигурацию в файле policy.json.

  2. Выполните команду:

    aws --endpoint https://storage.yandexcloud.net s3api put-bucket-policy \
      --bucket <имя бакета> \
      --policy file://policy.json
    

Если ранее для бакета уже была установлена политика доступа, то после применения новой политики она будет полностью перезаписана.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

Получите статические ключи доступа — секретный ключ и идентификатор ключа, используемые для аутентификации в Object Storage.

  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

    resource "yandex_storage_bucket" "b" {
      bucket = "my-policy-bucket"
      policy = <<POLICY
     {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "s3:*",
          "Resource": [
            "arn:aws:s3:::my-policy-bucket/*",
            "arn:aws:s3:::my-policy-bucket"
          ]
        },
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": "s3:PutObject",
          "Resource": [
            "arn:aws:s3:::my-policy-bucket/*",
            "arn:aws:s3:::my-policy-bucket"
          ]
        }
      ]
    }
    POLICY
    }
    

    Где:

    • access_key — идентификатор статического ключа доступа.
    • secret_key — значение секретного ключа доступа.
    • bucket — имя бакета. Обязательный параметр.
    • policy — имя политики. Обязательный параметр.

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов.

    После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Воспользуйтесь методом PutBucketPolicy. Если ранее для бакета уже была установлена политика доступа, то после применения новой политики она будет полностью перезаписана.

Просмотреть политику

Минимально необходимая роль для просмотра политики доступа — storage.configViewer. См. описание роли.

Чтобы просмотреть примененную к бакету политику доступа:

Консоль управления
AWS CLI
API
  1. В консоли управления выберите каталог, в котором нужно просмотреть политику доступа для бакета.
  2. Выберите сервис Object Storage.
  3. Выберите бакет в списке.
  4. Перейдите на вкладку Политика доступа в меню слева.

Выполните следующую команду:

aws --endpoint https://storage.yandexcloud.net s3api get-bucket-policy \
  --bucket <имя бакета> \
  --output text

Результат:

{
  "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"s3:GetObject\",\"Resource\":\"arn:aws:s3:::<имя бакета>/*\",\"Condition\":{\"Bool\":{\"aws:SecureTransport\":\"true\"}}}}"
}

Подробнее о параметрах читайте в описании схемы данных.

Воспользуйтесь методом GetBucketPolicy.

Удалить политику

Минимально необходимая роль для удаления политики доступа — storage.configurer. См. описание роли.

Чтобы удалить политику доступа:

Консоль управления
AWS CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором нужно настроить политику доступа для бакета.
  2. Выберите сервис Object Storage.
  3. Выберите бакет в списке.
  4. Перейдите на вкладку Политика доступа в меню слева.
  5. Нажмите значок и выберите Удалить политику доступа.
  6. Нажмите кнопку Удалить.

Выполните следующую команду:

aws --endpoint https://storage.yandexcloud.net s3api delete-bucket-policy \
  --bucket <имя бакета>

Подробнее о Terraform в документации.

Если вы применили политику доступа к бакету при помощи Terraform, вы можете удалить её:

  1. Найдите в конфигурационном файле параметры созданной ранее политики доступа, которую необходимо удалить:

    resource "yandex_storage_bucket" "b" {
      bucket = "my-policy-bucket"
      policy = <<POLICY
     {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "s3:*",
          "Resource": [
            "arn:aws:s3:::my-policy-bucket/*",
            "arn:aws:s3:::my-policy-bucket"
          ]
        },
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": "s3:PutObject",
          "Resource": [
            "arn:aws:s3:::my-policy-bucket/*",
            "arn:aws:s3:::my-policy-bucket"
          ]
        }
      ]
    }
    POLICY
    }
    
  2. Удалите поле policy с описанием параметров политики доступа из конфигурационного файла.

  3. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы редактировали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров без удаляемого описания политики доступа. Если в конфигурации есть ошибки, Terraform на них укажет.

  4. Удалите политику доступа.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Введите слово yes и нажмите Enter.

    После этого в указанном каталоге будет удалена политика доступа к бакету. Проверить отсутствие политики доступа можно в консоли управления.

Воспользуйтесь методом DeleteBucketPolicy.

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

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Применить или изменить политику
  • Просмотреть политику
  • Удалить политику