GOOGLE CLOUD STORAGE → STACKIT OBJECT STORAGE · TUTORIAL

Google Cloud Storage naar STACKIT Object Storage

Een Cloud Storage-bucket wordt een STACKIT Object Storage-bucket, en de run schrijft die bucket met zijn naam en niets anders. Versiebeheer, lifecycleregels, CORS, de website-instelling, publieke toegang en locks stelt u in via de S3 API of het project, en de run noemt elke instelling die hij openlaat. Deze tutorial volgt een demo-omgeving met drie buckets van invoer tot takenlijst en toont daarna de aanroepen die de instellingen overbrengen en de limieten die u eerst controleert.

Drie buckets erin, drie buckets eruit

Een demo-omgeving die voor deze pagina is geschreven en op 4 november 2026 door StackToIT is beoordeeld, met de google-provider vastgezet op 8.4.0: een assetbucket met versiebeheer, lifecycleregels en CORS, een bucket die een website voor iedereen serveert en een auditbucket met een vergrendeld retentiebeleid. Links: de assetbucket en de auditbucket uit de invoer. Rechts: de drie bucketblokken die de engine schreef, in bestandsvolgorde; de reviewcommentaren boven elk blok zijn hier weggelaten. De invoerblokken staan in main.tf niet naast elkaar, dus elk heeft een eigen paneel, letterlijk.

Invoer: google_storage_bucket.mediamain.tf
resource "google_storage_bucket" "media" {
  name                        = "media-prod-assets"
  location                    = "EUROPE-WEST3"
  storage_class               = "STANDARD"
  uniform_bucket_level_access = true
  public_access_prevention    = "enforced"

  versioning {
    enabled = true
  }

  lifecycle_rule {
    condition {
      age                = 30
      with_state         = "ARCHIVED"
      num_newer_versions = 3
    }
    action {
      type = "Delete"
    }
  }

  lifecycle_rule {
    condition {
      age = 365
    }
    action {
      type          = "SetStorageClass"
      storage_class = "COLDLINE"
    }
  }

  cors {
    origin          = ["https://www.example.com"]
    method          = ["GET", "HEAD"]
    response_header = ["Content-Type"]
    max_age_seconds = 3600
  }
}
Invoer: google_storage_bucket.auditmain.tf
resource "google_storage_bucket" "audit" {
  name                        = "media-prod-audit"
  location                    = "EUROPE-WEST3"
  uniform_bucket_level_access = true

  retention_policy {
    retention_period = 31536000
    is_locked        = true
  }

  labels = {
    purpose = "audit"
  }
}
STACKIT-Terraform van StackToITterraform/storage.tf
resource "stackit_objectstorage_bucket" "audit" {
  project_id = var.project_id
  name       = "media-prod-audit"
}

resource "stackit_objectstorage_bucket" "media" {
  project_id = var.project_id
  name       = "media-prod-assets"
}

resource "stackit_objectstorage_bucket" "site" {
  project_id = var.project_id
  name       = "media-prod-site"
}
  • De bucketresource is een naam

    De run meldt dat stackit_objectstorage_bucket alleen een naam en een instelling voor object lock heeft. Al het andere van de Google-bucket, van storage class tot retentie, stelt u in via de S3 API of wordt niet overgenomen.

  • Eén eenheid per bucket, één klasse

    Elke bucket is een eigen eenheid, ingedeeld als RECONFIGURE met zekerheidsniveau MEDIUM. Het service account van de demo, dat naar de assetbucket uploadt, is een aparte eenheid en wordt een STACKIT-service account.

  • Bucketnamen zijn niet alleen van u

    Bucketnamen zijn 3 tot 63 tekens lang. Over uniciteit verschillen de STACKIT-pagina’s: de pagina met limieten zegt dat een naam uniek moet zijn binnen het hele systeem, over projecten heen, terwijl de conceptenpagina zegt dat die uniek moet zijn binnen een regio, waarbij EU01 en EU02 onafhankelijk zijn. In beide gevallen kan een naam die op Google Cloud vrij is, hier bezet zijn, dus reserveer hem vroeg; de run vraagt u de naam af te stemmen met de applicaties die hem gebruiken.

Wat het concept niet overneemt

Letterlijke regels uit de commentaren boven de assetbucket en de websitebucket in terraform/storage.tf, daarna de twee bevindingen voor de bucket met versiebeheer en de vergrendelde bucket zoals assessment.json ze bevat, met ingekorte bewijslijsten. De laatste paneel toont de consoleregels van de run.

Commentaarregels in het concept (assetbucket)terraform/storage.tf
# NOT CARRIED (google_storage_bucket.media): lifecycle_rule — stackit_objectstorage_bucket has a name and object_lock only (pinned provider): lifecycle rules (expiry, storage-class transitions) are not generated.
# NOT CARRIED (google_storage_bucket.media): cors — stackit_objectstorage_bucket has no CORS attribute (pinned provider): the CORS configuration is not generated.
# NOT CARRIED (google_storage_bucket.media): storage_class = STANDARD — stackit_objectstorage_bucket has a name and object_lock only (pinned provider): the bucket's storage class, Autoclass, hierarchical-namespace and requester-pays settings are not generated.
Commentaarregels in het concept (websitebucket)terraform/storage.tf
# NOT CARRIED (google_storage_bucket.site): website — stackit_objectstorage_bucket has no static-website setting (pinned provider): the index and error pages are not generated — serve the site through the STACKIT CDN or a web server.
Bevindingen (fragment)assessment.json
{"check_id":"gcs-versioning","severity":"warning","message":"Object versioning is enabled. STACKIT Object Storage supports versioning through the S3 API (put-bucket-versioning; once enabled it can only be suspended), but stackit_objectstorage_bucket has no versioning attribute — enable it after the bucket exists."
{"check_id":"gcs-retention-lock","severity":"info","message":"A retention policy (WORM) is set; STACKIT Object Storage supports object lock — check the retention period against its limits."
Samenvatting in de console (selectie)terminal output
Source        6 resources · 4 units · visibility: Complete
Migration     4 drafted (of 4 units the draft considered)
  • Lifecycle, CORS en storage class

    Drie regels voor de assetbucket: lifecycleregels, CORS en de storage class worden niet gegenereerd. Het zijn kritieke instellingen die openblijven totdat een persoon ze op de bucket instelt of vastlegt dat productie ze niet nodig heeft.

  • De website blijft het werk van een webserver

    STACKIT Object Storage kent geen website-operatie, en de run adviseert de content te serveren via de STACKIT CDN met de bucket als origin, of via een webserver. De namen van de index- en foutpagina staan als niet overgenomen vermeld.

  • Versiebeheer vergt een aanroep na het aanmaken

    STACKIT ondersteunt versiebeheer via de S3 API, maar de bucketresource heeft geen versioning-attribuut, dus u schakelt het in zodra de bucket bestaat. De retentielock is een ander geval: de lock van STACKIT is een eigenschap van de bucket bij het aanmaken.

Cloud Storage instelling voor instelling

Cloud StorageSTACKIT Object StorageWat u doet
Locatie EUROPE-WEST3Regio van de provider, eu01 of eu02Bevestig de residentie; het concept stelt geen regio in op de bucket
Storage class STANDARD, COLDLINE-regelEén klasse; geen transitie gedocumenteerdVergelijk de capaciteitskosten; laat de klasseregel vallen
VersiebeheerPut-bucket-versioning; alleen opschorten, nooit uitschakelenInschakelen na het aanmaken; tot 1.000 versies per object
Verwijderregel op gearchiveerde versiesVerlopen van niet-actuele versies in dagenOpnieuw opbouwen in dagen; een aantal nieuwere versies heeft geen gedocumenteerde tegenhanger
CORS-regelPut-bucket-cors, regels met origins, methoden en headersGoogle geeft response_header terug in zowel Access-Control-Allow-Headers als Access-Control-Expose-Headers, dus vermeld het onder AllowedHeaders en ExposeHeaders
Hoofdpagina en 404 van de websiteNiet vermeld onder de ondersteunde operatiesCDN met de bucket als origin, of een webserver
IAM-member allUsers, objectViewerBucketbeleid met Principal *Alleen opnieuw aanmaken als het nog bedoeld is
IAM-member service account, objectAdminCredentials group en een bucketbeleid dat die noemtInloggegevens gelden voor het project
Vergrendeld retentiebeleid, één jaarObject Lock, ingesteld bij het aanmaken van de bucket, hoogstens 365 dagenVereist eerst een Compliance Lock op projectniveau

Klassen en openstaande instellingen zoals de run ze bepaalde; STACKIT-limieten uit de referentiepagina’s van Object Storage.

De instellingen handmatig overbrengen

Geen engine-uitvoer. De aanroepen volgen de how-to-pagina’s van STACKIT voor versiebeheer, CORS en bucketbeleid, en de Object Lock-pagina voor de auditbucket. De waarden komen uit de demo-invoer.

S3 API-aanroepenshell
# Written by hand from the STACKIT documentation, not engine output.
# Endpoint of region eu01: https://object.storage.eu01.onstackit.cloud
EP=https://object.storage.eu01.onstackit.cloud

# 1. Versioning (media-prod-assets): once enabled it can only be suspended
aws s3api put-bucket-versioning --bucket media-prod-assets \
  --versioning-configuration Status=Enabled --endpoint-url $EP

# 2. CORS (media-prod-assets): cors-rules.json
# response_header in Google is returned as Access-Control-Allow-Headers and
# Access-Control-Expose-Headers (XML API), so list it in both
{
  "CORSRules": [{
    "AllowedOrigins": ["https://www.example.com"],
    "AllowedMethods": ["GET", "HEAD"],
    "AllowedHeaders": ["Content-Type"],
    "ExposeHeaders": ["Content-Type"],
    "MaxAgeSeconds": 3600
  }]
}
aws s3api put-bucket-cors --bucket media-prod-assets \
  --cors-configuration file://cors-rules.json --endpoint-url $EP

# 3. Public read (media-prod-site): policy.json
{
  "Statement": [{
    "Sid": "public-read",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "urn:sgws:s3:::media-prod-site/*"
  }]
}
aws s3api put-bucket-policy --bucket media-prod-site \
  --policy file://policy.json --endpoint-url $EP
Object Lock voor de auditbucketapi
# Written by hand from the STACKIT documentation, not engine output.
# Project level, once: POST .../v1/project/{projectId}/compliance-lock
# Per bucket, at creation only:
POST https://object-storage.api.{region}.stackit.cloud/v1/project/{projectId}/bucket/media-prod-audit?objectLockEnabled=true
# Default retention (applies to objects uploaded after the update):
PUT  .../v1/project/{projectId}/bucket/media-prod-audit/default-retention
{ "mode": "COMPLIANCE", "days": 365 }
  • De lock wordt bij het aanmaken bepaald

    STACKIT geeft aan dat Object Lock alleen kan worden ingeschakeld wanneer de bucket wordt aangemaakt en daarna niet meer kan worden uitgeschakeld. Het project heeft eerst zijn Compliance Lock nodig, en een project met die lock kan niet worden verwijderd. Besluit er vóór de eerste apply over, niet nadat de data erin staat.

  • 365 dagen is het plafond

    De retentieperiode van de demo is 31.536.000 seconden, precies 365 dagen, het maximum aan retentie dat STACKIT voor de Compliance Lock noemt. Een beleid van Google van langer dan een jaar overschrijdt dat maximum. De standaardretentie geldt bovendien alleen voor objecten die na het instellen zijn geüpload; plan er dus op dat gekopieerde objecten hun periode bij het uploaden starten en test dit op een scratchbucket.

  • Inloggegevens gelden voor het hele project

    STACKIT-inloggegevens gelden voor het project, dus één set bereikt elke bucket erin. Gebruik om teams te scheiden credentials groups in bucketbeleid, of aparte projecten. De limiet voor de grootte van het bucketbeleid is 20.480 bytes.

De migratie in volgorde

  1. Inventariseer de buckets en hun clients

    Maak een lijst van buckets, aantallen objecten en groottes, en wie leest of schrijft. Zoek applicaties die de Google-clientbibliotheken of signed URL’s gebruiken: die vergen een codewijziging naar een S3 SDK. De run ziet geen objecten of clients.

  2. Maak buckets aan, bepaal eerst de lock

    Pas de gegenereerde bucketblokken toe in een testproject. Maak elke bucket die Object Lock nodig heeft aan met de lock ingeschakeld bij het aanmaken. Controleer de naam en de regio.

  3. Stel versiebeheer, lifecycle, CORS en beleid in

    Voer de S3 API-aanroepen hierboven uit. Lees elke configuratie terug met de bijbehorende get-aanroep en vergelijk die met de bron.

  4. Maak inloggegevens aan

    Maak Object Storage-inloggegevens aan in het STACKIT-project en vervang de HMAC-sleutels of de toegang via service accounts die applicaties op Google Cloud gebruikten.

  5. Kopieer de data

    Kopieer met een tool die beide kanten spreekt, bijvoorbeeld rclone met een Google Cloud Storage-remote en een S3-remote voor het STACKIT-endpoint; de run noemt rclone als kopieermethode. S3-tools kunnen de bron ook lezen via de XML API met HMAC-sleutels. Voer een bulkkopie uit en bij de cutover een deltakopie. Dit is algemene praktijk, geen stap die de engine uitvoert.

  6. Verifieer, schakel over, bewaar de bron

    Vergelijk aantallen objecten en checksums, schakel de endpoints en sleutels van de applicatie over en houd de Google-buckets alleen-lezen totdat de nieuwe buckets echt verkeer hebben afgehandeld.

Vragen van opslagteams

Hebben de applicaties codewijzigingen nodig?

Clients die al de S3-compatibele XML API met HMAC-sleutels gebruiken, moeten het endpoint en de sleutels wijzigen. Clients die de Google Cloud Storage-bibliotheken via de JSON API gebruiken, en de signed URL’s die daarmee worden gemaakt, schakelen over op een S3 SDK. De run noemt dit als reviewstap.

Kunnen lifecycleregels één op één worden gekopieerd?

Nee. STACKIT documenteert het verlopen van actuele objecten en van niet-actuele versies, in dagen, met filters op prefix en tag, tot 1.000 regels. Overgangen tussen storage classes en aantallen nieuwere versies staan niet in die referentie, dus die regels bouwt u opnieuw op of laat u vallen.

Wat gebeurt er met de statische website?

STACKIT Object Storage kent geen website-operatie. Serveer de content via de STACKIT CDN met de bucket als origin of via een webserver, en maak het publieke leesbeleid alleen opnieuw aan als het nog bedoeld is.

Verhuist het vergrendelde retentiebeleid mee?

Niet als instelling. Object Lock wordt ingeschakeld wanneer een bucket wordt aangemaakt, vereist de Compliance Lock van het project en staat hoogstens 365 dagen toe. Vergelijk uw retentiebehoefte daarmee voordat u kiest.

Bronnen

Uw volgende stap: STACKIT.

Vertel ons over uw omgeving, dan laten wij zien wat StackToIT daarvoor oplevert: doelarchitectuur, Terraform-artefacten en een gestructureerd migratieplan.

Laat uw gegevens achter, onze specialisten nemen contact met u op.

Liever zelf een e-mail sturen? connect@stacktoit.com

Wij gebruiken uw gegevens alleen om dit verzoek te beantwoorden en een mogelijke pilot te bespreken. Privacyverklaring