Einführung
Am 22. Februar 2024 hat Amazon Web Services (AWS) angekündigt, dass sich Parameter aus dem Systems Manager Parameter Store nun kontoübergreifend teilen lassen.
Für den Parameter Store ist das neu – der AWS Secrets Manager hingegen unterstützt kontoübergreifende Secrets schon von Anfang an. Stellt sich also die Frage: Sollten Sie zum Speichern und Teilen von Secrets künftig auf den Parameter Store statt auf den Secrets Manager setzen?
Dieser Artikel beleuchtet die Unterschiede zwischen Secrets Manager und Parameter Store und führt Schritt für Schritt durch das Anlegen und kontoübergreifende Teilen eines verschlüsselten Parameters.
Secrets Manager vs. verschlüsselte Parameter
Secrets Manager – Funktionen und Grenzen
- Secrets werden automatisch mit KMS-Schlüsseln verschlüsselt
- Secrets lassen sich automatisch rotieren
- Maximale Secret-Größe von 64 KB
- Secrets können über die Web-Konsole, CLI, CloudFormation, Terraform usw. angelegt werden
- Secrets lassen sich automatisch über Regionen hinweg replizieren
- Unterstützt bis zu 10.000
GetSecretValue-Anfragen pro Sekunde - Erreichbar aus einer großen Bandbreite an AWS-Services sowie Drittanbietern wie Hashicorp Vault
- Kosten: 0,40 USD pro Secret und Monat; 0,05 USD pro 10.000 API-Aufrufe
- Secrets lassen sich teilen, indem man die Resource Policy des Secrets anpasst
Parameter Store – Funktionen und Grenzen
- Parameter lassen sich mit KMS-Schlüsseln verschlüsseln, sofern der Parametertyp
SecureStringverwendet wird - Eine automatische Rotation ist nicht vorgesehen
- Maximale Größe für Advanced-Parameter: 8 KB
SecureString-Parameter lassen sich nicht über CloudFormation anlegen, wohl aber über die Web-Konsole, CLI, Terraform usw.- Parameter sind regional gebunden, eine automatische Replikation gibt es nicht
- Unterstützt bis zu 10.000
GetParameter-Anfragen pro Sekunde (standardmäßig 40) - Erreichbar aus einer kleineren Auswahl an AWS-Services
- Kosten: 0,05 USD pro geteiltem Parameter und Monat; 0,05 USD pro 10.000 API-Aufrufe
- Parameter lassen sich über den Resource Access Manager (RAM) teilen
Sowohl Secrets Manager als auch Parameter Store funktionieren übrigens mit doitintl/secrets-init – einem Open-Source-Tool, das die Anbindung von Secrets-Management-Diensten an workloads auf Kubernetes-Clustern vereinfacht. Mehr Hintergründe dazu finden Sie in diesem Blogpost.
Welcher Dienst passt für welchen Zweck?
Für die Speicherung von Secrets bleibt der Secrets Manager die erste Wahl. Er wurde von Beginn an genau dafür konzipiert, ist breit in zahlreiche Services integriert und bringt Funktionen wie automatische Rotation und eine größere maximale Secret-Größe mit als der Parameter Store.
Den Parameter Store für das Teilen von Secrets in Erwägung zu ziehen, kann sich dennoch lohnen, wenn:
- Sie eine sehr große Anzahl an Secrets verwalten und die Kostenersparnis spürbar ins Gewicht fällt (0,05 USD vs. 0,40 USD pro Secret und Monat)
- Sie bereits geheime Parameter im Parameter Store pflegen und die Zusatzfunktionen des Secrets Managers nicht benötigen
Verschlüsselten Secret-Parameter anlegen und teilen
Die Parameter-Store-Dokumentation enthält eine Schritt-für-Schritt-Anleitung zum Anlegen und Teilen eines Parameters. Bei einem SecureString-Parameter ist das Vorgehen ähnlich – allerdings muss zusätzlich auch der KMS-Schlüssel geteilt werden, mit dem der Parameter verschlüsselt wurde.
1. Schlüssel in KMS anlegen
Erstellen Sie zunächst einen symmetrischen KMS-Schlüssel in AWS, mit dem der Parameter verschlüsselt werden soll. Die vollständige Anleitung dazu finden Sie bei AWS.

Screenshot aus dem Erstellungsprozess eines KMS-Schlüssels. Ein Alias ist optional, aber empfehlenswert.
Ergänzen Sie in der Policy dieses Schlüssels eine Bedingung, die anderen Konten die Nutzung erlaubt. Möchten Sie Schlüssel und Parameter innerhalb Ihrer gesamten AWS Organization teilen, lässt sich dafür eine Condition in der Policy nutzen, wie in diesem AWS re:Post-Artikel beschrieben.

Screenshot der finalen Übersichtsseite beim Anlegen eines KMS-Schlüssels
2. Advanced-Parameter im Parameter Store anlegen
Sobald der KMS-Schlüssel steht, legen Sie den Parameter im Parameter Store an, wie von AWS hier beschrieben.
Wählen Sie die Parameter-Stufe Advanced, den Typ SecureString und den zuvor erstellten KMS-Schlüssel aus.

Nur Advanced-Parameter lassen sich teilen! Falls Sie versehentlich einen Standard-Parameter ausgewählt haben, ist das halb so wild – Sie können das im Nachhinein anpassen.
3. Parameter über den Resource Access Manager (RAM) teilen
Öffnen Sie nach dem Anlegen des Parameters den Resource Access Manager und legen Sie einen neuen Resource Share für den Parameter an, wie von AWS hier beschrieben.
Verwenden Sie im Schritt Associate managed permissions die Policy AWSRAMDefaultPermissionsSSMParameterReadOnly und tragen Sie im Schritt Grant access to principals alle Konten ein, die Zugriff auf den Parameter erhalten sollen (oder bei Bedarf Ihre gesamte AWS Organization).

Beachten Sie: Die hier dem Resource Share zugewiesenen Tags ändern nicht die Tags des Parameters selbst.

Die Berechtigung AWSRAMDefaultPermissionsSSMParameterReadOnly genügt, wenn ausschließlich Lesezugriff gewünscht ist.

In diesem Beispiel erhält nur die Konto-ID 123456789012 Zugriff auf den geteilten Parameter. Tragen Sie nicht das Konto ein, in dem der Parameter ohnehin schon liegt.

Der letzte Schritt ist lediglich eine Übersichtsseite.
4. Resource Share annehmen
Sobald der Resource Share angelegt ist, müssen die externen Konten die Einladung gegebenenfalls noch annehmen.
Liegen die Zielkonten in Ihrer AWS Organization und ist das Resource Sharing innerhalb der Organization aktiviert, geschieht das automatisch.
Für Konten außerhalb Ihrer Organization – oder wenn das Resource Sharing innerhalb der Organization nicht aktiviert ist – muss der Resource Share von jedem Konto einzeln angenommen werden.
5. Zugriff auf den geteilten Parameter prüfen
Sobald der Parameter angelegt und erfolgreich geteilt ist, geht es ans Testen!
Am schnellsten lässt sich der Zugriff aus einem externen Konto über die AWS CLI prüfen (lokal im Terminal oder via AWS CloudShell):
aws ssm get-parameter --name <vollständiger ARN des Parameters> --with-decryption
Hier eine Beispielausgabe mit dem entschlüsselten Parameterwert:

Soll der Wert des Secret-Parameters nicht angezeigt werden, lassen Sie das Flag --with-decryption einfach weg.
Quellen
- https://github.com/doitintl/secrets-init
- https://www.doit.com/kubernetes-and-secrets-management-in-cloud/
- https://aws.amazon.com/about-aws/whats-new/2024/02/aws-systems-manager-parameter-store-cross-account-sharing/
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_limits.html
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating.html
- https://developer.hashicorp.com/hcp/docs/vault-secrets/integrations/aws-secrets-manager
- https://aws.amazon.com/secrets-manager/pricing/
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples_cross.html
- https://docs.aws.amazon.com/general/latest/gr/ssm.html
- https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html#systemsmanager-PutParameter-request-Type
- https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html
- https://aws.amazon.com/systems-manager/pricing/#Parameter_Store
- https://docs.aws.amazon.com/ram/latest/userguide/shareable.html
- https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-shared-parameters.html
- https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk
- https://repost.aws/knowledge-center/kms-key-organization-account
- https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html
- https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html
- https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs
- https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html
- https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html
- https://gist.github.com/enigmango/0e2332bfc0b3cbbf234a7c5968020eaf
Dass sich Parameter-Store-Parameter nun teilen lassen, ist eine willkommene Erweiterung – vor allem, wenn nicht-geheime Parameter aus einem zentralen Konto heraus über eine AWS Organization hinweg verfügbar gemacht werden sollen. Für die Verwaltung von Secrets bleibt der Secrets Manager aber die erste Wahl.
Codebeispiel
Sie möchten das Ganze per Infrastructure-as-Code ausprobieren? Dieser GitHub Gist enthält Beispielcode in Terraform, mit dem Sie einen geteilten verschlüsselten Parameter über Ihre AWS Organization hinweg anlegen können.
Mehr erfahren
Bei DoiT International bieten wir Expertise und Support für Secrets Manager, Parameter Store und viele weitere Cloud-Services. Wenn Sie mehr zur Beratung durch DoiT erfahren möchten, besuchen Sie https://www.doit.com/services/.