[Документация Yandex Cloud](../../../index.md) > [Yandex Object Storage](../../index.md) > [Пошаговые инструкции](../index.md) > Бакеты > Создание бакета

# Создание бакета

{% note info %}

В [регионе Казахстан](../../../overview/concepts/region.md) доступна только [зона доступности](../../../overview/concepts/geo-scope.md) `kz1-a`.

{% endnote %}


Чтобы создать [бакет](../../concepts/bucket.md), у вас должна быть _минимальная_ [роль](../../security/index.md#storage-editor) `storage.editor` на [каталог](../../../resource-manager/concepts/resources-hierarchy.md#folder).

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. В [консоли управления](https://kz.console.yandex.cloud) выберите каталог, в котором хотите создать бакет.
  1. Перейдите в сервис **Object Storage**.
  1. На панели сверху нажмите **Создать бакет**.
  1. На странице создания бакета:

      1. Введите имя бакета в соответствии с [правилами именования](../../concepts/bucket.md#naming).

          
          По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, [загрузите собственный сертификат безопасности](../hosting/certificate.md) в Object Storage.


      1. При необходимости добавьте [метки](../../concepts/tags.md):

          1. Нажмите **Добавить метку**.
          1. Введите метку в формате `ключ: значение`.
          1. Нажмите **Enter**.

      1. При необходимости ограничьте максимальный размер бакета.

          Размер `0` означает отсутствие ограничений и аналогичен включенной опции **Без ограничения**.

      1. Задайте параметры [публичного доступа](../../security/public-access.md) на чтение [объектов](../../concepts/object.md) в бакете, получение списка объектов и чтение настроек бакета:

          * `С авторизацией` — доступ только для авторизованных пользователей Yandex Cloud.
          * `Для всех` — доступ для любых пользователей.

          {% note warning %}
          
          Публичный доступ предоставляется неограниченному кругу анонимных пользователей. Используйте его только в случае, когда нет возможности применить другие механизмы предоставления доступа.
          
          {% endnote %}

      1. Выберите [класс хранилища](../../concepts/storage-class.md) по умолчанию:

          * `Стандартное`
          * `Холодное`
          * `Ледяное`
          
          Более «холодные» классы предназначены для длительного хранения объектов, работать с которыми планируется реже. Чем «холоднее» хранилище, тем дешевле хранить в нем данные, но тем дороже их читать и записывать.
         
      
      1. При необходимости включите шифрование: в поле **Ключ KMS** выберите [симметричный ключ](../../../kms/concepts/key.md) или [создайте](../../../kms/operations/key.md#create) новый.


      1. Нажмите **Создать бакет** для завершения операции.

- Yandex Cloud CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  1. Посмотрите описание команды CLI для создания бакета:
  
      ```bash
      yc storage bucket create --help
      ```
  
  1. Создайте бакет в каталоге по умолчанию:
  
      ```bash
      yc storage bucket create --name <имя_бакета>
      ```
  
      Где `--name` — имя бакета. Обязательный параметр. Подробнее в разделе [Правила именования бакетов](../../concepts/bucket.md#naming).
  
      
      По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, [загрузите](../hosting/certificate.md) собственный сертификат безопасности в Object Storage.
  
  
      Результат:
  
      ```text
      name: example
      folder_id: b1gmit33ngp6********
      anonymous_access_flags:
      read: false
      list: false
      default_storage_class: STANDARD
      versioning: VERSIONING_DISABLED
      max_size: "53687091200"
      acl: {}
      created_at: "2022-12-16T14:05:12.196007Z"
      ```
  
      {% cut "Опциональные параметры" %}
  
      * `--default-storage-class` — [класс хранилища](../../concepts/storage-class.md). Доступные значения:
      * `standard` — стандартное хранилище. Устанавливается по умолчанию.
      * `cold` — холодное хранилище.
      * `ice` — ледяное хранилище.
  
      Более «холодные» классы предназначены для длительного хранения объектов, работать с которыми планируется реже. Чем «холоднее» хранилище, тем дешевле хранить в нем данные, но тем дороже их читать и записывать.
  
      * `--max-size` — максимальный размер бакета в байтах. Значение по умолчанию — `0` (без ограничений).
      * Параметры для включения [публичного доступа](../../security/public-access.md) к бакету:
      * `--public-read` — включить публичный доступ на чтение объектов в бакете.
      * `--public-list` — включить публичный доступ на просмотр списка объектов в бакете.
      * `--public-config-read` — включить публичный доступ на чтение настроек в бакете.
  
      По умолчанию публичный доступ к бакету выключен.
  
      {% note warning %}
      
      Публичный доступ предоставляется неограниченному кругу анонимных пользователей. Используйте его только в случае, когда нет возможности применить другие механизмы предоставления доступа.
      
      {% endnote %}
  
      * Параметры для настройки [ACL](../../concepts/acl.md) бакета:
      * `--acl` — предопределенный ACL. Список возможных значений приведен в разделе [Предопределенные ACL](../../concepts/acl.md#predefined-acls). Нельзя использовать одновременно с параметром `--grants`.
      * `--grants` — настройки разрешений для отдельных пользователей, [сервисных аккаунтов](../../../iam/concepts/users/service-accounts.md), [групп пользователей](../../../organization/concepts/groups.md) и [публичных групп](../../concepts/acl.md#public-groups) (группа всех пользователей интернета, группа всех аутентифицированных пользователей Yandex Cloud). Нельзя использовать одновременно с параметром `--acl`. Значение параметра указывается в формате: `grant-type=<тип_получателя_разрешения>,grantee-id=<идентификатор_получателя>,permission=<тип_разрешения>`, где:
          * `grant-type` — тип получателя разрешения. Возможные значения:
          * `grant-type-account` — пользователь, [сервисный аккаунт](../../../iam/concepts/users/service-accounts.md) или [группа пользователей](../../../organization/concepts/groups.md);
          * `grant-type-all-authenticated-users` — [публичная группа](../../concepts/acl.md#public-groups) всех аутентифицированных пользователей Yandex Cloud;
          * `grant-type-all-users` — публичная группа всех пользователей интернета.
          * `grantee-id` — идентификатор пользователя, сервисного аккаунта или группы пользователей, которым нужно дать разрешение. Указывается, только если `grant-type=grant-type-account`.
          * `permission` — тип разрешения ACL. Возможные значения: `permission-full-control`, `permission-write`, `permission-read`. Подробнее о разрешениях в разделе [Виды разрешений](../../concepts/acl.md#permissions-types).
  
          Чтобы настроить несколько разрешений, укажите параметр `--grants` несколько раз.
  
      По умолчанию для каждого нового бакета создается пустой ACL.
  
      {% endcut %}
  
      Подробнее о команде `yc storage bucket create` в [Справочнике YC CLI](../../../cli/cli-ref/storage/cli-ref/bucket/create.md).

- AWS CLI {#aws-cli}

  Если у вас еще нет интерфейса командной строки AWS CLI, [установите и сконфигурируйте его](../../tools/aws-cli.md).

  Чтобы создать бакет, [назначьте](../../../iam/operations/sa/assign-role-for-sa.md) сервисному аккаунту, через который работает AWS CLI, [роль](../../security/index.md#storage-editor) `storage.editor`.

  В терминале выполните команду:

  ```bash
  aws s3api create-bucket \
    --endpoint-url=https://storage.yandexcloud.kz \
    --bucket <имя_бакета>
  ```

  Где:

  * `--endpoint-url` — эндпоинт Object Storage.
  * `--bucket` — имя бакета.

  
  {% note info %}

  По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, [загрузите](../hosting/certificate.md) собственный сертификат безопасности в Object Storage. Подробнее в разделе [Правила именования бакетов](../../concepts/bucket.md#naming).

  {% endnote %}


  Результат:

  ```text
  {
    "Location": "/<имя_бакета>"
  }
  ```

  Будет создан бакет со следующими параметрами:
  * без ограничения максимального размера;
  * с ограниченным [доступом](../../concepts/bucket.md#bucket-access) на чтение объектов, к списку объектов и на чтение настроек;
  * с [классом хранилища](../../concepts/storage-class.md) `Стандартное`.

  {% cut "Опциональные параметры" %}

  Вы можете применить к бакету [предопределенный ACL](../../concepts/acl.md#predefined-acls) или настроить разрешения для отдельных пользователей, [сервисных аккаунтов](../../../iam/concepts/users/service-accounts.md), [групп пользователей](../../../organization/concepts/groups.md) и [публичных групп](../../concepts/acl.md#public-groups) (группа всех пользователей интернета, группа всех аутентифицированных пользователей Yandex Cloud). Эти настройки несовместимы: у бакета должен быть либо предопределенный ACL, либо набор отдельных разрешений.

  {% note info %}

  Чтобы управлять настройками [ACL](../../concepts/acl.md) бакета, [назначьте](../../../iam/operations/sa/assign-role-for-sa.md) сервисному аккаунту, через который работает AWS CLI, [роль](../../security/index.md#storage-admin) `storage.admin`.

  {% endnote %}

  **Предопределенный ACL**

  ```bash
  aws s3api create-bucket \
    --endpoint-url=https://storage.yandexcloud.kz \
    --bucket <имя_бакета> \
    --acl <предопределенный_ACL>
  ```

  Где `--acl` — предопределенный ACL. Список значений приведен в разделе [Предопределенные ACL](../../concepts/acl.md#predefined-acls).

  **Отдельные разрешения**

  ```bash
  aws s3api create-bucket \
    --endpoint-url=https://storage.yandexcloud.kz \
    --bucket <имя_бакета> \
    <тип_разрешения> <получатель_разрешения>
  ```

  Где:
  * Возможные типы разрешений ACL:
    * `--grant-read` — доступ к списку объектов в бакете, чтению различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтению всех объектов в бакете.
    * `--grant-write` — доступ к записи, перезаписи и удалению объектов в бакете. Используется только совместно с `--grant-read`.
    * `--grant-full-control` — полный доступ к бакету и объектам в нем.

    Вы можете задать несколько разрешений в одной команде.
  * Возможные получатели разрешений:
    * `id=<идентификатор_получателя>` — идентификатор пользователя, сервисного аккаунта или группы пользователей, которым нужно дать разрешение.
    * `uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers` — [публичная группа](../../concepts/acl.md#public-groups) всех аутентифицированных пользователей Yandex Cloud.
    * `uri=http://acs.amazonaws.com/groups/global/AllUsers` — публичная группа всех пользователей интернета.

  По умолчанию для каждого нового бакета создается пустой ACL.

  {% endcut %}

  Подробнее о команде `aws s3api create-bucket` в [документации AWS](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html).

- Terraform {#tf}

  {% note info %}
  
  Если вы работаете с Object Storage через Terraform от имени [сервисного аккаунта](../../../iam/concepts/users/service-accounts.md), [назначьте](../../../iam/operations/sa/assign-role-for-sa.md) сервисному аккаунту нужную [роль](../../security/index.md#roles-list), например `storage.admin`, на каталог, в котором будут создаваться ресурсы.
  
  {% endnote %}

  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../../terraform/index.md).

  
  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../../terraform/authentication.md) соответствующим способом.


  
  {% note warning %}
  
  Для корректной работы Terraform в [регионе Казахстан](../../../overview/concepts/region.md) укажите в конфигурационном файле Terraform в блоке `provider` эндпоинты API Yandex Cloud и Object Storage: 
  
  ```hcl
  provider "yandex" {
    zone             = "kz1-a"
    endpoint         = "api.yandexcloud.kz:443"
    storage_endpoint = "https://storage.yandexcloud.kz"
  }
  ```
  
  Подробнее о настройках провайдера в разделе [Настройте провайдер](../../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider).
  
  {% endnote %}


  
  По умолчанию для аутентификации в Object Storage Terraform использует IAM-токен. Кроме IAM-токена, для аутентификации в Object Storage можно использовать сервисный аккаунт и статические ключи доступа. Более подробная информация об особенностях аутентификации Terraform в Object Storage приведена в [документации провайдера](../../../terraform/resources/storage_bucket.md).

  **Создание бакета с использованием IAM-токена**

  1. [Получите данные для аутентификации](../../../tutorials/infrastructure-management/terraform-quickstart.md#get-credentials) и добавьте их в переменные окружения.
  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

      ```hcl
      # Создание бакета с использованием IAM-токена

      resource "yandex_storage_bucket" "iam-bucket" {
        bucket    = "<имя_бакета>"
        folder_id = "<идентификатор_каталога>"
      }
      ```

      Где:
      * `bucket` — имя бакета. Обязательный параметр.

        По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, [загрузите собственный сертификат безопасности](../hosting/certificate.md) в Object Storage.
      
      * `folder_id` — [идентификатор каталога](../../../resource-manager/operations/folder/get-id.md).

        {% note info %}

        Если вы используете IAM-токен учетной записи пользователя, то в ресурсе `yandex_storage_bucket` необходимо указывать идентификатор каталога `folder_id`.

        В случае использования IAM-токена сервисного аккаунта или статических ключей доступа, `folder_id` указывать необязательно — он потребуется только если вы хотите создать ресурс в каталоге, отличном от каталога сервисного аккаунта.

        {% endnote %}

      Более подробная информация о параметрах ресурса `yandex_storage_bucket` в Terraform приведена в [документации провайдера](../../../terraform/resources/storage_bucket.md).

  1. Создайте ресурсы:

        1. В терминале перейдите в директорию с конфигурационным файлом.
        1. Проверьте корректность конфигурации с помощью команды:
        
           ```bash
           terraform validate
           ```
        
           Если конфигурация является корректной, появится сообщение:
        
           ```bash
           Success! The configuration is valid.
           ```
        
        1. Выполните команду:
        
           ```bash
           terraform plan
           ```
        
           В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
        1. Примените изменения конфигурации:
        
           ```bash
           terraform apply
           ```
        
        1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud).


  **Создание бакета с использованием статического ключа**

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

      {% cut "Создание бакета с использованием статического ключа" %}

      ```hcl
      terraform {
        required_providers {
          yandex = {
            source = "yandex-cloud/yandex"
          }
        }
        required_version = ">= 0.13"
      }

      # Настройка провайдера
      
      provider "yandex" {
        zone      = "kz1-a"
      }

      # Создание сервисного аккаунта
      
      resource "yandex_iam_service_account" "sa" {
        name = "<имя_сервисного_аккаунта>"
      }

      # Назначение роли сервисному аккаунту
      
      resource "yandex_resourcemanager_folder_iam_member" "sa-admin" {
        folder_id = "<идентификатор_каталога>"
        role      = "storage.admin"
        member    = "serviceAccount:${yandex_iam_service_account.sa.id}"
      }

      # Создание статического ключа доступа
      
      resource "yandex_iam_service_account_static_access_key" "sa-static-key" {
        service_account_id = yandex_iam_service_account.sa.id
        description        = "static access key for object storage"
      }

      # Создание бакета с использованием статического ключа
      
      resource "yandex_storage_bucket" "test" {
        access_key            = yandex_iam_service_account_static_access_key.sa-static-key.access_key
        secret_key            = yandex_iam_service_account_static_access_key.sa-static-key.secret_key
        bucket                = "<имя_бакета>"
        max_size              = <максимальный_размер_бакета>
        default_storage_class = "<класс_хранилища>"
        anonymous_access_flags {
          read        = <true|false>
          list        = <true|false>
          config_read = <true|false>
        }
        tags = {
          <ключ_1> = "<значение_1>"
          <ключ_2> = "<значение_2>"
          ...
          <ключ_n> = "<значение_n>"
        }
      }
      ```

      Где:
      * `yandex_iam_service_account` — описание [сервисного аккаунта](../../../iam/concepts/users/service-accounts.md), который создаст [бакет](../../concepts/bucket.md) и будет работать с ним:

        * `name` — имя сервисного аккаунта. Обязательный параметр.
        * `bucket` — имя бакета.

          
          По умолчанию бакет с точкой в имени доступен только по протоколу HTTP. Чтобы поддержать для бакета протокол HTTPS, [загрузите собственный сертификат безопасности](../hosting/certificate.md) в Object Storage.


        * `max_size` — максимальный размер бакета в байтах. Значение по умолчанию — `0`, без ограничений. 
        * `default_storage_class` — [класс хранилища](../../concepts/storage-class.md). Доступные значения:

          * `standard` — стандартное хранилище. Значение по умолчанию.
          * `cold` — холодное хранилище.
          * `ice` — ледяное хранилище.

          Более «холодные» классы предназначены для длительного хранения объектов, работать с которыми планируется реже. Чем «холоднее» хранилище, тем дешевле хранить в нем данные, но тем дороже их читать и записывать.

        * `anonymous_access_flags` — настройки [доступа](../../concepts/bucket.md#bucket-access):

          * `read` — публичный доступ на чтение объектов в бакете.
          * `list` — публичный доступ на просмотр списка объектов в бакете.
          * `config_read` — публичный доступ на чтение настроек в бакете. По умолчанию выключен.

        * `tags` — [метки](../../concepts/tags.md) бакета в формате `ключ = "значение"`.

      Более подробная информация о параметрах ресурса `yandex_storage_bucket` в Terraform приведена в [документации провайдера](../../../terraform/resources/storage_bucket.md).

      {% endcut %}

  1. Создайте ресурсы:

      1. В терминале перейдите в директорию с конфигурационным файлом.
      1. Проверьте корректность конфигурации с помощью команды:
      
         ```bash
         terraform validate
         ```
      
         Если конфигурация является корректной, появится сообщение:
      
         ```bash
         Success! The configuration is valid.
         ```
      
      1. Выполните команду:
      
         ```bash
         terraform plan
         ```
      
         В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
      1. Примените изменения конфигурации:
      
         ```bash
         terraform apply
         ```
      
      1. Подтвердите изменения: введите в терминале слово `yes` и нажмите **Enter**.

  Terraform создаст все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud).

- API {#api}

  Чтобы создать бакет, воспользуйтесь методом REST API [create](../../api-ref/Bucket/create.md) для ресурса [Bucket](../../api-ref/Bucket/index.md), вызовом gRPC API [BucketService/Create](../../api-ref/grpc/Bucket/create.md) или методом S3 API [create](../../s3/api-ref/bucket/create.md).

{% endlist %}

### Полезные ссылки {#see-also}

* [Загрузка объекта](../objects/upload.md)
* [Редактирование ACL бакета](edit-acl.md)
* [Ограничение максимального размера бакета](limit-max-volume.md)
* [Настройка публичного доступа к бакету](bucket-availability.md)
* [Управление метками бакета](tagging.md)
* [Управление жизненными циклами объектов в бакете](lifecycles.md)
* [Управление политикой доступа (bucket policy)](policy.md)