Blog

Bereitstellen von privaten Schlüsselpaaren mit AWS CloudFormation

Mark van Holsteijn

Aktualisiert Oktober 21, 2025
2 Minuten

In AWS CloudFormation gibt es keine Möglichkeit, ein privates Schlüsselpaar zu erzeugen. Das bedeutet, dass Sie immer manuell arbeiten müssen. Sie müssen einen ssh-Schlüssel erzeugen, ihn in AWS importieren und schließlich den Namen an Ihre CloudFormation-Vorlage übergeben. Das ist eine umständliche, manuelle Arbeit, die uns daran hindert, die Bereitstellung unserer Infrastruktur vollständig zu automatisieren.

Forken Sie mich auf GitHub Mit Custom CloudFormation Resource setzen wir dem ein Ende. RSA-Schlüssel werden als CloudFormation Resource generiert undder private Schlüssel wird im EC2-Parameterspeicher gespeichert, während der öffentliche Schlüssel als EC2-Schlüsselpaar importiert werden kann. Das bedeutet, dass wir die Bereitstellung unserer Infrastruktur vollständig automatisiert haben, während wir gleichzeitig den Zugriff auf den privaten Schlüssel kontrollieren können.

Wie funktioniert das?

Es ist ganz einfach: Sie kombinieren die CloudFormation-Ressource Custom::RSAKey mit dem Custom::KeyPair, wie folgt:

Resources:
  PrivateKey:
    Type: Custom::RSAKey
    Properties:
      Name: /demo/private-key
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-secret-provider'
  KeyPair:
    Type: Custom::KeyPair
    DependsOn: PrivateKey
    Properties:
      Name: CustomKeyPair
      PublicKeyMaterial: !GetAtt 'PrivateKey.PublicKey'
      ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-secret-provider'

Nach der Bereitstellung werden sowohl der private Schlüssel als auch das ec2-Schlüsselpaar erstellt. Den privaten Schlüssel finden Sie im Parameterspeicher unter dem Namen /demo/private-key und das ec2-Schlüsselpaar unter dem Namen CustomKeyPair.

Custom::RSAKey liefert den öffentlichen RSA-Schlüssel im Attribut PublicKey und in PublicKeyPEM im OpenSSL- bzw. PEM-Format.

Installation

Um diese benutzerdefinierten Ressourcen zu installieren, geben Sie ein:

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

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

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

Diese CloudFormation-Vorlage verwendet unseren vorgefertigten Provider von:

s3://binxio-public-{{AWS::Region}}/lambdas/cfn-secret-provider-latest.zip

Demo

Um das einfache Beispiel aus diesem Blogbeitrag zu installieren, geben Sie ein:

aws cloudformation create-stack 
    --capabilities CAPABILITY_NAMED_IAM 
    --stack-name cfn-secret-provider-demo 
    --template-body file://cloudformation/demo-stack.yaml

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

um das Ergebnis zu validieren, geben Sie ein:

aws ssm get-parameter --parameter-name /demo/my-private-key --with-decryption
aws ec2 describe-key-pairs --key-name cfn-secret-provider-demo-custom-key-pair

Fazit

Mit dem Custom CloudFormation Secret-Anbieter können Sie Ihre Infrastruktur vollständig automatisieren, einschließlich der Generierung von privaten Schlüsseln, die zum Starten Ihrer ec2-Instanzen erforderlich sind. Gleichzeitig wird der private Schlüssel sicher im Parameterspeicher verschlüsselt, wo der Zugriff geprüft und kontrolliert werden kann.

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.