Монтирование S3 бакета в Ubuntu Linux

Оцените статью

В рамках прохождения курса по Cloud.ru есть задача по подключению S3-бакета при помощи программы CyberDuck которая доступна только под Windows и MacOS. Линукс там конечно же не поддеживается и придется как-то выкручиваться.

Для этого нам понадобится настроеный бакет и системный пользователь для доступа к S3 хранилищу, а подключаться мы будем при помощи утилиты s3fs которую собственно сейчас и установим.

# aptitude install s3fs

Создаем файлик с параметрами авторизации системного пользователя (в домашнем каталоге пользователя).

$ echo "<accessKeyId>:<secretAccessKey>" >.passwd-s3fs
$ chmod 600 ~/.passwd-s3fs

Создаем для теста каталог в /tmp.

$ mkdir /tmp/s3fs

Монтируем каталог хитрым заклинанием (пример взят из selectel, но вполне к любому s3-образному хранилищу применим) вида.

s3fs <наименование_контейнера> <путь_к_каталогу монтирования> -o allow_other -o passwd_file=<путь_файлу_с_данными_авторизации> -o use_path_request_style -o endpoint=<регион> -o url=https://s3.ru-1.storage.selcloud.ru

Естественно, что ничерта с ходу не получилось и будем дебажить (ну как обычно). А заклинание для дебага и ошибки выглядят так.

$ s3fs bucket-5f8cdd /tmp/s3fs -d -f -o passwd_file=/home/chernousov/.passwd-s3fs -o use_path_request_style -o endpoint=ru-central-1 -o url=https://s3.cloud.ru
2025-01-16T03:27:50.999Z [INF] s3fs version 1.93(unknown) : s3fs -d -f -o passwd_file=/home/chernousov/.passwd-s3fs -o use_path_request_style -o endpoint=ru-central-1 -o url=https://s3.cloud.ru bucket-5f8cdd /tmp/s3fs
2025-01-16T03:27:50.999Z [CRT] s3fs_logger.cpp:LowSetLogLevel(239): change debug level from [CRT] to [INF] 
2025-01-16T03:27:50.999Z [INF]     s3fs.cpp:set_mountpoint_attribute(4563): PROC(uid=1000, gid=1000) - MountPoint(uid=1000, gid=1000, mode=40775)
2025-01-16T03:27:51.000Z [INF] curl.cpp:InitMimeType(431): Loaded mime information from /etc/mime.types
2025-01-16T03:27:51.000Z [INF] fdcache_stat.cpp:CheckCacheFileStatTopDir(78): The path to cache top dir is empty, thus not need to check permission.
2025-01-16T03:27:51.001Z [INF] s3fs.cpp:s3fs_init(4287): init v1.93(commit:unknown) with GnuTLS(gcrypt), credential-library(built-in)
2025-01-16T03:27:51.001Z [INF] s3fs.cpp:s3fs_check_service(4431): check services.
2025-01-16T03:27:51.001Z [INF]       curl.cpp:CheckBucket(3673): check a bucket path(/).
2025-01-16T03:27:51.001Z [INF]       curl_util.cpp:prepare_url(257): URL is https://s3.cloud.ru/bucket-5f8cdd/
2025-01-16T03:27:51.001Z [INF]       curl_util.cpp:prepare_url(290): URL changed is https://s3.cloud.ru/bucket-5f8cdd/
2025-01-16T03:27:51.001Z [INF]       curl.cpp:insertV4Headers(2892): computing signature [GET] [/] [] []
2025-01-16T03:27:51.001Z [INF]       curl_util.cpp:url_to_host(334): url is https://s3.cloud.ru
2025-01-16T03:27:51.301Z [ERR] curl.cpp:RequestPerform(2567): HTTP response code 403, returning EPERM. Body Text: <Error><Code>InvalidAccessKeyId</Code><Message>Invalid or unknown access key id</Message></Error>
2025-01-16T03:27:51.301Z [ERR] curl.cpp:CheckBucket(3742): Check bucket failed, S3 response: <Error><Code>InvalidAccessKeyId</Code><Message>Invalid or unknown access key id</Message></Error>
2025-01-16T03:27:51.301Z [CRT] s3fs.cpp:s3fs_check_service(4508): Failed to connect by sigv4, so retry to connect by signature version 2. But you should to review url and endpoint option.
2025-01-16T03:27:51.301Z [INF]       curl.cpp:CheckBucket(3673): check a bucket path(/).
2025-01-16T03:27:51.301Z [INF]       curl_util.cpp:prepare_url(257): URL is https://s3.cloud.ru/bucket-5f8cdd/
2025-01-16T03:27:51.301Z [INF]       curl_util.cpp:prepare_url(290): URL changed is https://s3.cloud.ru/bucket-5f8cdd/
2025-01-16T03:27:51.355Z [INF]       curl.cpp:RequestPerform(2583): HTTP response code 501 was returned, returning ENOTSUP
2025-01-16T03:27:51.355Z [ERR] curl.cpp:CheckBucket(3742): Check bucket failed, S3 response: <Error><Code>NotImplemented</Code><Message>AWS signature V2 not supported</Message></Error>
2025-01-16T03:27:51.355Z [CRT] s3fs.cpp:s3fs_check_service(4530): Failed to check bucket and directory for mount point : Unable to connect(host=https://s3.cloud.ru)
2025-01-16T03:27:51.355Z [ERR] s3fs.cpp:s3fs_exit_fuseloop(4277): Exiting FUSE event loop due to errors

2025-01-16T03:27:51.361Z [INF] s3fs.cpp:s3fs_destroy(4336): destroy

Итого, пошли читать документацию (причем она у них адекватно написана только применительно к AWS и подключению из Python https://cloud.ru/docs/s3e/ug/topics/tools__sdk-python.html). И как я понимаю от селектела нам инструкция подойдет лишь частично и придется информацию дербанить из разных источников.

В итоге, на курсах задал вопрос и мне ответили (о, магия), оказывается надо вот так делать.

Антон, добрый день!
Благодарим за отзыв.

Для s3fs необходимо:
1. сохранить credentials в файле (.passwd-s3fs) в формате: tenant.access_key:secret_key;
2. прописать команду подключения:
# s3fs bucket-name /path/to/mnt/dir -o passwd_file=/path/to/.passwd-s3fs -o url=https://s3.cloud.ru -o use_path_request_style -o endpoint=ru-central-1

Если будут вопросы — обращайтесь!

И вот тут я в документации не нашел за каким там чертом точка ставится и почему у того же селектела все наоборот и что это за магия, но оно работает.

tenant.access_key:secret_key

Ура!!!

Похожие записи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS