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.
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
}
}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"
}
}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.
# 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.# 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.{"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."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 Storage | STACKIT Object Storage | Wat u doet |
|---|---|---|
| Locatie EUROPE-WEST3 | Regio van de provider, eu01 of eu02 | Bevestig de residentie; het concept stelt geen regio in op de bucket |
| Storage class STANDARD, COLDLINE-regel | Eén klasse; geen transitie gedocumenteerd | Vergelijk de capaciteitskosten; laat de klasseregel vallen |
| Versiebeheer | Put-bucket-versioning; alleen opschorten, nooit uitschakelen | Inschakelen na het aanmaken; tot 1.000 versies per object |
| Verwijderregel op gearchiveerde versies | Verlopen van niet-actuele versies in dagen | Opnieuw opbouwen in dagen; een aantal nieuwere versies heeft geen gedocumenteerde tegenhanger |
| CORS-regel | Put-bucket-cors, regels met origins, methoden en headers | Google 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 website | Niet vermeld onder de ondersteunde operaties | CDN met de bucket als origin, of een webserver |
| IAM-member allUsers, objectViewer | Bucketbeleid met Principal * | Alleen opnieuw aanmaken als het nog bedoeld is |
| IAM-member service account, objectAdmin | Credentials group en een bucketbeleid dat die noemt | Inloggegevens gelden voor het project |
| Vergrendeld retentiebeleid, één jaar | Object Lock, ingesteld bij het aanmaken van de bucket, hoogstens 365 dagen | Vereist 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.
# 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# 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
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.
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.
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.
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.
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.
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
- Concepten van STACKIT Object Storage
- Limieten van STACKIT Object Storage
- STACKIT: referentie van de lifecycleconfiguratie
- STACKIT: Object Lock aanmaken en beheren
- STACKIT: bucketbeleid beheren
- STACKIT Object Storage: ondersteunde operaties op buckets en objecten
- Google Cloud: Cross-origin resource sharing (CORS)
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
Hartelijk dank.
Uw verzoek is bij ons binnengekomen. Onze specialisten nemen contact met u op.