Hyppää sisältöön

Significant changes to Puhti & Mahti authentication coming in April! Read about the SSH key and multi-factor authentication requirements.

Asiakaspuolen salaustyökalut Allakselle

Allasta ei ole sertifioitu korkeatasoiseksi turvallisuusalustaksi, joten sitä ei pidä käyttää luottamuksellisen datan tallentamiseen luettavassa muodossa. Kuitenkin, jos luottamuksellinen data salataan asianmukaisesti ennen sen siirtämistä objektivarastoon, sitä voidaan tallentaa Allakseen.

Luottamuksellisen datan osalta suosittelemme yleensä SD Connect -palvelua, joka tarjoaa verkkokäyttöliittymiä ja komentorivitoimintoja, jotka salaavat datan automaattisesti sen tallennuksen yhteydessä Allakseen.

Jos jostain syystä et halua käyttää SD Connectia, alla on joitain vaihtoehtoisia lähestymistapoja luottamuksellisen datasi tallentamiseen Allakseen. Kun käytät Allasta näiden salausvälineiden kanssa, muista, että:

  1. Voit tallentaa salattua luottamuksellista dataa Allakseen, mutta sen purkaminen on sallittua vain riittävän turvallisissa ympäristöissä. Esimerkiksi CSC:n HPC-ympäristö (eli Puhti, Mahti, LUMI) ei ole tarpeeksi turvallinen luottamukselliselle datalle.

  2. Käytä tarpeeksi vahvoja salasanastoja salaukseen ja säilytä ne turvassa.

  3. Jos unohdat salasanan, data on menetetty. CSC ei voi antaa sinulle uutta salasanaa datasi lukemiseen, koska salasana on määritetty sinun eikä CSC:n toimesta.

1. Yksittäisen tiedoston tai hakemiston salaaminen a-put:lla

Jos asennat allas-cli-utils koneeseen, jota käytät, voit käyttää a-put:ia vaihtoehdolla --encrypt salataksesi tiedoston tai hakemiston, jonka haluat ladata Allakseen. Voit käyttää joko symmetristä (eli salasanan) salausta gpg avulla tai epäsymmetristä avainpohjaista salausta crypt4gh avulla. Gpg on saatavilla useimmissa linux-järjestelmissä, kun taas crypt4gh ei ole niin laajalti käytössä, joten saatat joutua asentamaan sen paikalliseen järjestelmääsi, jos haluat käyttää epäsymmetristä salausta.

Huomaa, että oletuksena a-put luo lisämetatiedosto-objektin, joka sisältää tietoa ladatuista tiedostoista. Kun --encrypt vaihtoehtoa käytetään, varsinainen datasisältö salataan, mutta metatieto-objekteja (_ameta tiedostot) ei salata. Jos tiedostonimiä ei tule tallentaa luettavassa muodossa, metatieto-objektien luonti tulisi kytkeä pois päältä käyttämällä a-put:ia vaihtoehdolla --no-ameta.

Symmetrinen gpg-salaus

Symmetrinen gpg-salaus voidaan suorittaa komennolla:

a-put --encrypt gpg data_dir -b my_allas_bucket

Kun vaihtoehto --encrypt gpg on käytössä, data salataan gpg-komennolla käyttämällä AES256 salausalgoritmia, jota yleensä pidetään riittävän hyvänä luottamukselliselle datalle. Kun suoritat komennon, se kysyy salaus salasanaa ja salasana varmistusta. Tässä lähestymistavassa vain tiedoston tai hakemiston sisältö salataan. Objektin nimi ja metatiedot jäävät ihmisen luettavaan muotoon.

Kun haet dataa a-get:lla, sinulta kysytään salaus salasanaa, jotta objekti voidaan purkaa latauksen jälkeen.

a-get my_allas_bucket/data_dir.tar.zst.gpg

Epäsymmetrinen crypt4gh-salaus

Jos haluat käyttää epäsymmetristä crypt4gh-salausta, sinulla on oltava julkinen avaintiedosto salausta varten ja salainen avaintiedosto purkamista varten. Puhtissa sinun täytyy ensin tehdä crypt4gh käytettäväksi komennolla:

module load allas
Nyt voit luoda avaimet komennolla:
crypt4gh-keygen --sk allaskey.sec --pk allaskey.pub
Data voidaan nyt ladata Allakseen komennolla:
a-put --encrypt c4gh --pk allaskey.pub data_dir -b my_allas_bucket
Yllä oleva komento salaa ensin datan käyttäen crypt4gh:ta ja julkista avainta ja sitten lataa salatun datan Allakseen. Huomaa, että salaus ei tarvitse salaisuutta avainta. Voit toimittaa julkisen avaimen toiselle palvelimelle (ja toiselle käyttäjälle) niin, että data voidaan turvallisesti ladata Allakseen ulkoisesta turvallisesta sijainnista. Salainen avain tarvitaan vain ympäristössä, johon data ladataan alas Allaksesta:
a-get --sk allaskey.sec my_allas_bucket/data_dir.tar.zst.c4gh
Yllä oleva komento lataa salatun objektin Allaksesta, kysyy salaisen avaimen salasanaa ja purkaa sitten datan luettavaan muotoon.

2. Salausarkiston luominen rclone:lla

rclone:lla on asiakaspuolen salausominaisuus, joka mahdollistaa salatun data-arkiston luomisen Allakseen. Tässä lähestymistavassa sinun on ensin määritettävä salattu rclone-yhteys Allakseen, ja kun tätä yhteyttä käytetään, kaikki siirrettävä data salataan automaattisesti. rclone:n automaattinen salaus perustuu Salsa20 suoravirta-salaimeen. Salsa20 ei ole yhtä laajalti käytetty kuin AES256, mutta se on yksi niistä salausvälineistä, joita Euroopan eSTREAM projekti on suositellut.

Tässä esimerkissä oletetaan, että käytät palvelinta, jossa sinulla on rclone ja allas-cli-utils asennettu. Ensimmäinen tehtäväsi on määrittää normaali, salaamaton Swift-yhteys Allakseen. Tämä voidaan tehdä allas-cli-utils pakettiin sisältyvällä allas-conf skriptillä:

source allas-cli-utils/allas_conf -u your-csc-username -p your-csc-project-name

Kun olet määrittänyt normaalin Swift-yhdyskäytävän Allakseen, voit määrittää salatun säiliön Allas-alueellesi. Alkaaksesi määritysprosessin, suorita komento rclone config.

allas-conf skripti on jo luonut rclone-määritystiedoston, jossa rclone remote on nimetty allas.

Ensimmäisenä vaiheena valitse vaihtoehto: n luodaksesi uuden remote:n. Määritysprosessi pyytää nimeämään uuden rclone remote:n. Tässä tapauksessa uusi remote nimetään allas-crypt:ksi.

[kkayttaj@puhti-login11 ~]$ rclone config
Current remotes:

Name                 Type
====                 ====
allas                swift

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> n
name> allas-crypt

Seuraavaksi määritysprosessi kysyy, määritätkö tallennustyypin. Valitse vaihtoehto 10 Encrypt/Decrypt a remote.

Storage> 10

Seuraavassa vaiheessa sinun pitää määrittää Allaksen säiliö, jota käytetään salattua dataa varten. Kun määrität säiliön, huomaa, että sinun on määritettävä sekä säiliö että sivusto (eli rclone-yhteyden nimi), jossa säiliö sijaitsee. Allaksen tapauksessa etäyhteyden nimi on allas:. Varsinainen säiliön nimi tulee olla ainutlaatuinen kaikkien Allas-käyttäjien kesken. Tässä tapauksessa käytämme määritelmää allas:2001659-crypt, joka määrittelee, että salattu data tallennetaan Allakseen säiliöön 2001659-crypt.

Remote to encrypt/decrypt.
Normally should contain a ':' and a path, eg "myremote:path/to/dir",
"myremote:bucket" or maybe "myremote:" (not recommended).
Enter a string value. Press Enter for the default ("").
remote> allas:2001659-crypt

Seuraavaksi määritysprosessi kysyy, salataanko objektien ja hakemistojen nimet. Tässä tapauksessa salaa nimet, joten valitset 1 molemmissa tapauksissa.

Tämän jälkeen sinun täytyy määritellä kaksi salasanaa: pääsalisana ja niin sanottu suola_salasana. Tätä salasanojen paria käytetään salaukseen. Voit määrittää nämä salasanat itse tai antaa määritysprosessin luoda ne. Joka tapauksessa säilytä käytetyt salasanat turvallisesti. Muut käyttäjät ja palvelimet saattavat tarvita niitä myös. Nyt asetus on valmis ja rclone remote:lle on määritelty uusi etäyhteys nimeltä _allas-crypt. Voit nyt sulkea määritysprosessin.

Nykyiset etäyhteydet:

Name                 Type
====                 ====
allas                swift
allas-crypt          crypt

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>q

Nyt arkisto on valmis käytettäväksi. Sanotaan, että sinulla on hakemisto nimeltä job_6, joka sisältää joitain tiedostoja ja hakemistoja:

[kkayttaj@puhti-login11 ~]$ ls job_6
hello.xrsl  results  results.1601291937.71  runhello.sh

Voit nyt ladata tämän hakemiston sisällön salattuun säiliöön.

rclone copy job_6 allas-crypt:job_6
Data on nyt kopioitu Allakseen ja voit tarkistaa ladatut tiedostot komennolla:

rclone ls allas-crypt:job_6
       77 runhello.sh
       11 results.1601291937.71/std.out
       86 results.1601291937.71/std.err
      117 hello.xrsl
       11 results/std.out
       86 results/std.err

allas-crypt remote kääntää datan salatusta säiliöstä (allas:2001659-crypt) automaattisesti luettavaan muotoon. Jos kuitenkin tutkit suoraan salatun säiliön sisältöä, huomaat, että objektin nimet sekä tallennettu data ovat salatussa muodossa:

[kkayttaj@puhti-login11 ~]$ rclone ls allas:2001659-crypt
      125 4lpbj55pc5v8t119q0tp2o6k58/36sb832och3tde30k9nlks3dpo
       59 4lpbj55pc5v8t119q0tp2o6k58/90alcaodph3386197agf252t5b97f144n88e99m9ire5tcpqu380/flqitnrsrc8iloggbc4ouagukg
      134 4lpbj55pc5v8t119q0tp2o6k58/90alcaodph3386197agf252t5b97f144n88e99m9ire5tcpqu380/gvie6dv3s50v32qptl30960me4
      405 4lpbj55pc5v8t119q0tp2o6k58/a6rlk2hr489roehagfu6iest38
      165 4lpbj55pc5v8t119q0tp2o6k58/kmqnruv14agevg6okod0io2fl0
       59 4lpbj55pc5v8t119q0tp2o6k58/o515vd0l1bp270v7gdc7m3tpbo/flqitnrsrc8iloggbc4ouagukg
      134 4lpbj55pc5v8t119q0tp2o6k58/o515vd0l1bp270v7gdc7m3tpbo/gvie6dv3s50v32qptl30960me4
      352 4lpbj55pc5v8t119q0tp2o6k58/p87n5ins7g0hvfh06r6o6a91n0

Vastaavasti komento:

rclone copy allas-crypt:job_6/hello.xrsl ./
Lataa ja purkaa salatun hello.xrsl-tiedoston Allaksesta paikalliselle levylle.

Allas-yhteyksien määritykset tallennetaan oletuksena rclone-määritystiedostoon $HOME/.config/rclone/rclone.conf-hakemistoon.

Tässä tapauksessa allas-crypt määrittävä osa määritystiedostossa voisi näyttää tältä:

[allas-crypt]
type = crypt
remote = allas:2001659-crypt
filename_encryption = standard
directory_name_encryption = true
password = A_JhQdTOEIx0ajyWb1gCvD2z0gBrEVzy41s
password2 = UgmByNqlnb8vCZrFgpaBtUaQrgJkx30
Määritys sellaisenaan ei ole sidottu mihinkään tiettyyn palvelimeen tai käyttäjätunnukseen. Yhteyden salaamaan säiliöön voi avata kuka tahansa, jolla on 1) pääsy Allas-projektiin ja 2) samat asetukset (mukaan lukien salasanat) omassa rclone-määritystiedostossaan. Tämä on kätevää, kun tarvitaan salattua tietovarastoa, jota voivat käyttää useat luotetut henkilöt ja sivustot. Tämä aiheuttaa kuitenkin potentiaalisia turvallisuusongelmia, koska samaa salasanaa käyttää useat käyttäjät. Lisäksi määritystiedostossa salasanat ovat vain hämärretyt, mutta eivät salattuja.

Turvallisuuden parantamiseksi rclone-määritystiedosto voidaan salata. Tämä voidaan tehdä suorittamalla rclone conf-komento uudelleen. Tässä tapauksessa valitse s siirtyäksesi Set configuration password -kohtaan ja sitten a lisätäksesi salasanan. Salasanan asettamisella on kaksi vaikutusta:

  1. rclone-määritystiedosto muunnetaan salattuun muotoon.
  2. Jokaisella rclone-komennolla, sinun on annettava määritystiedoston salasana, jotta rclone voi lukea asetukset.

Toinen ominaisuus voi olla melko ärsyttävää, erityisesti jos käytät pääasiassa normaalia, salaamatonta Allas-yhteyttä. Tästä syystä voi olla järkevämpää luoda erillinen rclone-määritystiedosto salattua Allas-käyttöä varten ja sitten, kun salausta tarvitaan, määritellä salatun määritystiedoston käyttö rclone-vaihtoehdolla --config.

Esimerkiksi:

Tee kopio olemassa olevasta rclone-määritystiedostosta (ennen kuin määrität yllä kuvatun salatun yhteyden).

cp $HOME/.config/rclone/rclone.conf $HOME/rc-encrypt.conf
Suorita sitten rclone config-komento lisätäksesi salatulle Allas-säiliölle määritystiedot ja sitten salataksesi määritystiedoston. Voit tehdä molemmat vaiheet yhdessä rclone config-sessiossa.
rclone config --config $HOME/rc-encrypt.conf
Määritystiedoston salausavain voi ja sen tulee olla henkilökohtainen.

Nyt voit käyttää suojattua määritystiedostoasi rclone-komennon kanssa. Esimerkiksi:

rclone copy --config $HOME/rc-encrypt.conf job_6 allas-crypt:job_6

Restic - Varmuuskopiointityökalu, joka sisältää salauksen

Restic on varmuuskopiointiohjelma, joka voi käyttää Allasta varmuuskopioidun datan tallennustilana. Sen sijaan, että data tuodaan suoraan, restic tallentaa datan hash-kokoelmina. Tämä ominaisuus mahdollistaa datasetien tehokkaan tallennuksen, jotka sisältävät pieniä muutoksia. Näin datasetin eri versiot voidaan tallentaa niin, että uuden datasetin version myötä vain muutokset edelliseen versioon verrattuna on tallennettava. Tämä lähestymistapa mahdollistaa myös aiempien versioiden hakemisen, ei vain uusimman version.

Hashauksen lisäksi restic salaa datan käyttääen AES256-salainta. Allas-spesifi varmuuskopiointityökalu, allas-backup (saatavilla Puhtissa ja Mahtissa) perustuu restic:iin, mutta käyttää kiinteää, ennalta määriteltyä salasanointia, jota ei tule käyttää, jos korkeaa turvallisuustasoa vaaditaan. Tällaisissa tapauksissa voit käyttää restic:ia suoraan.

Käyttääksesi Allasta restic:in tallennuspaikkana, avaa ensin yhteys Allakseen. Kun aloitat restic:in käytön ensimmäistä kertaa, sinun täytyy määrittää restic-arkisto. Arkiston määrittely sisältää protokollan (swift tässä tapauksessa), sijainnin, joka on säiliön nimi Allaksen tapauksessa, ja ennakkomäärityksen tallennetuille dataobjekteille. Esimerkiksi:

restic init --repo swift:123_restic:/backup
enter password for new repository: ************
enter password again: ************

created restic repository a70df2ced1 at swift:123_restic:/backup

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Alustamisprosessi kysyy salasanointia arkistoon.

Nyt voit varmuuskopioida tiedoston tai hakemiston Restic-arkistoon Allaksessa. Alla olevassa esimerkissä hakemisto my_data on varmuuskopioitu.

 restic backup --repo swift:123_restic:/backup my_data/
enter password for repository: ************
repository a70df2ce opened successfully, password is correct
created new cache in /users/kkayttaj/.cache/restic

Files:         258 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 2.018 MiB

processed 258 files, 2.027 MiB in 0:00
snapshot a706c054 saved

Muokattuasi yhtä tiedostoa my_data hakemistossa teemme toisen varmuuskopion:

restic backup --repo swift:123_restic:/backup my_data/
enter password for repository: ************
repository a70df2ce opened successfully, password is correct

Files:           0 new,     1 changed,   257 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Added to the repo: 1.154 KiB

processed 258 files, 2.027 MiB in 0:00
snapshot e3b46fe2 saved

Komennolla restic snapshots voimme nähdä, että meillä on kaksi versiota my_data:sta varmuuskopioarkistossa:

restic snapshots --repo swift:123_restic:/backup 
enter password for repository: ************
repository a70df2ce opened successfully, password is correct
ID        Time                 Host          Tags        Paths
-------------------------------------------------------------------------------------------
a706c054  2021-02-12 14:43:03  r07c52.bullx              /run/nvme/job_4891841/data/my_data
e3b46fe2  2021-02-12 14:47:18  r07c52.bullx              /run/nvme/job_4891841/data/my_data
-------------------------------------------------------------------------------------------
2 snapshots

Jos haluaisimme palauttaa ensimmäisen version, voisimme ladata sen snapshot-id:llä ja komennolla restic restore.

restic restore --repo swift:123_restic:/backup a706c054 --target ./ 
enter password for repository: ************
repository a70df2ce opened successfully, password is correct
found 3 old cache directories in /users/kkmattil/.cache/restic, run `restic cache --cleanup` to remove them
restoring  to ./

Varsinainen data tallennetaan salattuina hash-objekteina, jotka ovat käytettävissä muille Allas-työkaluille. Esimerkiksi data, joka tallennettiin restic:lla säiliöön 123_restic yllä olevassa esimerkissä näyttää tältä, kun se listataan rclone:lla:

rclone ls allas:123_restic
      155 backup/config
     1349 backup/data/26/263a8a412486d0fe6278ec1992c3b2dc64352041ca4236de0ddab07a30e7f725
  2133179 backup/data/46/4643d0d98ef90363629561828a3c113c2ca1acbdefcd3ef0f548724501c1e8f3
   108646 backup/data/77/77f36c6b6f7b346010d76e6709c8e3e4a61a7bc25dce4ffee726fe2a9b208e48
      895 backup/data/b7/b757b4f8b370a3f7199d717128f8bcb90139c589b761d2d6e683cbb3943c32e9
      550 backup/index/3b824311bf222eb9131e83dc22b76ee1686a41deff8db73912a6ec4b58ec7c9c
    32326 backup/index/9e7e8858bc9e8cdcd96f7020ad9f1246629e3a80b2008c1debec30ac21c2b717
      458 backup/keys/9f47c0adcdaa29d1e89eab4763fbcf9269c834b6590b45fd9a0ac079e2ee483e
      272 backup/snapshots/a706c054a77edba31337669ebd851c80f34dfbc3ca92255dee1ff0c0cad8cedf
      348 backup/snapshots/e3b46fe293fae187a53296f8cde25f7aec9f896e4586d96ac4df78ba27cdd911