Blog

So verwalten Sie AWS Transfer Server-Hostschlüssel mit CloudFormation

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 16, 2025
2 Minuten

Der AWS Transfer Server bietet SFTP als Service an. Wenn Sie von einem bestehenden SFTP-Server migrieren möchten, können Sie Ihre eigenen Hostschlüssel hinzufügen. Leider werden Host Keys von Cloudformation nicht unterstützt. Dieser benutzerdefinierte Anbieter fügt Host-Schlüssel hinzu und ermöglicht es Ihnen, die Menge der aktiven Schlüssel des Servers zu definieren.

Hostschlüssel für Übertragungsserver hinzufügen

Um einen Transfer Server-Hostschlüssel in Ihrer AWS CloudFormation-Vorlage hinzuzufügen, verwenden Sie die folgende Syntax:

  TransferServerHostKey:
    Type: Custom::TransferServerHostKey
    Properties:
      ServerId: !GetAtt Server.ServerId
      HostKeyParameterName: !GetAtt HostKey.ParameterName
      Description: Generated by CloudFormation
      Version: !GetAtt HostKey.Hash
      ServiceToken: !Sub 'arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:cfn-transfer-server-host-key-provider'

Diese Funktion liest den Schlüssel aus dem Parameter /private-keys/sftp-server und fügt ihn als Host-Schlüssel zum angegebenen Server hinzu. Siehe Custom::TransferServerHostKey für weitere Einzelheiten. Sie können einen Host-Schlüssel mit Custom::RSAKey erzeugen. Alternativ dazu können Sie einen vorhandenen Schlüssel verschlüsseln und ihn mit Custom::Secret als EncryptedContent in den Parameterspeicher einfügen.

Aktiven Übertragungsserver-Hostschlüsselsatz definieren

Wenn Sie einem Übertragungsserver neue Hostschlüssel hinzufügen, sind diese nicht automatisch aktiv. Wenn mehrere Schlüssel vorhanden sind, verwendet der Transferserver den ältesten verfügbaren Schlüssel. Sie müssen den neuen Schlüssel explizit aktivieren, indem Sie den alten Schlüssel desselben Typs löschen.

Um die Menge der aktiven Hostschlüssel zu definieren, verwenden Sie Custom::TransferServerActiveHostKeys wie folgt:

  TransferServerActiveHostKeys:
    Type: Custom::TransferServerActiveHostKeys
    Properties:
      ServerId: !GetAtt Server.ServerId
      Fingerprints:
        - !GetAtt TransferServerHostKey.Fingerprint
      ServiceToken: !Sub 'arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:function:cfn-transfer-server-host-key-provider'

Dadurch wird sichergestellt, dass der aktive Hostschlüsselsatz des Servers aus den Schlüsseln mit den angegebenen Fingerabdrücken besteht. Alle anderen mit dem Server verbundenen Host-Schlüssel werden gelöscht. Stellen Sie sicher, dass Sie die Fingerabdrücke aller Schlüssel angeben, die Sie behalten möchten.

Installation

Um diesen benutzerdefinierten Ressourcenanbieter zu installieren, geben Sie ein:

aws cloudformation create-stack 
    --capabilities CAPABILITY_IAM 
    --stack-name cfn-transfer-server-host-key-provider 
    --template-url s3://binxio-public-eu-central.s3.amazonaws.com/lambdas/cfn-transfer-server-host-key-provider-0.1.1.yaml

oder verwenden Sie

Demo

Um die einfache Demo der benutzerdefinierten TransferServerHostKey und TransferServerActiveHostKeys zu installieren, geben Sie ein:

git clone https://github.com/binxio/cfn-transfer-server-host-key-provider.git
cd cfn-transfer-server-host-key-provider
aws cloudformation deploy 
    --capabilities CAPABILITY_NAMED_IAM 
    --stack-name cfn-transfer-server-host-key-provider-demo 
    --template-file file://cloudformation/demo.yaml 
    --parameter-overrides SecretProviderPresent=no

Dabei wird davon ausgegangen, dass der benutzerdefinierte Geheimdienstanbieter nicht installiert ist. Um das Ergebnis zu überprüfen, geben Sie ein:

$ SERVER_ID=$(aws cloudformation 
               describe-stacks 
               --stack-name cfn-transfer-server-host-key-provider-demo 
               --query 'Stacks[0].Outputs[?OutputKey==ServerId].OutputValue' 
               --output text)  

$ SERVER_REGION=$(aws configure get region)  
$ SERVER_HOST=$SERVER_ID.server.transfer.$SERVER_REGION.amazonaws.com

$ FINGERPRINT=$(aws cloudformation describe-stacks  
                --stack-name cfn-transfer-server-host-key-provider-demo 
                --query 'Stacks[0].Outputs[?OutputKey==Fingerprint].OutputValue'  
                --output text)  

$ echo "expect: $FINGERPRINT"
$ ssh-keyscan $SERVER_HOST 2>&1  | ssh-keygen -lf -

Fazit

Mit diesen beiden benutzerdefinierten Ressourcen können Sie AWS CloudFormation verwenden, um die Hostschlüssel Ihrer AWS SFTP-Übertragungsserver zu verwalten.

Bild von Gerd Altmann von Pixabay

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.