AWS: s3fs-fuse – монтирование S3 локальным диском на Linux && macOS

Автор: | 19/11/2018
 

Задача – смонтировать AWS S3 корзину к локальной системе, отдельным диском.

Используем s3fs. Документация – тут>>>.

На Arch Linux устанавливаем из репозитория:

[simterm]

$ sudo pacman -S s3fs-fuse

[/simterm]

На macOS – через homebrew:

[simterm]

$ brew cask install osxfuse
$ brew install s3fs

[/simterm]

osxfuse сообщил:

==> Caveats
To install and/or use osxfuse you may need to enable their kernel extension in

System Preferences → Security & Privacy → General

А brew после установки выдал предупреждение:

Be aware that s3fs has some caveats concerning S3 “directories”
that have been created by other tools. See the following issue for
details:

https://code.google.com/p/s3fs/issues/detail?id=73

Надо будет проверить что там.

Для Windows – есть пакет wins3fs, но его не проверял.

IAM и авторизация

Создаём IAM-пользователя с Programmatic access:

Выбираем Attach existing policies directly и жмём Create policy:

Переключаемся в JSON-вид, добавляем политику:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::s3fs-testing"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::s3fs-testing",
                "arn:aws:s3:::s3fs-testing/*"
            ]
        }
    ]
}

Если пользователю нужен будет доступ через веб-админку – то политика будет выглядеть так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::s3fs-testing"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::s3fs-testing",
                "arn:aws:s3:::s3fs-testing/*"
            ]
        }
    ]
}

Сохраняем её:

Возвращаемся во вкладку с созданием пользователя, обновляем списки политик, находим добавленную:

Сохраняем ключи:

Монтирование S3

Создаём каталог для монтирования корзины:

[simterm]

$ sudo mkdir /mnt/s3fs-test
$ sudo chown setevoy:setevoy /mnt/s3fs-test/

[/simterm]

Задаём переменные:

[simterm]

$ export AWSACCESSKEYID=AKI***DDQ
$ export AWSSECRETACCESSKEY=O1f***MN/

[/simterm]

Либо – через файл ~/.passwd-s3fs:

[simterm]

$ echo AKI***DDQ:O1f***MN/ > ~/.passwd-s3fs

[/simterm]

В виде ACCESSKEY:SECRETKEY без пробела.

Если корзин несколько – то указываем их в виде:

[simterm]

$ echo имя-корзины:access-key:secret-key > ~/.passwd-s3fs

[/simterm]

Задаём права доступа только владельцу:

[simterm]

$ chmod 600 ~/.passwd-s3fs

[/simterm]

Монтирование на Linux

Монтируем раздел:

[simterm]

$ s3fs s3fs-testing /mnt/s3fs-test

[/simterm]

Проверяем монтирование:

[simterm]

$ findmnt /mnt/s3fs-test/
TARGET         SOURCE FSTYPE    OPTIONS
/mnt/s3fs-test s3fs   fuse.s3fs rw,nosuid,nodev,relatime,user_id=1000,group_id=1000

[/simterm]

Проверяем каталог:

[simterm]

$ ls -l /mnt/s3fs-test/
total 51
---------- 1 root root 52174 Nov 19 13:43 2adbz0.jpg

[/simterm]

ОК – тестовый файлик в корзине на месте.

При необходимости передать дополнительные опции – используем -o optionname.

Монтирование на macOS

Повторяем на macOS.

Выполняем монтирование:

[simterm]

$ mkdir s3test
$ export AWSACCESSKEYID=AKI***DDQ
$ export AWSSECRETACCESSKEY=O1f***MN/
$ s3fs -d s3fs-testing /Users/jenkins/s3test/

[/simterm]

Тут после первой попытки смонтировать раздел – macOS выводит на экране сообщение, что ему необходимо разрешить загрузку модуля.

Открываем General Settings, внизу в App – разрешаем загрузку модуля.

Повторяем s3fs -d s3fs-testing /Users/jenkins/s3test/, проверяем:

[simterm]

Mobiles-Mac-mini:~ jenkins$ ls -l /Users/jenkins/s3test/
total 104
----------  1 root  wheel  52174 Nov 19  2018 2adbz0.jpg

[/simterm]

Окей.

И пробуем копирование файлов с локальной файловой системы в S3:

[simterm]

14:29:08 [setevoy@setevoy-arch-work ~]  $ touch /tmp/testfile
14:29:15 [setevoy@setevoy-arch-work ~]  $ cp /tmp/testfile /mnt/s3fs-test/

[/simterm]

Проверяем:

[simterm]

14:29:43 [setevoy@setevoy-arch-work ~]  $ ll /mnt/s3fs-test/
total 52
---------- 1 root    root    52174 Nov 19 13:43 2adbz0.jpg
-rw-r--r-- 1 setevoy setevoy     0 Nov 19 14:29 testfile

[/simterm]

Готово.