Blog

Geheimnisse in AWS CloudFormation verschlüsseln

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 21, 2025
2 Minuten

Letztes Jahr habe ich in einem Blog darüber geschrieben, wie Sie in Ihrer CloudFormation-Vorlage Geheimnisse erzeugen und diese im Parameter Store speichern. Das funktioniert, wenn Sie das Geheimnis selbst wählen können. Aber was ist, wenn Ihnen ein Geheimnis vorgegeben wird? Zum Beispiel einen API-Schlüssel oder ein Passwort, das für die Authentifizierung bei einem Drittanbieter verwendet werden soll? Mit der neuesten Funktion des Custom Secret Providers können Sie ein verschlüsseltes Geheimnis angeben, das entschlüsselt wird, bevor es im Parameter Store gespeichert wird.

Wie funktioniert das?

Es ist ganz einfach: Sie geben den verschlüsselten Wert in Ihrer CloudFormation Custom::Secret Ressource als EncryptedContent an:

Resources:
  ApiKey:
    Type: Custom::Secret
    Properties:
      Name: /datadog/api-key
      EncryptedContent: AQICAHgefwksukJYA7L2AkPMZLGjZsGxHbvY9AoVs55dcju1AwEZui/8lNbnGAhv63Wh0heUAAAA3zCB3AYJKoZIhvcNAQcGoIHOMIHLAgEAMIHFBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDOXKKVZ4ft75/oZ2TQIBEICBlzf5j1M3w6OH+iphx59kFLnNoKb+u1RCLfIqEitrt6VGu13/jDlnDcPE2DfkZFkW3fnmNn5OXfgt1L9j4XYdIQTEwexorNqUr5pUtMfS9YX8yL9DbArH+XBv/OQPSj8VsuWRcwFP5EwZKB9O4X3l1pZlPafp2Y/ndWXgC1o6YgfplnmjufoUUTy8wi4P5glbwnqGP/iyc7g=
      ReturnSecret: true
      RefreshOnUpdate: true
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-secret-provider'

Der Wert sollte mit dem KMS-Schlüssel alias/cmk/cfn-secrets verschlüsselt sein, damit der Anbieter ihn entschlüsseln kann. Nach der Bereitstellung finden Sie den API-Schlüssel im EC Parameter Store unter dem Namen /datadog/api-key als Typ SecureString. Der Wert ist für Sie im Klartext verfügbar. Wenn Sie in Ihrem Cloudformation-Modul auf das Geheimnis zugreifen müssen, müssen Sie ReturnSecret angeben und es als Attribut Secret referenzieren.

     DATADOG_API_KEY: !GetAtt 'ApiKey.Secret'

Installation

Um diese benutzerdefinierte Ressource zu installieren, geben Sie ein:

git checkout https://github.com/binxio/cfn-secret-provider
cd cfn-secret-provider

aws cloudformation create-stack 
    --capabilities CAPABILITY_IAM 
    --stack-name cfn-secret-provider 
    --template-body 
    file://cloudformation/cfn-custom-resource-provider.json 

aws cloudformation wait stack-create-complete  
    --stack-name cfn-secret-provider 

Diese CloudFormation-Vorlage verwendet unseren vorkonfigurierten Provider von s3://binxio-public/lambdas/cfn-secret-provider-0.13.0.zip Dieser benutzerdefinierte Anbieter darf nur Werte aus dem Schlüssel mit dem Alias alias/cmk/cfn-secrets entschlüsseln, der zusammen mit dem Anbieter erstellt wurde. Wenn
Sie andere Schlüssel verwenden möchten, fügen Sie der Lamdba-Richtlinie Entschlüsselungsberechtigungen hinzu.

Werte verschlüsseln

Nachdem der CloudFormation-Provider bereitgestellt wurde, können Sie die Werte mit dem 4-Zeilen-Python-Dienstprogramm encrypt-secret verschlüsseln.

$ ./encrypt-secret my-secret-api-key

Demo

Um das einfache Beispiel für die benutzerdefinierte Ressource zu installieren, geben Sie ein:

API_KEY=replace-me-with-your-key

aws cloudformation create-stack 
    --stack-name cfn-secret-provider-demo 
    --template-body file://cloudformation/demo-stack.json 
    --parameters ParameterKey=ApiKey,ParameterValue=$(./encrypt-secret $API_KEY)

aws cloudformation wait stack-create-complete  
    --stack-name cfn-secret-provider-demo

Natürlich wird in diesem Fall das Geheimnis als Parameter übergeben, da es vom Schlüssel abhängt.
um zu überprüfen, ob Ihr Schlüssel im Parameterspeicher gespeichert wurde, geben Sie ein:

aws ssm get-parameter --name /cfn-secret-provider-demo-api-key --with-decryption

Fazit

Mit der Option Verschlüsselter Inhalt des CloudFormation Secret-Anbieters können Sie
bestimmte Geheimnisse in CloudFormation angeben und sie sicher im SSM-Parameterspeicher bereitstellen. Bis hierher? Wahrscheinlich gefällt Ihnen die Bereitstellung von privaten Schlüsselpaaren und die Bereitstellung von ACM-Zertifikaten mit CloudFormation.

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.