S3-asiakas
Tässä luvussa kuvataan, kuinka käyttää Allas-objektien tallennuspalvelua s3cmd komentorivikomentojen avulla. Tämä asiakasohjelma käyttää S3-protokollaa, joka eroaa Swift-protokollasta, jota käytetään Rclone, swift ja a-commands esimerkeissä. Yleensä S3:lla ladatut tiedot ovat käytettävissä myös swift-protokollan kanssa. Kuitenkin, yli 5 GB tiedostot, jotka on ladattu swiftillä Allakseen, eivät ole ladattavissa S3-protokollan avulla.
Käyttäjän näkökulmasta yksi suurimmista eroista S3- ja Swift-protokollien välillä on se, että Swift-pohjaiset yhteydet pysyvät voimassa kahdeksan tuntia kerrallaan, kun taas S3:ssa yhteys pysyy pysyvästi avoimena. Pysyvä yhteys on käytännöllinen monin tavoin, mutta sillä on myös turvallisuusnäkökulma: jos CSC-tilisi vaarantuu, vaarantuu myös objektien tallennustila.
s3cmd
-komennon syntaksi:
Yleisimmät s3cmd komennot:
s3cmd komento | Toiminto |
---|---|
mb | Luo ämpäri (bucket) |
put | Lataa objekti |
ls | Listaa objektit ja ämpärit |
get | Lataa objektit ja ämpärit |
cp | Siirrä objekti |
del | Poista objektit tai ämpärit |
md5sum | Hanki tarkistussumma |
info | Näytä metadata |
signurl | Luo väliaikainen URL |
put -P | Aseta objekti julkiseksi |
setacl --acl-grant | Hallitse käyttöoikeuksia |
Yllä oleva taulukko listaa vain olennaisimmat s3cmd komennot. Täydentävämmän listan saamiseksi, vieraile s3cmd käyttöohje tai kirjoita:
S3cmd:n aloittaminen
Jos käytät Allasta Puhtissa tai Mahtissa, kaikki tarvittavat paketit ja ohjelmistot on jo asennettu. Tässä tapauksessa voit ohittaa tämän luvun ja siirtyä osioon S3-yhteyden konfigurointi supertietokoneissa.
Jotta voit konfiguroida s3cmd-yhteyden, sinulla tulee olla OpenStack ja s3cmd asennettuna ympäristöösi.
OpenStack s3cmd asennus:
Fedora/RHEL johdannaiset:
sudo yum update
sudo yum install python3
sudo pip3 install python-openstackclient
sudo yum install s3cmd
sudo apt install python3-pip
sudo pip3 install python-openstackclient
sudo apt install restic
curl https://rclone.org/install.sh | sudo bash
sudo pip3 install s3cmd
Viittaa http://s3tools.org/download ja http://s3tools.org/usage saadaksesi lisätietoa.
S3-yhteyden konfigurointi paikallisessa tietokoneessa
Kun olet asentanut OpenStack ja s3cmd ympäristöösi, voit ladata allas_conf skriptin konfiguroidaksesi S3-yhteyden Allaksen projektiisi.
wget https://raw.githubusercontent.com/CSCfi/allas-cli-utils/master/allas_conf
source allas_conf --mode S3 --user your-csc-username
--user
-asetusta määritelläksesi CSC-käyttäjänimesi. Konfigurointikomento kysyy ensin CSC-salasanasi ja sitten valitsemaan Allas-projektin. Sen jälkeen työkalu luo avain-tiedoston S3-yhteyttä varten ja tallentaa sen oletussijaintiin (.s3cfg kotikansiossa).
S3-yhteyden konfigurointi supertietokoneissa
Jotta voit käyttää s3cmd Puhtissa ja Mahtissa, sinun on ensin konfiguroitava yhteys:
Konfigurointiprosessi kysyy ensin CSC-salasanasi. Sitten se listaa Allas-projektisi ja pyytää valitsemaan käytettävän projektin. Konfigurointitiedot tallennetaan tiedostoon $HOME/.s3cfg. Tämä konfiguraatio tarvitsee määritellä vain kerran. Tulevaisuudessa s3cmd käyttää automaattisesti objektien tallennusyhteyttä, joka on kuvailtu .s3cfg tiedostossa. Jos haluat vaihtaa Allas-projektia, jota s3cmd käyttää, sinun täytyy suorittaa konfigurointikomento uudelleen.Voit käyttää .s3cfg -tiedostoon tallennettuja S3-todennustietoja myös muissa palveluissa. Voit tarkistaa parhaillaan käytössä olevat access key ja secret_key komennolla:
Kun käytät näitä avaimia muissa palveluissa, sinun tulisi varmistaa, että avaimet pysyvät aina yksityisinä. Kuka tahansa, joka pääsee käsiksi näihin kahteen avaimeen, voi käyttää ja muokata kaikkea projektin dataa Allaksessa.Tarvittaessa voit deaktivoida S3-avainparin komennolla:
Luo ämpärit ja lataa objekteja
Luo uusi ämpäri:
Lataa tiedosto ämpäriin:
Listaa objektit ja ämpärit
Listaa kaikki ämpärit projektissa:
Listaa kaikki objektit ämpärissä:
Näytä tietoja ämpäristä:
Näytä tietoja objekteista:
Lataa objektit ja ämpärit
Lataa objekti:
Paramentteri new_file_name on vapaaehtoinen. Se määrittää ladatulle tiedostolle uuden nimen.Komennolla md5sum
voit tarkistaa, ettei tiedosto ole muuttunut tai vioittunut:
$ md5sum my_file new_file_name 39bcb6992e461b269b95b3bda303addf my_file 39bcb6992e461b269b95b3bda303addf new_file_name
Yllä olevassa esimerkissä tarkistussummat täsmäävät alkuperäisen ja ladatun tiedoston välillä.
Lataa koko ämpäri:
Siirrä objekteja
Kopioi objekti toiseen ämpäriin. Huomaa, että näitä komentoja tulisi käyttää vain objekteihin, jotka on ladattu Allakseen S3-protokollalla:
Esimerkiksi:
$ s3cmd cp s3://bigbucket/bigfish s3://my-new-bucket kaukokopio: 's3://bigbucket/bigfish' -> 's3://my-new-bucket/bigfish'
Nimeä tiedosto uudelleen kopioidessasi sitä:
$ s3cmd cp s3://bigbucket/bigfish s3://my-new-bucket/newname kaukokopio: 's3://bigbucket/bigfish' -> 's3://my-new-bucket/newname'
Poista objektit ja ämpärit
Poista objekti:
Poista ämpäri:
Huom: Voit poistaa vain tyhjät ämpärit.s3cmd ja julkiset objektit
Tässä esimerkissä objekti salmon.jpg pseudo-kansiossa kalat tehdään julkiseksi:
$ s3cmd put fishes/salmon.jpg s3://my_fishbucket/fishes/salmon.jpg -P Objektin julkinen URL on: https://a3s.fi/my_fishbucket/fishes/salmon.jpg
Toisen projektin lukuoikeuden antaminen ämpäriin
Voit hallita käyttöoikeuksia komennolla s3cmd setacl
. Tämä komento vaatii projektin UUID (universaali yksilöivä tunniste), jolle haluat myöntää käyttöoikeuden. Projektin jäsenet voivat tarkistaa projektinsa tunnuksen osoitteessa https://pouta.csc.fi/dashboard/identity/ tai käyttämällä komentoa openstack project show
. Esimerkiksi Puhtilla ja Mahtilla:
S3cmd:n tapauksessa luku- ja kirjoitusoikeuksia voidaan hallita sekä kauhoille että objekteille:
Seuraava komento antaa projektin UUID:llä 3d5b0ae8e724b439a4cd16d1290 lukuoikeuden my_fishbucket ämpäriin, mutta ei sen sisällä oleviin objekteihin:
Samalla tavalla seuraava komento antaa kirjoitusoikeuden vain yhdelle objektille: Jos haluat muuttaa kaikkien ämpärin objektien käyttöoikeuksia, voit lisätä komennolle--recursive
-asetuksen:
Voit tarkistaa käyttöoikeudet s3cmd info -komennolla:
$ s3cmd info s3://my_fishbucket|grep -i acl ACL: other_project_uuid: READ ACL: my_project_uuid: FULL_CONTROL
Vaihtoehto --acl-revoke voidaan käyttää lukemis- tai kirjoitusoikeuden poistamiseen:
Jaetut objektit ja ämpärit voidaan käyttää sekä S3- että Swift-pohjaisilla työkaluilla. Huomaa kuitenkin, että listauskomennot näyttävät vain projektisi omistamat ämpärit. Jaettujen ämpärien ja objektien tapauksessa sinun on tiedettävä ämpärien nimet voidaksesi käyttää niitä.
Yllä olevassa esimerkissä käyttäjä projektista 3d5b0ae8e724b439a4cd16d1290 ei näe my_fishbucket, kun se on jaettu, komennolla:
Hän voi kuitenkin listata ämpärin sisällön komennolla: Poutan verkkokäyttöliittymässä käyttäjä voi siirtyä jaettuun ämpäriin määrittämällä ämpärin nimen URL-osoitteessa. Siirry projektiin kuuluvan ämpärin ja korvaa URL-osoitteen lopussa oleva ämpärin nimi jaetun ämpärin nimellä:Käyttöesimerkki
Tässä esimerkissä tallennamme yksinkertaisen tietoaineiston Allakseen käyttäen s3cmd.
Ensiksi luo uusi ämpäri. Komento s3cmd ls
paljastaa, että objektien tallennustila on alussa tyhjä. Käytä sitten komentoa s3cmd mb
luodaksesi uusi ämpäri nimeltään fish-bucket.
$ s3cmd ls ls $ s3cmd mb s3://fish-bucket mb s3://fish-bucket/ Ämpäri 's3://fish-bucket/' luotu $ s3cmd ls ls 2018-03-12 13:01 s3://fish-bucket
On suositeltavaa kerätä tallennettava aineisto suuremmiksi yksiköiksi ja pakata se ennen järjestelmään lataamista.
Tässä esimerkissä tallennamme Bowtie2-indeksit ja seeprakalagenomin (danio rerio) kalojen ämpäriin. ls -lh
-komennon suorittaminen näyttää, että indeksitiedostot ovat saatavilla nykyisessä hakemistossa:
$ ls -lh yhteensä 3.2G -rw------- 1 kkayttaj csc 440M Mar 12 13:41 Danio_rerio.1.bt2 -rw------- 1 kkayttaj csc 327M Mar 12 13:41 Danio_rerio.2.bt2 -rw------- 1 kkayttaj csc 217K Mar 12 13:20 Danio_rerio.3.bt2 -rw------- 1 kkayttaj csc 327M Mar 12 13:20 Danio_rerio.4.bt2 -rw------- 1 kkayttaj csc 1.3G Mar 12 13:13 Danio_rerio.GRCz10.dna.toplevel.fa -rw------- 1 kkayttaj csc 440M Mar 12 14:03 Danio_rerio.rev.1.bt2 -rw------- 1 kkayttaj csc 327M Mar 12 14:03 Danio_rerio.rev.2.bt2 -rw------- 1 kkayttaj csc 599K Mar 12 13:13 log
Kerää ja pakkaa aineisto yhdeksi tiedostoksi tar
-komentoa käyttäen:
Lopputiedoston koko on noin 2 GB. Pakattu tiedosto voidaan ladata kalojen ämpäriin käyttämällä komentoa s3cmd put
:
$ ls -lh zebrafish.tgz -rw------- 1 kkayttaj csc 9.3G Mar 12 15:23 zebrafish.tgz $ s3cmd put zebrafish.tgz s3://fish-bucket put zebrafish.tgz s3://fish-bucket lataus: 'zebrafish.tgz' -> 's3://fish-bucket/zebrafish.tgz' [1 of 1] 2081306836 of 2081306836 100% in 39s 50.16 MB/s valmis $ s3cmd ls s3://fish-bucket ls s3://fish-bucket 2019-10-01 12:11 9982519261 s3://fish-bucket/zebrafish.tgz
2 GB datan lataaminen vie aikaa. Nouda ladattu tiedosto:
Oletusarvoisesti tähän ämpäriin pääsevät vain projektin jäsenet. Kuitenkin käyttämällä komentoa s3cmd setacl
, voit tehdä tiedoston julkisesti saatavilla.
Ensiksi tee kalojen ämpäristä julkinen:
Sitten tee seeprakalagenomi tiedosto julkiseksi:
Tiedoston URL-osoitteen syntaksi:
Tässä tapauksessa tiedosto olisi saatavilla linkin avulla https://a3s.fi/fish-bucket/zebrafish.tgz
Objekteiden julkaiseminen tilapäisesti allekirjoitetuilla URL-osoitteilla
Komennolla s3cmd signurl voidaan Allaksessa oleva objekti julkaista tilapäisesti URL-osoitteella, joka sisältää turvallisuutta lisäävän pääsytunnuksen.
Edellisessä esimerkissä objekti s3://fish-bucket/zebrafish.tgz tehtiin pysyvästi saataville yksinkertaisen staattisen URL-osoitteen kautta. Komennolla signurl voidaan sama objekti jakaa turvallisemmin ja vain rajalliseksi ajaksi. Esimerkiksi komento:
tulostaisi URL-osoitteen, joka säilyy voimassa 3600 s (1 h). Tässä tapauksessa yllä olevan komennon tuottama URL-osoite näyttäisi suunnilleen tältä:https://fish-bucket.a3s.fi/zebrafish.tgz?AWSAccessKeyId=78e6021a086d52f092b3b2b23bfd7a67&Expires=1599835116&Signature=OLyyCY14s%2F0HxKOOd108mldINyE%3D
Objektien elinkaaren määrittäminen
Jotta sinulla olisi mahdollisuus poistaa/vanhentaa objekteja automaattisesti, voit määrittää elinkaarikäytännön Allas-ämpärille. Ämpärissä olevia objekteja käsitellään elinkaarikäytännön mukaisesti, jos vastaavuusehdot täyttyvät. Vastaavuusehdot voidaan asettaa objektin etuliitteelle ja/tai tunnisteille. Elinkaarikäytäntö soveltuu erityisesti tapauksiin, joissa tiedot on poistettava "ylläpitoa" varten tietyin aikavälein.
Varoitus
Ennen kuin määrität elinkaarikäytännön, varmista osastoltasi/tiimiltäsi, että se vastaa projektissa olevan datan säilytyskäytäntöä. (Lailliset tai säädökselliset rajoitukset).
Seuraavassa elinkaarikäytännössä meillä on kaksi sääntöä. Nimetään se mypolicy.xml
.
<?xml version="1.0" ?>
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ID>1-days-expiration</ID>
<Status>Enabled</Status>
<Expiration>
<Days>1</Days>
</Expiration>
<Filter>
<Tag>
<Key>days</Key>
<Value>1</Value>
</Tag>
</Filter>
</Rule>
<Rule>
<ID>30-days-expiration</ID>
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
<Filter>
<Tag>
<Key>days</Key>
<Value>30</Value>
</Tag>
</Filter>
</Rule>
</LifecycleConfiguration>
Vaihtoehtoisesti politiikat voidaan asettaa prefix
-asetuksella, jota voidaan pitää vastaavana kuin kansio
. Molempia menetelmiä voidaan myös yhdistää käyttäen <And>
-tunnistetta.
<?xml version="1.0" ?>
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ID>Daily</ID>
<Status>Enabled</Status>
<Prefix>daily/</Prefix>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
<Rule>
<ID>Weekly</ID>
<Status>Enabled</Status>
<Prefix>weekly/</Prefix>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Asettaaksemme tämän elinkaarikäytännön ämpäriimme käytämme setlifecycle
-alakomento:
Voimme tarkistaa nykyisen käytännön getlifecycle
-alakomennolla:
Tarkista ämpäri (tai objekti) info
-alakomennolla:
s3cmd info s3://MY_BUCKET
s3://MY_BUCKET/ (bucket):
Location: cpouta-production
Payer: BucketOwner
Expiration Rule: objects with key prefix 'weekly/' will expire in '365' day(s) after creation
Policy: none
CORS: none
ACL: project_xxxxxxx: FULL_CONTROL
Jotta objectit voidaan laittaa elinkaarikäytännön alaisiksi, voit hyödyntää tunnisteita ja/tai etuliitteitä.
- Tunnisteiden lisääminen tapahtuu antamalla otsikko muodossa
x-amz-tagging:KEY=VALUE
. - Etuliitettä voidaan ajatella "kansiona".
Katsotaanpa seuraavia tapauksia:
# Pitäisi poistaa 24 tunnin sisällä sääntömäärityksen ID: 1-days-expiration mukaisesti
s3cmd --add-header=x-amz-tagging:days=1 put MY_FILE_01.tar.gz s3://MY_BUCKET/
s3cmd --add-header=x-amz-tagging:days=1 put MY_FILE_02.tar.gz s3://MY_BUCKET/gone-in-one-day/
# Pitäisi poistaa 30 päivän sisällä sääntömäärityksen ID: 30-days-expiration mukaisesti
s3cmd --add-header=x-amz-tagging:days=30 put MY_FILE_03.tar.gz s3://MY_BUCKET/
# Pitäisi poistaa 30 päivän sisällä sääntömäärityksen ID: Daily mukaisesti
s3cmd put MY_FILE_04.tar.gz s3://MY_BUCKET/daily/
# Pitäisi poistaa 365 päivän sisällä sääntömäärityksen ID: Weekly mukaisesti
s3cmd put MY_FILE_05.tar.gz s3://MY_BUCKET/weekly/
Muita viitteitä elinkaaren asettamiseksi:
- RedHat developer guide Ceph storage.
- Creating an intelligent object storage system with Ceph’s Object Lifecycle Management
- Multiple lifecycles - s3cmd
- Yllä olevalle yllättävä merkintä cloud.blog.csc.fi
Rajoita ämpärin pääsyä tiettyihin IP-osoitteisiin
Voit rajoittaa pääsyn ämpäriin tiettyihin IP-osoitteisiin määrittelemällä käytännön.
Varoitus
Muista olla estämättä omaa pääsyäsi ämpäriin, et voi käyttää ämpäriä tai korjata käytäntöä, jos teet niin.
Seuraavassa IP-käytäntöesimerkissä sallimme pääsyn ämpäriin POLICY-EXAMPLE-BUCKET IP-aliverkosta 86.50.164.0/24. Nimetään käytäntötiedosto myippolicy.json
.
{
"Version": "2012-10-17",
"Id": "S3PolicyExample",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::POLICY-EXAMPLE-BUCKET",
"arn:aws:s3:::POLICY-EXAMPLE-BUCKET/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "86.50.164.0/24"
}
}
}
]
}
Asettaaksemme tämän IP-käytännön ämpäriimme käytämme setpolicy
-alakomento:
Nykyisen käytännön voi tarkistaa info
-alakomennolla.
Voimme poistaa nykyisen käytännön delpolicy
-alakomennolla:
```bash s3cmd delpolicy s3://POLICY-EXAMPLE-BUCKET s3://POLICY-EXAMPLE-BUCKET/: Policy deleted