Vi har utvecklat en guide för våra Binero Cloud-kunder för att skydda deras säkerhetskopior med säker molnlagring. Denna guide gäller alla molnanvändare som vill säkerställa att deras säkerhetskopior inte kan raderas av misstag eller av obehöriga. I guiden beskriver vi en lösning som använder Binero Clouds object storage, som är API-kompatibel med AWS S3, för att skapa en säker och låst backupmiljö.
Jämför din nuvarande lösning med vår process – det kan finnas mer du kan göra för att skydda dina säkerhetskopior. Följ stegen nedan för att se hur du kan implementera samma lösning och öka säkerheten för dina data.
Bakgrund
Våra kunder sökte en lösning för att lagra sina säkerhetskopior säkert. Kravet var att säkerhetskopiorna måste skyddas så att de inte kan raderas, varken av misstag eller av obehöriga som får tillgång till systemet.
Säker molnlagring med object storage i Binero Cloud
Som en del av vår ambition att alltid säkerställa säker molnlagring för våra kunder, erbjuder Binero Cloud object storage som är API-kompatibel med AWS S3. Detta gör det möjligt att låsa objekt. Funktionen kräver att bucketen där filerna lagras är konfigurerad för detta.
Genom att följa stegen nedan kunde vi säkerställa att datan i molnet lagrades säkert – med extra säkerhet i säkerhetskopiorna.
Exempel
Här är ett exempel på hur raderade objekt fortsätter att existera utan att vara synliga i gränssnittet och inte kan raderas förrän en konfigurerad tidsgräns har passerat. Kommandon som interagerar med Binero Cloud är markerade för att returnera data i JSON-format med hjälp av jq-verktyget.
Förberedelser
Generera autentiseringsuppgifter
Autentiseringsuppgifter genereras i EC2-format för användning med AWS-klienten och tilldelas miljövariabler för interaktion med object storage.
$ read -r AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
<<<$(jq -r '"\\(.access)\\(.secret)"'
<(openstack ec2 credentials create -f json))
Läsa ut API-adress
API-adressen för object storage hämtas från Binero Clouds tjänstekatalog. Den sista delen av URL:en tas bort eftersom den pekar på Swift API, vilket inte är relevant.
$ AWS_ENDPOINT_URL=$(openstack catalog list -f json
| jq -r '.[] |select(.Type=="object-store") |.Endpoints[] |select(.interface=="public").url'
| cut -d/ -f1-3)
Exportera miljövariabler
Alla variabler görs tillgängliga för AWS-klienten, som måste vara installerad. Buckets namn lagras också i en variabel. Observera att AWS endast används som klient för att interagera med S3 i Binero Cloud (AWS_ENDPOINT_URL - där alla data lagras).
$ export AWS_ENDPOINT_URL AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
$ export BACKUP_BUCKET=bup
Verifiera förberedelser
För framtida manuell interaktion eller automation kan de tre AWS-specifika värdena lagras på filsystemet. Se till att filerna inte har öppna rättigheter. Filsystemkonfiguration ignoreras om den aktiva miljön är korrekt konfigurerad.
-
Information i API:t
$ openstack ec2 credentials show $AWS_ACCESS_KEY_ID -c access -c secret
+--------+----------------------------------+
| Field | Value |
+--------+----------------------------------+
| access | d7855ef4cce44ec692c966e6cc10262d |
| secret | fd3004c7e25240b2b07a931b76b757e5 |
+--------+----------------------------------+ -
Information i miljön:
$ env | grep AWS
AWS_SECRET_ACCESS_KEY=
AWS_ACCESS_KEY_ID=
AWS_ENDPOINT_URL=https://object-eu-se-1a.binero.cloud
$ env | grep BACKUP
BACKUP_BUCKET=bup -
Information i klienten
$ aws configure list
Name Value Type Location
---- ----- ---- --------
profile None None
access_key ****************262d env
secret_key ****************57e5 env
region None None
Skapa bucket
En bucket skapas som vanligt, med en lagringspolicy och LocationConstraint. Vi väljer europe-se-1 i vårt exempel för att möjliggöra replikering om en policy som stödjer detta har valts.
$ aws s3api create-bucket
--bucket $BACKUP_BUCKET
--create-bucket-configuration LocationConstraint=europe-se-1
--object-lock-enabled-for-bucket
Konfigurera låsningsmekanism
Lagringsläget är konfigurerat till en av två varianter: COMPLIANCE eller GOVERNANCE. COMPLIANCE ger högsta säkerhetsnivå, eftersom även administratörer inte kan radera objekt inom den satta tidsgränsen, i detta fall mindre än 24 timmar.
$ aws s3api put-object-lock-configuration --bucket $BACKUP_BUCKET
--object-lock-configuration '{"ObjectLockEnabled": "Enabled", "Rule": {"DefaultRetention": {"Mode": "COMPLIANCE", "Days": 1}}}'
Verifiera bucket
Möjligheten att låsa objekt baseras på versionshantering av objekt.
Existens
$ aws s3api list-buckets | jq '.Buckets[] | select(.Name == env.BACKUP_BUCKET)'
{
"Name": "bup",
"CreationDate": "2024-04-10T10:28:18.146000+00:00"
}
Versionshantering
$ jq .Status <(aws s3api get-bucket-versioning --bucket $BACKUP_BUCKET)
"Enabled"
Ladda upp fil
Filen tux.svg lagras i bucketen.
$ aws s3 cp tux.svg s3://$BACKUP_BUCKET
upload: ./tux.svg to s3://bup/tux.svg
Verifiera existens av objekt
Säkerställ att objektet returneras som det enda objektet i lagringen.
$ aws s3 ls $BACKUP_BUCKET
2024-04-10 12:31:11 49983 tux.svg
Vi inspekterar sedan metadata som lagras av API:t.
$ aws s3api list-objects --bucket $BACKUP_BUCKET
{
"Contents": [
{
"Key": "tux.svg",
"LastModified": "2024-04-10T10:31:11.177000+00:00",
"ETag": "\\"8a6487c7872a9b825c8f2d4533067c6d\\"",
"Size": 49983,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "*******",
"ID": ""
}
}
],
"RequestCharged": null
}
Radera objekt
När objektet raderas skapas en DeleteMarker. Objektet verkar vara raderat men är egentligen dolt. Observera VersionId som refererar till backupen.
$ aws s3api delete-object --bucket $BACKUP_BUCKET --key tux.svg
{
"DeleteMarker": true,
"VersionId": "mc-Yai46SHaLrf4xqeJGgT1.3ry6bUZ"
}
Lista objekten i bucketen, antingen som nedan eller med annat gränssnitt, och objektet är inte synligt – objektet tux.svg verkar ha raderats. Inget returneras – inte ens av API:t.
$ aws s3 ls $BACKUP_BUCKET
$ aws s3api list-objects --bucket $BACKUP_BUCKET
{
"RequestCharged": null
}
Backupen är intakt
Om vi däremot listar versionerna av objekten kan vi se att objektet fortfarande finns. Vad som hände när objektet raderades var att en DeleteMarker skapades.
$ aws s3api list-object-versions --bucket $BACKUP_BUCKET
{
"Versions": [
{
"ETag": "\\"8a6487c7872a9b825c8f2d4533067c6d\\"",
"Size": 49983,
"StorageClass": "STANDARD",
"Key": "tux.svg",
"VersionId": "-IrCCqAYQt5ySttlBnI6VEw2jpw6f2.",
"IsLatest": false,
"LastModified": "2024-04-10T10:31:11.177000+00:00",
"Owner": {
"DisplayName": "*******",
"ID": ""
}
}
],
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "*******",
"ID": ""
}
"Key": "tux.svg",
"VersionId": "mc-Yai46SHaLrf4xqeJGgT1.3ry6bUZ",
"IsLatest": true,
"LastModified": "2024-04-11T08:25:42.985000+00:00"
}
],
"RequestCharged": null
}
Återställ raderade objekt
Det smarta med en DeleteMarker är att om den raderas, återställs filen!
$ aws s3api delete-object --bucket $BACKUP_BUCKET --key tux.svg
--version-id "mc-Yai46SHaLrf4xqeJGgT1.3ry6bUZ"
{
"DeleteMarker": true,
"VersionId": "mc-Yai46SHaLrf4xqeJGgT1.3ry6bUZ"
}
$ aws s3api list-objects --bucket $BACKUP_BUCKET
{
"Contents": [
{
"Key": "tux.svg",
"LastModified": "2024-04-10T10:31:11.177000+00:00",
"ETag": "\\"8a6487c7872a9b825c8f2d4533067c6d\\"",
"Size": 49983,
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "*******",
"ID": ""
}
}
],
"RequestCharged": null
}
Om en gärningsman – även med kunskap om versionshantering – skulle försöka radera backupen, skulle försöket misslyckas. När tidsgränsen väl har passerat kan versionen raderas – men aldrig innan!
$ aws s3api delete-object --bucket $BACKUP_BUCKET
--key tux.svg
--version-id "\\-IrCCqAYQt5ySttlBnI6VEw2jpw6f2\\." Ett fel uppstod (AccessDenied) vid anrop till
DeleteObject-operationen: förbjudet av object lock
Slutsats: säker molnlagring av säkerhetskopior
Detta exempel visar hur du kan lagra dina säkerhetskopior säkert i Binero Clouds object storage och säkerställa att de förblir intakta även om obehöriga får tillgång till dem. Säker molnlagring – världsklass!


