Соединение с S3-совместимыми объектными хранилищами

Команды выгрузки и загрузки из S3-совместимых хранилищ export s3 и import s3 используют одинаковые параметры для соединения с S3 и аутентификации. О том, как узнать эти параметры для некоторых облачных поставщиков, описано в разделе Получение параметров соединения с S3 ниже.

Соединение

Соединение с S3 требует указания эндпоинта и бакета:

--s3-endpoint HOST: Эндпоинт S3. HOST - валидное имя хоста, например storage.yandexcloud.net

--bucket STR: Бакет S3. STR - строка, содержащая имя бакета

Аутентификация

Для успешного соединения, кроме случая загрузки из публично доступного бакета, потребуется аутентифицироваться под учетной записью, для которой разрешена запись (для выгрузки) или чтение (для загрузки) из данного бакета.

Для аутентификации в S3 необходимы два параметра:

  • Идентификатор ключа доступа (access_key_id)
  • Секретный ключ доступа (secret_access_key)

YDB CLI определяет значения этих параметров из следующих источников (в порядке убывания приоритета):

  1. Командной строки
  2. Переменных окружения
  3. Файла ~/.aws/credentials

Параметры командной строки

--access-key STR: Идентификатор ключа доступа
--secret-key STR: Секретный ключ доступа

Переменные окружения

Если какой-либо параметр аутентификации не указан в командной строке, YDB CLI пробует его получить из следующих переменных окружения:

AWS_ACCESS_KEY_ID: Идентификатор ключа доступа
AWS_SECRET_ACCESS_KEY: Секретный ключ доступа

Файл аутентификации AWS

Если какой-либо параметр аутентификации не указан в командной строке, и его не удалось получить из переменной окружения, YDB CLI пробует его получить из файла ~/.aws/credentials, применяемого для аутентификации AWS CLI. Данный файл может быть создан командой AWS CLI aws configure.

Получение параметров соединения с S3

Yandex.Cloud

Ниже описан сценарий получения ключей доступа к Yandex.Cloud Object Storage с применением Yandex.Cloud CLI.

  1. Установите и сконфигурируйте Yandex.Cloud CLI.

  2. Получите ID вашего каталога в облаке следующей командой, его понадобится указывать в командах ниже:

    yc config list
    

    В выводе идентификатор каталога в облаке находится в строке folder-id::

    folder-id: b2ge70qdcff4bo9q6t19
    
  3. Создайте сервисный аккаунт, выполнив следующую команду:

    yc iam service-account create --name s3account
    

    Вы можете указать любое имя аккаунта кроме s3account или использовать существующий, тогда вам понадобится его также заменять при копировании команд ниже через буфер обмена.

  4. Назначьте сервисному аккаунту роли в соответствии с необходимым уровнем доступа к S3, выполнив команду:

    yc resource-manager folder add-access-binding <folder-id> \
      --role storage.viewer --subject serviceAccount:s3account
    
    yc resource-manager folder add-access-binding <folder-id> \
      --role storage.editor --subject serviceAccount:s3account
    

    , где <folder-id> - это идентификатор каталога в облаке, полученный на шаге 2.

    Вы можете также ознакомиться с полным перечнем ролей Yandex.Cloud.

  5. Получите статические ключи доступа, выполнив следующую команду:

    yc iam access-key create --service-account-name s3account
    

    Успешно исполненная команда выведет информацию об атрибутах access_key и значение secret:

    access_key:
      id: aje6t3vsbj8lp9r4vk2u
      service_account_id: ajepg0mjt06siuj65usm
      created_at: "2018-11-22T14:37:51Z"
      key_id: 0n8X6WY6S24N7OjXQ0YQ
    secret: JyTRFdqw8t1kh2-OJNz4JX5ZTz9Dj1rI9hxtzMP1
    

    В данном выводе:

    • access_key.key_id - это идентификатор ключа доступа
    • secret - это секретный ключ доступа