English version of this page

Sikkerhetsaspekter rundt objektlagring

Av Markus Syse, Endre Holmboe
Publisert 9. feb. 2024
Innholdsfortegnelse

Passordpolicy

Brukere med tilgang til webgrensesnittet (CMC) vil automatisk f? varsel om ? skifte passord n?r det n?rmer seg et ?r siden sist. Vi oppfordrer brukere til ? samtidig rotere sine n?kkelpar, b?de systembrukerens hovedn?kkel og eventuelle opprettede IAM-n?kler.
Dette gj?res enkelt ved ? opprette et nytt n?kkelpar, og slette det forrige.

For r?de b?tter roterer vi rutinemessig n?klene tilh?rende systembrukere som eier b?ttene, men vi mangler system for rutinemessig rotering av IAM-n?klene som deles ut til sluttbruker.
Det vil komme en oppdatering her s? snart det lar seg gj?re.

 

Databeskyttelse

Vi har tre alternativer for databeskyttelse:

  1. Versjonering av objekter
  2. Tradisjonell backup til annet lagringssystem
  3. Replikering til separat Cloudian-instans

Versjonering
Som en sikkerhetsmekanisme er det satt p? automatisk versjonering for objekter i sllr nye b?tter. Dette betyr at n?r et objekt overskrives, vil den forrige versjonen bli bevart i inntil 7 dager f?r den slettes. Dette fungerer som et midlertidig sikkerhetsnett, tilsvarende snapshots i tradisjonell filbasert lagring.

Dersom et objekt overskrives ved en feil, kan man enkelt gjenopprette en tidligere versjon ved hjelp av aws cli. Prosessen best?r av ? liste tilgjengelige versjoner, hente ut ?nsket versjon, og eventuelt kopiere den tilbake til samme plassering:

#Bruk:
# List alle tilgjengelige versjoner av et objekt 
aws s3api list-object-versions --bucket <b?ttenavn> --key "<sti/til/objekt>" 

# Last ned ?nsket versjon basert p? versjons-ID 
aws s3api get-object --bucket <b?ttenavn> --key "<sti/til/objekt>" --version-id <versjons-id> <lokal-filnavn> 

# Alternativt: kopier versjonen direkte tilbake til sin opprinnelige plassering 
aws s3 cp <lokal-filnavn> s3://<b?ttenavn>/<sti/til/objekt>


#Eksempel
$ aws s3api list-object-versions --bucket markusor-test --prefix gitconfig

{
    "Versions": [
        {
            "ETag": "\"b470a6232d5f484883231ed8154a1041\"",
            "Size": 158,
            "StorageClass": "STANDARD",
            "Key": "gitconfig",
            "VersionId": "fe0fde1e-e75a-648f-bf15-b4a9fc44b3f6",
            "IsLatest": true,
            "LastModified": "2025-04-25T14:25:11.335000+00:00",
            "Owner": {
                "ID": "55fde869c0ab3e9eeb30b2ed42442455"
            }
        },
        {
            "ETag": "\"804e365569fece4ac42df1cbe457c712\"",
            "Size": 191,
            "StorageClass": "STANDARD",
            "Key": "gitconfig",
            "VersionId": "fe0fde1e-ed20-aa0f-bf15-b4a9fc44b3f6",
            "IsLatest": false,
            "LastModified": "2025-04-25T14:25:01.647000+00:00",
            "Owner": {
                "ID": "55fde869c0ab3e9eeb30b2ed42442455"
            }
        }
    ],
    "RequestCharged": null,
    "Prefix": ""
}


## Laser ned tidligere versjon (IsLatest = False"):

$ aws s3api get-object --bucket markusor-test --key gitconfig \
    --version-id fe0fde1e-ed20-aa0f-bf15-b4a9fc44b3f6
{
    "AcceptRanges": "bytes",
    "LastModified": "2025-04-25T14:25:01+00:00",
    "ContentLength": 191,
    "ETag": "\"804e365569fece4ac42df1cbe457c712\"",
    "VersionId": "fe0fde1e-ed20-aa0f-bf15-b4a9fc44b3f6",
    "CacheControl": "private, max-age=0, no-cache, no-store",
    "ContentType": "binary/octet-stream",
    "Metadata": {}
}

## S? kan man eventuelt gj?re den gjeldende ved ? laste opp igjen:

$ aws s3 cp gitconfig s3://markusor-test/
upload: ./gitconfig to s3://markusor-test/gitconfig

For mange kan dette v?re god nok databeskyttelse i seg selv, men merk at versjonering ikke kan anses som god nok beskyttelse for s?rbare data som skal lagres over lang tid.

Tradisjonell backup lagrer en full kopi samt. inkrementelle endringer p? b?tten én gang i d?gnet til en off-site lokasjon. Standard retensjonstid er p? 90 dager.
Backup er inkludert i prising for UiO-baserte brukere, men for ?vrig UH-sektor vil backup faktureres etter BaaS-priser for standard retensjon.

Til slutt har vi en separat, virtuell Cloudian-instans som kan benyttes for ? laste opp samme data til to separate steder. Denne instansen har derimot sv?rt begrenset kapasitet, og er en tjeneste vi kun tilbyr for de aller mest kritiske dataene.

 

Sikring av aksessn?kler p? klienten

Per default lagres konfigurerte n?kkelpar i klartekst under ~/.aws/credentials. I utgangspunktet er tilgangen til disse sperret ned til eieren av hjemmeomr?det, men det anbefales ? kryptere n?kkelfila slik at uvedkommede ikke ogs? f?r tilgang til objektlagringen dersom maskinen blir hacket. Dette er spesielt viktig dersom det lagres sensitive data i b?ttene.

I credentialsfila kan man i stedet for n?klene angi en parameter som vil peke p? et skript som henter dem ut

[default] 
region = oslo 
credential_process = /sti/til/skript

credential_process forventer en JSON-output p? f?lgende format:

{
  "Version": 1, 
  "AccessKeyId": "AKIA0123456787EXAMPLE",
  "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
}

P? denne m?ten kan vi opprette et skript som enten dekrypterer en kryptert n?kkelfil, eller henter ned n?kler fra f.eks Vault, Enpass, eller annet passordhvelv. Se under.

 

1. Kryptering + dekrypteringsskript

Denne metoden krever kun at man har et standard krypteringsverkt?y som OpenSSL, og et par linjer med shellkode. Derfor er det tilgjengelig ut av boksen p? de aller fleste Unix-systemer.

Start med ? opprette en JSON-fil med n?klene i formatet over, og krypter det med openssl med f?lgende ops