Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Secrets im AWS Parameter Store teilen

By Tyler WengerdJun 17, 20245 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

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

Parameter Store – Funktionen und Grenzen

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 von Schritt 2 beim Anlegen eines KMS-Schlüssels

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 Übersichtsseite beim Anlegen eines KMS-Schlüssels

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.

Screenshot des Parameter-Erstellungsprozesses

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).

Screenshot aus dem Resource Access Manager beim Teilen des Parameters – Abschnitt \

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

Screenshot aus dem Resource Access Manager beim Teilen des Parameters – Abschnitt \

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

Screenshot aus dem Resource Access Manager beim Teilen des Parameters – Abschnitt \

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.

Screenshot aus dem Resource Access Manager beim Teilen des Parameters – die finale Übersichtsseite

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:

Screenshot aus AWS CloudShell mit dem Befehl zum Auslesen des verschlüsselten Parameters und der erfolgreichen Ausgabe

Soll der Wert des Secret-Parameters nicht angezeigt werden, lassen Sie das Flag --with-decryption einfach weg.

Quellen

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/.