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

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
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.
Unsere Ideen
Weitere Blogs
Contact




