Монтирование 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

Ура!!!

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

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

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

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

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

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда