VOOR ELKE CLOUD · SECRETS EN KMS
Migratie van secrets, encryptie en KMS naar STACKIT
Sleutels en secrets verhuizen niet naar STACKIT, ze worden opnieuw aangemaakt. Sleutelmateriaal dat in een cloud-KMS is gegenereerd, kan niet worden geëxporteerd. Daarom wordt elke dataset die door de sleutel wordt beschermd, opnieuw versleuteld met een nieuwe STACKIT KMS-sleutel en worden secretwaarden opnieuw in STACKIT Secrets Manager geschreven. Rotatiejobs, aliassen en SSE-KMS op buckets hebben geen één-op-één-tegenhanger. Deze gids volgt een AWS-omgeving door een StackToIT-run en laat zien wat het concept overneemt, wat het aan u overlaat en in welke volgorde u werkt.
De migratie, in volgorde
1. Sleutels, secrets en hun consumers inventariseren
Som elke sleutel op met de resources die hem gebruiken (databases, buckets, secrets), en elk secret met de applicaties die het lezen. De run leest de verbanden uit de Terraform, dus de consumers van een sleutel zijn zichtbaar voordat er iets is gebouwd.
2. De keyring en de sleutel aanmaken
STACKIT KMS groepeert sleutels in keyrings. Een symmetrische sleutel gebruikt AES-256-GCM; er bestaan ook asymmetrische sleutels en sleutels voor ondertekenen en MAC. Op dit moment is alleen softwarebescherming beschikbaar, en het beschermingsniveau is een variabele die het concept aan u overlaat.
3. Bepalen wie bij de sleutel kan
Het toegangsbereik van de sleutel is PUBLIC of SNA. De bronsleutel noemt geen netwerk, dus de run laat de variabele zonder standaardwaarde; als u niets instelt, maakt de STACKIT API de sleutel openbaar.
4. De data opnieuw versleutelen
Data die met de oude sleutel is beschermd, wordt in de nieuwe dienst geladen en daar versleuteld. Voor PostgreSQL Flex koppelt het concept de instance aan de nieuwe sleutel; de dienst accepteert die instelling alleen voor geactiveerde accounts, dus vraag toegang aan vóór de apply.
5. De secrets opnieuw aanmaken
Het concept maakt één Secrets Manager-instance en een gebruiker met schrijfrechten; de waarden zelf worden door een API-stap geschreven uit een document dat u aanlevert. Verwijder daarna de schrijvergebruiker.
6. De instance zo nodig met een sleutel versleutelen
Secrets Manager kan de waarden van een instance met een KMS-sleutel versleutelen, ingesteld via de API (de portal kan dat nog niet configureren), met een serviceaccount dat minstens de rol Secrets Manager Reader heeft (docs). De run legt vast dat het één sleutel is voor alle secretwaarden van de instance, niet één per secret.
7. Rotatie vervangen
Geen van beide diensten roteert voor u: KMS maakt een nieuwe sleutelversie aan wanneer u Rotate key activeert, wat de documentatie beschrijft als een bestelling tegen betaling, en Secrets Manager kent geen automatische rotatie. De taak die de rotatiefunctie van de bron deed, wordt uw taak, en de run meldt dat.
8. De applicaties omschakelen
Applicaties stappen over van de cloud-SDK naar een Vault-compatibele client of ontvangen secrets via het platform, bijvoorbeeld External Secrets Operator op SKE. Zoek secrets op via hun nieuwe pad.
Een sleutel en een secret, omgezet
Een omgeving voor deze pagina, op 4 november 2026 beoordeeld door StackToIT. Links: een KMS-sleutel met een alias, een secret met een waarde en een rotatieregel, en een parameter. Rechts: de STACKIT-blokken van security.tf (reviewopmerkingen weggelaten). De alias, de rotatieregel en de secretwaarde hebben geen blok; het concept noemt de reden in de reviewopmerkingen.
resource "aws_kms_key" "data" {
description = "data encryption key"
enable_key_rotation = true
deletion_window_in_days = 30
}
resource "aws_kms_alias" "data" {
name = "alias/data"
target_key_id = aws_kms_key.data.key_id
}
resource "aws_secretsmanager_secret" "db" {
name = "prod/orders/db"
kms_key_id = aws_kms_key.data.arn
}
resource "aws_secretsmanager_secret_version" "db" {
secret_id = aws_secretsmanager_secret.db.id
secret_string = jsonencode({ username = "orders", password = var.db_password })
}
resource "aws_secretsmanager_secret_rotation" "db" {
secret_id = aws_secretsmanager_secret.db.id
rotation_lambda_arn = "arn:aws:lambda:eu-central-1:111122223333:function:rotate-db"
rotation_rules {
automatically_after_days = 30
}
}
resource "aws_ssm_parameter" "feature_flags" {
name = "/prod/orders/feature-flags"
type = "SecureString"
value = "checkout_v2=on"
}resource "stackit_kms_keyring" "migrated" {
project_id = var.project_id
display_name = "migrated-keys"
}
resource "stackit_kms_key" "data" {
project_id = var.project_id
keyring_id = stackit_kms_keyring.migrated.keyring_id
display_name = "data-encryption-key"
algorithm = "aes_256_gcm"
purpose = "symmetric_encrypt_decrypt"
protection = var.kms_protection
access_scope = var.kms_access_scope == "SNA" ? "SNA" : null
}
resource "stackit_secretsmanager_instance" "migrated_secrets" {
project_id = var.project_id
name = "migrated-secrets"
}
resource "stackit_secretsmanager_user" "migration" {
project_id = var.project_id
instance_id = stackit_secretsmanager_instance.migrated_secrets.instance_id
description = "StackToIT migration user: writes the migrated secrets; delete it afterwards"
write_enabled = true
}Een sleutel, geen kopie
De AWS-sleutel wordt een keyring en een AES-256-GCM-sleutel. Het concept merkt op dat AWS-sleutelmateriaal niet kan worden geëxporteerd, dus data die met de oude sleutel is versleuteld, wordt tijdens de migratie opnieuw versleuteld.
Rotatie en alias worden niet overgenomen
stackit_kms_key heeft in de vastgezette provider geen rotatieattribuut en geen alias. De sleutel roteert nooit uit zichzelf, en clients die de sleutel via een alias benaderden, moeten de nieuwe sleutel-ID gebruiken.
Eén instance bevat de secrets
Het secret en de parameter komen in één Secrets Manager-instance. De customer key van het secret is niet op de instance ingesteld, omdat de parameter in dezelfde instance geen sleutel noemt; u stelt die in zodra de sleutels van de bronnen zijn bepaald.
De schrijver is een tijdelijke gebruiker
De migratiegebruiker heeft schrijftoegang tot de secrets engine van de hele instance. De eigen beschrijving van het concept zegt dat u die moet verwijderen nadat de secrets zijn geschreven.
Wat wordt gekoppeld en wat aan u wordt overgelaten
| Bron | STACKIT-doel | Klasse en wat niet wordt overgenomen |
|---|---|---|
| KMS-sleutel met rotatie aan | KMS-keyring en -sleutel | RECONFIGURE: sleutelmateriaal kan niet worden geëxporteerd; rotatie wordt niet overgenomen, een rotatie wordt een operationeel proces (de sleutelversie wordt in elke decrypt-aanroep genoemd). |
| KMS-alias | Geen alias op de sleutel | Niet overgenomen: clients moeten de nieuwe sleutel-ID gebruiken. |
| Secret met waarde en rotatiefunctie | Secrets Manager-instance, waarde geschreven door een API-stap | RECONFIGURE: de waarde komt uit een document dat u aanlevert; de rotatiefunctie wordt niet overgenomen en Secrets Manager roteert zelf niets. |
| SecureString-parameter | Secrets Manager | RECONFIGURE: een naam met een slash vooraan wordt een pad zonder slash, dus opzoeken op naam is een beslissing. |
| Database versleuteld met een customer key | PostgreSQL Flex met een encryptieblok | REPLATFORM: geladen in de nieuwe instance en versleuteld met de nieuwe sleutel; alleen beschikbaar voor geactiveerde accounts. |
| Bucket met SSE-KMS | Object Storage | REDESIGN, zekerheidsniveau LOW: geen versleuteling op basis van KMS; accepteer platformversleuteling of lever per aanvraag uw eigen sleutels. |
Klassen zoals de run ze heeft bepaald. De sleutelversie maakt deel uit van een STACKIT decrypt-aanroep, waar de bronservice er geen nodig heeft.
De bucket die geen KMS-modus heeft
Uit dezelfde run. Een bucket die met een customer key is versleuteld, is de enige eenheid die de run naar redesign stuurt. Links: hoe assessment.json hem vastlegt, samen met de sleuteleenheid (id, klasse, zekerheidsniveau en doel; de bevinding staat hieronder samengevat). Rechts: het bucketblok dat het concept schrijft, zonder enige sleutel.
{
"id": "aws_s3_bucket.exports",
"class": "REDESIGN",
"confidence": "LOW",
"target": {
"service": "STACKIT Object Storage"
}
}
{
"id": "aws_kms_key.data",
"class": "RECONFIGURE",
"confidence": "MEDIUM",
"target": {
"service": "STACKIT KMS"
}
}resource "stackit_objectstorage_bucket" "exports" {
project_id = var.project_id
name = "acme-orders-exports"
}Wat de run vond
De run legt vast dat STACKIT Object Storage maar twee versleutelingsmodi documenteert, AES-256 at rest en SSE-C. Een test op een STACKIT-project in eu01 op 2026-10-16 zag de put-encryption-aanroep met 501 antwoorden voor aws:kms en een object-put met aws:kms met 400, dus dat een bewerking wordt genoemd betekent niet dat de modus wordt ondersteund.
Twee opties
Accepteer platformversleuteling at rest, of laat clients bij elke aanvraag SSE-C-sleutels meegeven. Dat laatste is een redesign van de versleuteling en van elke client die schrijft.
De sleutel blijft elders
Het concept legt geen verband tussen de bucket en de nieuwe sleutel. Bepaal vóór de cutover, niet erna, of de exports gevoelig genoeg zijn om SSE-C te rechtvaardigen.
De database gekoppeld aan de nieuwe sleutel
De PostgreSQL-instance van dezelfde run. Links: de AWS-database met zijn customer key. Rechts: het instanceblok dat het concept schrijft, met een encryptieobject dat naar de nieuwe sleutel, sleutelversie en het serviceaccount wijst.
resource "aws_s3_bucket_server_side_encryption_configuration" "exports" {
bucket = aws_s3_bucket.exports.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = aws_kms_key.data.arn
}
}
}
resource "aws_db_instance" "orders" {
identifier = "orders-db"
engine = "postgres"
engine_version = "15.7"
instance_class = "db.m5.large"
allocated_storage = 100
username = "orders"
password = var.db_password
storage_encrypted = true
kms_key_id = aws_kms_key.data.arn
skip_final_snapshot = true
}resource "stackit_postgresflex_instance" "orders" {
project_id = var.project_id
name = "orders-db"
version = "15"
flavor_id = "2.16"
storage = {
class = var.postgresflex_storage_class
size = 108
}
backup_schedule = "0 2 * * *"
network = {
acl = var.orders_allowed_cidrs
access_scope = var.orders_access_scope == "SNA" ? "SNA" : null
}
encryption = {
kek_key_id = stackit_kms_key.data.key_id
kek_key_version = tostring(var.data_key_version)
kek_keyring_id = stackit_kms_keyring.migrated.keyring_id
service_account = var.data_service_account
}
retention_days = 32
}Variabelen voor de identiteit
De sleutelversie en het serviceaccount dat de KMS-bewerkingen uitvoert, zijn variabelen die u instelt. De run noemt wat het object nodig heeft, niet welk account u gebruikt.
Eerst toegang, daarna apply
De dienst accepteert dit object alleen voor geactiveerde accounts en wijst de aanvraag anders af. De run meldt het als waarschuwing bij de eenheid.
Data verhuist via dump of replicatie
De nieuwe instance is leeg en vanaf het begin versleuteld; het dataplaybook behandelt hoe die wordt gevuld.
Beslissingen van de architect
Openbare sleutel of sleutel in een network area
Het bereik van elke sleutel, per sleutel bepaald. Het concept kent geen standaardwaarde.
Eén sleutel of meerdere
Secrets Manager accepteert één sleutel per instance. Als secrets verschillende sleutels gebruikten, bepaal dan welke een instance delen.
Rotatieproces
Wie sleutels en secrets roteert, hoe vaak en met welke job. KMS-rotatie maakt op verzoek een nieuwe sleutelversie aan; een AppRole-secret-ID roteert u zonder onderbreking door een nieuwe te genereren, de workload daarop te laten wijzen, de login te controleren en de oude te verwijderen (docs).
Verwijdering van oude sleutels
Een STACKIT-sleutel die u verwijdert, wordt na 30 dagen gewist. Bewaar de oude cloudsleutels tot geen back-up of snapshot ze meer nodig heeft; die regel is gangbare praktijk, geen bevinding van de run.
Bucketversleuteling
Platformversleuteling of SSE-C, zoals hierboven.
Vragen over secrets en KMS
Kan ik mijn bestaande sleutel importeren in STACKIT KMS?
STACKIT KMS kan een extern aangemaakte sleutel importeren, gebonden aan een sleutelversie. De run meldt dat sleutelmateriaal dat in AWS KMS is gegenereerd niet kan worden geëxporteerd, dus plant hij een nieuwe sleutel en het opnieuw versleutelen van de data.
Roteert Secrets Manager secrets?
Nee. De run legt vast dat er geen automatische rotatie is, dus de logica van de rotatiefunctie van de bron moet worden herbouwd als job tegen de nieuwe opslag.
Is Secrets Manager compatibel met Vault-clients?
De run beschrijft het als een Vault-compatibele key-valuestore, en de STACKIT-provider documenteert het schrijven van secrets met de HashiCorp Vault-provider. Applicaties stappen over van de cloud-SDK naar een Vault-client.
Welke sleutel versleutelt de secrets?
Het concept stelt geen kms_key-blok in op deze instance, en de gelezen pagina's zeggen niet welke sleutel zonder blok geldt. Een KMS-sleutel stelt u in via de API; de portal kan dat nog niet configureren. Als u later de sleutelversie wijzigt, worden de al opgeslagen secrets automatisch opnieuw versleuteld.
Welke grenzen heeft een Secrets Manager-instance?
De documentatie noemt maximaal 100 gebruikers en 10.000 API-aanroepen per uur per instance, en geen vaste serviceplannen.
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
Hartelijk dank.
Uw verzoek is bij ons binnengekomen. Onze specialisten nemen contact met u op.