S3 to usługa przestrzeni składowania danych, zapewniająca interfejs API - kompatybilny z Amazon Web Services (AWS). MinIO to oparta na chmurze usługa przechowywania obiektów, pozwalająca użytkownikom na przechowywanie i pobieranie danych, obsługująca wszystkie podstawowe funkcje S3.
S3 (Simple Storage Service)- usługa pamięci masowej, umożliwia przechowywanie i łatwy dostęp do danych.
Bucket – to kontener, w którym przechowuje się obiekty. Przestrzeń wykorzystywana przez bucket oraz dostęp do niego są zarządzalne.
Obiekty – pliki przechowywane w bucketach.
Klucz – unikalny identyfikator obiektu. Każdy obiekt w S3 można wyróżnić po kombinacji nazwy bucketu, klucza i - opcjonalnie - identyfikatorze wersji danego obiektu.
Chęć korzystania z przestrzeni składowania danych, w ramach usług świadczonych przez WCSS, należy deklarować przez stronę https://e-science.pl.
Dostęp do uslugi jest możliwy przez interfejs webowy oraz popularne programy klienckie obsługujące protokół S3, a także dostępne bilioteki programistyczne oraz narzędzia i frameworki kompatybilne z MinIO oraz wykorzystujące backend S3.
Aby zalogować się do interfejsu webowego MinIO należy wejść na stronę https://console.s3min.e-science.pl, a następnie użyć poświadczeń do konta e-science.pl.
UWAGA! Dostęp do usługi możliwy jest z sieci akademickiej lub przy użyciu połączenia VPN.
Zakładka Object Browser zawiera listę bucketów (nazwę - Name, liczbę obiektów - Objects, rozmiar - Size oraz rodzaj dostępu - Access), które należą do danego użytkownika. W przypadku, gdy bucketów jest dużo, można użyć wyszukiwarki, celem szybszego znalezienia poszukiwanego zasobu.
Po wybraniu konkretnego bucketu pojawiają się informacje na jego temat (data utworzenia - Created on, rodzaj dostęp - Access, rozmiar oraz liczba obiektów), a także lista obiektów dodanych do bucketu zawierająca: nazwę obiektu, datę ostatniej modyfikacji oraz rozmiar obiektu.
Po prawej stronie znajdują się przyciski:
Po kliknięciu ikonki obiektu pojawiają się opcje:
Po wyborze obiektu istnieje możliwość również na podejrzenie szczegółowych informacji na jego temat, w tym - metadanych. Oprócz opcji opisanych wyżej można również otagować obiekt.
Klucze dostępu to tożsamości potomne uwierzytelnionego użytkownika, w związku z czym mają one takie same lub mniejsze uprawnienia od właściciela.
Użytkownik może wygenerować dowolną liczbę kluczy dostępu, przy czym akcja ta może się odbyć bez udziału administratorów usługi.
Domyślnie podczas tworzenia klucza ma on takie same uprawnienia, co użytkownik - najczęściej read/write. Zmienianie polityki kluczy dostępowych wyjaśnione jest w sekcji Zarządzanie dostępem.
W celu utworzenia nowego klucza dostępowego, należy:
5. Skopiować i zapisać Access Key oraz Secret Key lub ściągnąć plik (przycisk Download for import)
Prywatny klucz (Secret Key) widoczny jest dla użytkownika tylko w procesie tworzenia nowego klucza dostępowego, dlatego tak ważne jest, aby go zapisać (utrwalić).
Na ekranie głównym kluczy dostępowych (Access Keys) znajduje się lista wygenerowanych kluczy przez użytkownika. W przypadku, gdy kluczy jest dużo, można użyć wyszukiwarki, celem szybszego znalezienia poszukiwanego.
W prawym, górnym rogu można dodać nowy klucz dostępu Create access key + (opisane w rozdziale Tworzenie nowych kluczy dostępu).
W celu usunięcia klucza/y dostępu należy:
Zakładkę Buckets można znaleźć, po lewej stronie, w sekcji Administrator. Na ekranie głównym pojawią się informacje ogólne na temat dostępnych dla danego użytkownika bucketów, a wraz z tym możliwość skonfigurowania np. szyfrowania (Encryption), włączenia wersjonowania (Versioning) i polityki dostępu (Access Policy).
Każdy dostępny dla konkretnego użytkownika bucket składa się z następujących sekcji:
Do wyboru są 3 opcje:
Replikacja to funkcja S3, która pozwala automatycznie skopiować zawartość jednego bucketu do innego, co można wykorzystać np. do tworzenia kopii zapasowych, odzyskiwania danych, czy dystrybucji i przetwarzania danych.
Replikacja bucketów synchronizuje dane na ich poziomie (ścieżki i pliki).
W celu skonfigurowania dwukierunkowej replikacji zasobników przy użyciu MinIO należy utworzyć nową regulę replikacji, nacisnąć przycisk Add Replication Rule +. Następnie wypełnić pola i zapisać, używając przycisku: Save.
Cykl życia pozwala na zdefiniowanie reguł dotyczących przenoszenia, archiwizacji lub usuwania obiektów na podstawie ich wieku, typu, rozmiaru lub innych atrybutów.
Poniżej pokazano przykład usuwania obiektów w ścieżce o zadanych parametrach - starszych niż 5 dni.
Funkcja anonimowego dostępu pozwala na udostępnienie zawartości bucketu poprzez link, należy kliknąć Add Access Rule +.
Następnie ograniczyć poziom dostępu do: read-only, read-write oraz write-only.
Usługa MinIO, do definiowania autoryzowanych akcji i zasobów (do których ma dostęp uwierzytelniony użytkownik), wykorzystuje Policy-Based Access Control (PBAC). Jest to schemat analogiczny, co dokumenty zasad AWS IAM.
Przykładowy szablon do tworzenia zasad niestandardowych, dla struktury polityki użytkownika:
{
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [ "s3:<nazwa_akcji>", ... ],
"Resource" : "arn:aws:s3:::*",
"Condition" : { ... }
},
{
"Effect" : "Deny",
"Action" : [ "s3:<nazwa_akcji>", ... ],
"Resource" : "arn:aws:s3:::*",
"Condition" : { ... }
}
]
}
Możliwe do wykonania akcje zostały omówione w rozdziale Built-In Policies.
W celu zastosowania polityki uprawnień do wybranego bucketu należy, w źródle (Resource), przed gwiazdką, umieścić nazwę bucketu i slash (/).
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [ "s3:*"],
"Resource" : "arn:aws:s3:::<nazwa_bucketu>/*",
"Condition" : { ... }
}
]
}
Chcąc udostępnienić konkretny plik/katalog z bucketu, należy przy źródle - Resource, przed gwiazdką, wpisać nazwę bucketu (test-man) i /, następnie ścieżkę do obiektu lub ścieżki (test-folder) i /.
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [ "s3:<NazwaBucketu>", ... ],
"Resource" : "arn:aws:s3:::test-man/test-folder/*",
"Condition" : { ... }
}
]
}
MinIO udostępnia następujące polityki do przypisania do użytkowników:
Opcja przyznaje uprawnienia tylko do odczytu dla dowolnego obiektu. Akcja (Action) GET musi odnosić się do określonego obiektu.
s3:GetBucketLocation
s3:GetObject
Przykład:
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource" : "arn:aws:s3:::<nazwa_bucketu>/*",
"Condition" : { ... }
}
]
}
Przyznaje uprawnienia do odczytu i zapisu dla wszystkich obiektów na serwerze MinIO.
s3:*
Przykład:
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [
"s3:*"
],
"Resource" : "arn:aws:s3:::<nazwa_bucketu>/*",
"Condition" : { ... }
}
]
}
Przyznaje uprawnienia tylko do zapisu do dowolnej przestrzeni nazw. Akcja PUT musi odnościć się do konkretnej lokalizacji obiektu, natomiast nie ma wymogu jej wpisywania.
s3:PutObject
Przykład:
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"Action" : [
"s3:PutObject"
],
"Resource" : "arn:aws:s3:::<nazwa_bucketu>/*",
"Condition" : { ... }
}
]
}
Konfiguracja klienta rclone jest opisana w osobnym artykule.
WinSCP to graficzny klient dla systemu Windows obsługujący protokół S3, oferuje funkcje menadżera plików i synchronizacji.
CyberDuck to darmowy program do zarządzania plikami na serwerach S3. Oferuje prosty, intuicyjny interfejs graficzny. Program wspiera następujące systemy operacyjne: Windows, Linux oraz MacOS.
Instrukcja instalacji znajduje sie na stronie https://docs.duck.sh/cli/
Przykładowa instalacja z użyciem repozytorium paczek DEB na systemie Ubuntu:
deb https://s3.amazonaws.com/repo.deb.cyberduck.io nightly main
deb https://s3.amazonaws.com/repo.deb.cyberduck.io stable main
echo -e "deb https://s3.amazonaws.com/repo.deb.cyberduck.io stable main" | sudo tee /etc/apt/sources.list.d/cyberduck.list > /dev/null
sudo apt-get update
sudo apt-get install duck
Istnieje możliwość lokalnego zamontowania bucketu S3 w danym systemie (Linux) i korzystania z niego w tradycyjny sposób, tzn. jako lokalny dysk twardy, bez potrzeby korzystania z dodatkowych interfejsów czy aplikacji. Umożliwia to efektowną operacje na plikach z wykorzystaniem Linuxowych komend, takich jak mv
, cp
, rm
czy mkdir
.
UWAGA! Po lokalnym zamontowaniu bucketu S3, zmiany w plikach na zamontowanym buckecie są trwałe!
Popularne programy do lokalnego montowania bucketów S3 w systemach Linux to goofys oraz s3fs.
Przed operacją montowania należy utworzyć plik pod ścieżką ~/.aws/credentials
zawierający dane do uwierzytelniania (Access Key ID oraz Secret Access Key).
Zawartość pliku ~/.aws/credentials
:
[default]
aws_access_key_id = <ACCESS_KEY_ID>
aws_secret_access_key = <SECRET_ACCESS_KEY>
gdzie <ACCESS_KEY_ID>
oraz <SECRET_ACCESS_KEY>
należy zastąpić prawdziwym zestawem kluczy dostępowych (zobacz Sekcję Klucze dostępowe).
Podstawowe użytkowanie programu s3fs
sprowadza się do montowania dysku za pomocą komendy:
$ s3fs <BUCKETNAME> <mountpoint> -o url=<S3_HOST> -o use_path_request_style
gdzie <BUCKETNAME>
to nazwa bucketu, <mountpoint>
to ścieżka, pod którą chce się zamontować bucket (katalog <mountpoint>
powinien istnieć i być pusty), a <S3_HOST>
to adres IP serwera S3 (lub nazwa hosta).
Przykładowo:
$ s3fs test_bucket /home/testuser/local_s3_bucket -o url=https://s3min.e-science.pl -o use_path_request_style
Ponadto, program s3fs
umożliwia obsługę rozszerzonych atrybutów (ang. xattr), w tym celu podczas montowania należy dodać opcję -o use_xattr
, czy szyfrowanie za pomocą protokołu SSE(-C). Więcej informacji o możliwościach programu znajduje się oficjalnej dokumentacji s3fs.
Podstawowe użytkowanie programu goofys
sprowadza się do montowania dysku za pomocą komendy:
$ goofys --endpoint <S3_HOST> <BUCKETNAME> <mountpoint>
gdzie
<BUCKETNAME>
to nazwa bucketu,<mountpoint>
to ścieżka, pod którą chce się zamontować bucket (katalog <mountpoint>
powinien istnieć i być pusty)<S3_HOST>
to adres IP serwera S3 (lub nazwa hosta).Przykładowo:
$ goofys --endpoint https://s3min.e-science.pl test_bucket /home/testuser/local_s3_bucket
UWAGA! Po zakończeniu korzystania z zamontowanego bucketu należy go odmontować!
W przypadku administratorów systemu, można skorzystać z komendy umount
, a w przypadku nieuprzywilejowanych użytkowników, komendy fusermount
:
#### dla administratorów ####
# umount /home/testuser/local_s3_bucket
#### dla użytkowników ####
$ fusermount -u /home/testuser/local_s3_bucket
Na Superkomputerze możliwe jest zamontowanie bucketu S3 z wykorzystaniem programów s3fs oraz goofys, np. w celu transferu plików generowanych (bądź odczytywanych) przez daną aplikację obliczeniową. Montowanie bucketu S3 jest możliwe jedynie na węzłach obliczeniowych (po przydzieleniu zasobów przez system kolejkowy SLURM, np. poprzez zadanie interaktywne), tzn. nie można zamontować bucketu S3 na węźle dostępowym ui.wcss.pl
.
W celu lokalnego zamontowania bucketu S3 na węźle obliczeniowym, należy wykonać następujące czynności:
Uzyskać dostęp do węzła obliczeniowego od systemu kolejkowego SLURM, np. poprzez interaktywne zadanie z wykorzystaniem komendy srun -I
, lub poprzez wysłanie zadania obliczeniowego w formie skryptu sbatch.
Utworzyć katalog .aws
w swoim katalogu domowym (jeśli nie istnieje):
$ mkdir ~/.aws/
~/.aws/credentials
(jeśli nie istnieje):$ vim `~/.aws/credentials`
[default]
aws_access_key_id = ACCESS_KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY
$ mkdir /home/username/local_s3_bucket
s3fs
albo goofys
:s3fs
:$ module load s3fs
goofys
:$ module load goofys
s3fs
albo goofys
:s3fs
:$ s3fs test_bucket /home/testuser/local_s3_bucket -o url=https://s3min.e-science.pl -o use_path_request_style
goofys
:$ goofys --endpoint https://s3min.e-science.pl test_bucket /home/testuser/local_s3_bucket
$ fusermount -u /home/testuser/local_s3_bucket