Blog

KMS-Schlüssel und -Geheimnisse für mehrere Regionen in AWS

Bruno Schaatsbergen

Aktualisiert Oktober 16, 2025
4 Minuten

In diesem Beitrag möchte ich Ihnen eine kurze Einführung geben, wie Sie KMS-Schlüssel und -Geheimnisse in Secret Manager über mehrere Regionen hinweg bereitstellen können. Dabei nutzen wir die Replikation, um Verschwendung zu vermeiden und uns nicht zu wiederholen.

KMS-Schlüssel für mehrere Regionen

Im Juli letzten Jahres hat AWS KMS-Schlüssel für mehrere Regionen eingeführt. Eine neue Funktion, mit der Sie Schlüssel von einer Region in eine andere replizieren können. Mit multiregionalen Schlüsseln können Sie verschlüsselte Daten einfacher zwischen Regionen verschieben, ohne sie entschlüsseln und mit unterschiedlichen Schlüsseln in jeder Region neu verschlüsseln zu müssen. Um einen multiregionalen KMS-Schlüssel in Terraform zu erstellen, setzen wir einfach multi_region auf true in der Ressource aws_kms_key.

resource "aws_kms_key" "mrk" {
  description         = "Multi-region key for Secrets Manager"
  enable_key_rotation = true
  multi_region        = true
}

Wir werden auch einen Alias für unseren KMS-Schlüssel für mehrere Regionen erstellen, um die zusätzliche Komplexität der Arbeit mit der KMS-Schlüssel-ID selbst zu verringern.

data "aws_region" "current" {}

resource "aws_kms_alias" "mrk_alias" {
  name          = "alias/${data.aws_region.main.name}-secrets-manager"
  target_key_id = aws_kms_key.mrk.key_id
}

Ich habe den name mit dem Namen der Region interpoliert, auf die wir unseren aws Provider verweisen. Normalerweise mache ich das, um eine gewisse Konsistenz bei der Benennung meiner regionsübergreifenden Ressourcen zu erreichen. Nachdem wir nun den multiregionalen KMS-Schlüssel und den KMS-Schlüssel-Alias in eu-central-1 bereitgestellt haben, ist es an der Zeit, einen multiregionalen Replikat-KMS-Schlüssel zu erstellen.

Mehrregionale Replik KMS-Schlüssel

Ein regionsübergreifender Replikatschlüssel ist ein KMS-Schlüssel, der dieselbe Schlüssel-ID und dasselbe Schlüsselmaterial wie sein Primärschlüssel und die zugehörigen Replikatschlüssel hat, aber in einer anderen Region existiert. Ein Replikatschlüssel ist ein voll funktionsfähiger KMS-Schlüssel mit eigener Schlüsselpolitik, eigenen Grants, Alias, Tags und anderen Eigenschaften. Er ist keine Kopie oder ein Verweis auf den Primärschlüssel oder einen anderen Schlüssel. Sie können einen Replikationsschlüssel auch dann verwenden, wenn sein Primärschlüssel und alle zugehörigen Replikationsschlüssel deaktiviert sind. Sie können auch einen Replikationsschlüssel in einen Primärschlüssel und einen Primärschlüssel in einen Replikationsschlüssel umwandeln.Um einen Replikationsschlüssel für mehrere Regionen zu erstellen, verwenden wir die Ressource . Wir verweisen einfach auf unseren übergeordneten KMS-Schlüssel, den wir zuvor erstellt haben, und übergeben der Ressource einen anderen Anbieter.

resource "aws_kms_replica_key" "euw1_mrk" {
  description = "Multi-region replica key for Secrets Manager in eu-west-1"
  primary_key_arn = aws_kms_key.mrk.arn

  provider = aws.replica
}

Bitte beachten Sie das provider = aws.replica, es ist ein zweiter Provider, den ich in meinem provider.tf konfiguriert habe und der ein alias verwendet, um auf eine andere Region zu verweisen.

provider "aws" {
  region = "eu-central-1"
}

provider "aws" {
  alias = "replica"
  region = "eu-west-1"
}

Um die Arbeit mit der KMS-Schlüssel-ID selbst nicht noch komplizierter zu machen, erstellen wir auch einen KMS-Schlüssel-Alias für den Replikationsschlüssel für mehrere Regionen.

resource "aws_kms_alias" "euw1_mrk_alias" {
  name          = "alias/${data.aws_region.replica.name}-secrets-manager"
  target_key_id = aws_kms_replica_key.euw1_mrk.key_id

  provider = aws.replica
}

Führen Sie terraform plan - apply aus und Sie werden sehen, dass die gleiche KMS-Schlüssel-ID in
in beiden Regionen gleich ist.

Ein Geheimnis schaffen

Großartig, jetzt, wo beide KMS-Schlüssel für mehrere Regionen in den jeweiligen Regionen verfügbar sind, ist es an der Zeit, damit herumzuspielen. Ich werde ein Beispielgeheimnis erstellen, um die KMS-Entschlüsselung in beiden Regionen mit derselben KMS-Schlüssel-ID zu testen.

resource "aws_secretsmanager_secret" "example" {
  name = "name-of-secret-string"

  kms_key_id = aws_kms_key.mrk.id

  replica {
    kms_key_id = aws_kms_key.euw1_mrk.id
    region     = data.aws_region.replica.name
  }
}

resource "aws_secretsmanager_secret_version" "example" {
  secret_id     = aws_secretsmanager_secret.example.id
  secret_string = "actual-secret-string"
}

Auch terraform plan - apply dies. Um zu überprüfen, ob die Replikation des Geheimnisses erfolgreich war, sollte das Geheimnis in der Ausgabe eine ähnliche Name und KmsKeyId haben.

bruno ~> aws secretsmanager list-secrets --region eu-central-1 | jq '.SecretList[] | .Name, .KmsKeyId'
"name-of-secret-string"
"mrk-4c5359f5ab511673b6471d1df3bf3182"
bruno ~> aws secretsmanager list-secrets --region eu-west-1 | jq '.SecretList[] | .Name, .KmsKeyId'
"name-of-secret-string"
"mrk-4c5359f5ab511673b6471d1df3bf3182"

Entschlüsseln Sie das Geheimnis

Ich habe eine verwaltete IAM-Richtlinie erstellt, die eine Anweisung enthält, die es mir ermöglicht, den KMS-Schlüssel anhand seiner ID zu entschlüsseln. Sie könnten diese verwaltete Richtlinie zu der Rolle hinzufügen, die der Workload in Ihrer primären und sekundären Region einnimmt, damit Sie das Geheimnis vom Secrets Manager abrufen können.

bruno ~> aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:eu-west-1:123456789101:secret:name-of-secret-string-vWenRf  --region eu-west-1 | jq .SecretString
"actual-secret-string"

Um dies kurz zusammenzufassen, haben wir uns damit beschäftigt, wie Sie KMS-Schlüssel für mehrere Regionen erstellen und den Replikat-KMS-Schlüssel für mehrere Regionen in einer anderen Region verwenden können, ohne mehrere völlig isolierte Ressourcen über die Regionen hinweg zu verwalten. Bitte beachten Sie, dass Geheimnisse im Secrets Manager nur einer der vielen Dienste sind, die von KMS verwaltet werden können. Ich würde Ihnen raten, in einer regionenübergreifenden Architektur mit KMS-Schlüsseln für mehrere Regionen herumzuspielen.

Verfasst von

Bruno Schaatsbergen

Bruno is an open-source and serverless enthusiast. He tends to enjoy looking for new challenges and building large scale solutions in the cloud. If he's not busy with cloud-native architecture/development, he's high-likely working on a new article or podcast covering similar topics. In his spare time he fusses around on Github or is busy drinking coffee and exploring the field of cosmology.

Contact

Let’s discuss how we can support your journey.