Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden Sie Amazon API Gateway zur Integration Ihres Identitätsanbieters
In diesem Thema wird beschrieben, wie eine AWS Lambda Funktion zur Unterstützung einer API Gateway-Methode verwendet wird. Verwenden Sie diese Option, wenn Sie Ihren Identity Provider integrieren RESTful API möchten oder wenn Sie dessen Funktionen für Geoblocking- oder Ratenbegrenzungsanfragen nutzen möchten. AWS WAF
Einschränkungen bei der Verwendung eines API Gateways zur Integration Ihres Identitätsanbieters
-
Diese Konfiguration unterstützt keine benutzerdefinierten Domänen.
-
Diese Konfiguration unterstützt kein privates API GatewayURL.
Wenn Sie eines davon benötigen, können Sie Lambda als Identitätsanbieter ohne API Gateway verwenden. Details hierzu finden Sie unter Wird AWS Lambda zur Integration Ihres Identitätsanbieters verwendet.
Authentifizierung mit einer API Gateway-Methode
Sie können eine API Gateway-Methode zur Verwendung als Identitätsanbieter für Transfer Family erstellen. Dieser Ansatz bietet Ihnen eine äußerst sichere Methode zum Erstellen und BereitstellenAPIs. Mit API Gateway können Sie einen HTTPS Endpunkt erstellen, sodass alle eingehenden API Anrufe mit größerer Sicherheit übertragen werden. Weitere Informationen zum API Gateway-Dienst finden Sie im APIGateway Developer Guide.
APIGateway bietet eine Autorisierungsmethode mit dem NamenAWS_IAM
, die Ihnen dieselbe Authentifizierung basierend auf AWS Identity and Access Management (IAM) ermöglicht, die auch intern AWS verwendet wird. Wenn Sie die Authentifizierung mit aktivierenAWS_IAM
, API können nur Anrufer mit ausdrücklichen Aufrufrechten auf diese API API Gateway-Methode zugreifen.
Um Ihre API Gateway-Methode als benutzerdefinierten Identitätsanbieter für Transfer Family zu verwenden, aktivieren Sie sie IAM für Ihre API Gateway-Methode. Im Rahmen dieses Prozesses stellen Sie Transfer Family eine IAM Rolle mit Berechtigungen zur Nutzung Ihres Gateways zur Verfügung.
Anmerkung
Um die Sicherheit zu verbessern, können Sie eine Firewall für Webanwendungen konfigurieren. AWS WAF ist eine Firewall für Webanwendungen, mit der Sie die HTTP HTTPS Anfragen überwachen können, die an ein Amazon API Gateway weitergeleitet werden. Details hierzu finden Sie unter Fügen Sie eine Firewall für Webanwendungen hinzu.
So verwenden Sie Ihre API Gateway-Methode für die benutzerdefinierte Authentifizierung mit Transfer Family
-
Erstellen Sie einen AWS CloudFormation Stapel. So gehen Sie vor:
Anmerkung
Die Stack-Vorlagen wurden aktualisiert und verwenden nun BASE64 -kodierte Passwörter: Einzelheiten finden Sie unter. Verbesserungen an den Vorlagen AWS CloudFormation
-
Folgen Sie den Anweisungen zum Bereitstellen eines AWS CloudFormation Stacks aus einer vorhandenen Vorlage unter Auswahl einer Stack-Vorlage im AWS CloudFormation Benutzerhandbuch.
-
Verwenden Sie eine der folgenden Basisvorlagen, um eine AWS Lambda API Gateway-Methode mit -Unterstützung für die Verwendung als benutzerdefinierter Identitätsanbieter in Transfer Family zu erstellen.
-
Standardmäßig wird Ihre API Gateway-Methode als benutzerdefinierter Identitätsanbieter verwendet, um einen einzelnen Benutzer auf einem einzelnen Server mithilfe eines hartcodierten SSH (Secure Shell-) Schlüssels oder Kennworts zu authentifizieren. Nach der Bereitstellung können Sie den Lambda-Funktionscode ändern, um etwas anderes zu tun.
-
AWS Secrets Manager Vorlage stapeln
Standardmäßig authentifiziert sich Ihre API Gateway-Methode anhand eines Eintrags im Secrets Manager des Formats
aws/transfer/
. Darüber hinaus muss das Geheimnis die Schlüssel-Wert-Paare für alle an Transfer Family zurückgegebenen Benutzereigenschaften enthalten. Nach der Bereitstellung können Sie den Lambda-Funktionscode ändern, um etwas anderes zu tun. Weitere Informationen finden Sie im Blogbeitrag Aktivieren der Kennwortauthentifizierung für die AWS Transfer Family Verwendung AWS Secrets Managerserver-id
/username
. -
Ihre API Gateway-Methode ist in Okta als benutzerdefinierter Identitätsanbieter in Transfer Family integriert. Weitere Informationen finden Sie im Blogbeitrag Okta als Identitätsanbieter verwenden mit
. AWS Transfer Family
-
Die Bereitstellung eines dieser Stacks ist der einfachste Weg, einen benutzerdefinierten Identitätsanbieter in den Transfer Family Family-Workflow zu integrieren. Jeder Stack verwendet die Lambda-Funktion, um Ihre auf API Gateway basierende API Methode zu unterstützen. Sie können Ihre API Methode dann als benutzerdefinierten Identitätsanbieter in Transfer Family verwenden. Standardmäßig authentifiziert die Lambda-Funktion einen einzelnen Benutzer, der
myuser
mit dem Passwort aufgerufen wird.MySuperSecretPassword
Nach der Bereitstellung können Sie diese Anmeldeinformationen bearbeiten oder den Lambda-Funktionscode aktualisieren, um etwas anderes zu tun.Wichtig
Wir empfehlen, dass Sie die standardmäßigen Benutzer- und Kennwortanmeldedaten bearbeiten.
Nachdem der Stack bereitgestellt wurde, können Sie Details dazu auf der Registerkarte Ausgaben in der CloudFormation Konsole einsehen. Zu diesen Details gehören der Amazon-Ressourcenname (ARN) ARN des Stacks, die IAM Rolle, die der Stack erstellt hat, und die URL für Ihr neues Gateway.
Anmerkung
Wenn Sie die Option des benutzerdefinierten Identitätsanbieters verwenden, um die passwortbasierte Authentifizierung für Ihre Benutzer zu aktivieren, und Sie die von API Gateway bereitgestellte Anfrage- und Antwortprotokollierung aktivieren, API protokolliert Gateway die Passwörter Ihrer Benutzer in Ihren Amazon Logs. CloudWatch Wir empfehlen nicht, dieses Protokoll in Ihrer Produktionsumgebung zu verwenden. Weitere Informationen finden Sie unter Einrichten der CloudWatch API Protokollierung in API Gateway im APIGateway Developer Guide.
-
Überprüfen Sie die Konfiguration der API Gateway-Methode für Ihren Server. So gehen Sie vor:
-
Öffnen Sie die API Gateway-Konsole unter https://console.aws.amazon.com/apigateway/
. -
Wählen Sie die Basisvorlage Transfer Custom Identity Provider ausAPI, die mit der AWS CloudFormation Vorlage generiert wurde. Möglicherweise müssen Sie Ihre Region auswählen, um Ihre Gateways zu sehen.
-
Wählen GETSie im Bereich Ressourcen. Der folgende Screenshot zeigt die korrekte Methodenkonfiguration.
Zu diesem Zeitpunkt ist Ihr API Gateway bereit für die Bereitstellung.
-
-
Wählen Sie für Aktionen die Option Deploy ausAPI. Wählen Sie für die Bereitstellungsphase die Option prod und dann Deploy aus.
Nachdem die API Gateway-Methode erfolgreich bereitgestellt wurde, können Sie sich ihre Leistung unter Stufen > Phasendetails ansehen, wie im folgenden Screenshot gezeigt.
Anmerkung
Kopieren Sie die URLAufrufadresse, die oben auf dem Bildschirm angezeigt wird. Möglicherweise benötigen Sie sie für den nächsten Schritt.
-
Öffnen Sie die AWS Transfer Family Konsole unter. https://console.aws.amazon.com/transfer/
-
Eine Transfer Family sollte für Sie erstellt worden sein, als Sie den Stack erstellt haben. Wenn nicht, konfigurieren Sie Ihren Server mithilfe dieser Schritte.
Wählen Sie Server erstellen, um die Seite Server erstellen zu öffnen. Wählen Sie für Wählen Sie einen Identitätsanbieter die Option Benutzerdefiniert und dann Amazon API Gateway verwenden, um eine Verbindung zu Ihrem Identitätsanbieter herzustellen, wie im folgenden Screenshot gezeigt.
-
Fügen Sie in das URL Textfeld Amazon API Gateway bereitstellen die URLAufrufadresse des API Gateway-Endpunkts ein, den Sie in Schritt 3 dieses Verfahrens erstellt haben.
-
Wählen Sie unter Rolle die IAM Rolle aus, die mit der AWS CloudFormation Vorlage erstellt wurde. Diese Rolle ermöglicht es Transfer Family, Ihre API Gateway-Methode aufzurufen.
Die Aufrufrolle enthält den AWS CloudFormation Stack-Namen, den Sie für den Stack ausgewählt haben, den Sie in Schritt 1 erstellt haben. Es hat das folgende Format:
.CloudFormation-stack-name
-TransferIdentityProviderRole-ABC123DEF456GHI
-
Füllen Sie die verbleibenden Felder aus und wählen Sie dann Server erstellen. Einzelheiten zu den verbleibenden Schritten zum Erstellen eines Servers finden Sie unterKonfiguration eines SFTP FTPS FTP Serverendpunkts, oder.
Implementieren Sie Ihre API Gateway-Methode
Um einen benutzerdefinierten Identitätsanbieter für Transfer Family zu erstellen, muss Ihre API Gateway-Methode eine einzelne Methode implementieren, die einen Ressourcenpfad von hat/servers/
. Die serverId
/users/username
/config
Werte username
und stammen aus dem RESTful Ressourcenpfad. Fügen Sie außerdem serverId
sourceIp
und protocol
als URLQuery-String-Parameter in der Methodenanforderung hinzu, wie in der folgenden Abbildung gezeigt.
Anmerkung
Der Benutzername muss mindestens 3 und maximal 100 Zeichen lang sein. Sie können die folgenden Zeichen im Benutzernamen verwenden: a—z, A-Z, 0—9, Unterstrich (_), Bindestrich (-), Punkt (.) und At-Zeichen (@). Der Benutzername darf jedoch nicht mit einem Bindestrich (-), einem Punkt (.) oder einem Zeichen (@) beginnen.
Wenn Transfer Family versucht, Ihren Benutzer mit einem Passwort zu authentifizieren, stellt der Dienst ein Password:
Header-Feld bereit. In Ermangelung eines Password:
Headers versucht Transfer Family, Ihren Benutzer mit einer Authentifizierung mit öffentlichem Schlüssel zu authentifizieren.
Wenn Sie einen Identitätsanbieter zur Authentifizierung und Autorisierung von Endbenutzern verwenden, können Sie neben der Überprüfung ihrer Anmeldeinformationen auch Zugriffsanfragen auf der Grundlage der IP-Adressen der von Ihren Endbenutzern verwendeten Clients zulassen oder ablehnen. Mit dieser Funktion können Sie sicherstellen, dass auf Daten, die in Ihren S3-Buckets oder Ihrem EFS Amazon-Dateisystem gespeichert sind, über die unterstützten Protokolle nur von IP-Adressen aus zugegriffen werden kann, die Sie als vertrauenswürdig angegeben haben. Um diese Funktion zu aktivieren, müssen Sie sie sourceIp
in der Abfragezeichenfolge angeben.
Wenn Sie mehrere Protokolle für Ihren Server aktiviert haben und den Zugriff mit demselben Benutzernamen über mehrere Protokolle ermöglichen möchten, können Sie dies tun, sofern die für jedes Protokoll spezifischen Anmeldeinformationen in Ihrem Identitätsanbieter eingerichtet wurden. Um diese Funktion zu aktivieren, müssen Sie den
Wert in den RESTful Ressourcenpfad aufnehmen.protocol
Ihre API Gateway-Methode sollte immer HTTP den Statuscode zurückgeben200
. Jeder andere HTTP Statuscode bedeutet, dass beim Zugriff auf ein Fehler aufgetreten istAPI.
Amazon S3 S3-Beispielantwort
Der Beispielantworttext ist ein JSON Dokument der folgenden Form für Amazon S3.
{ "Role": "IAM role with configured S3 permissions", "PublicKeys": [ "ssh-rsa
public-key1
", "ssh-rsapublic-key2
" ], "Policy": "STS Assume role session policy", "HomeDirectory": "/bucketName
/path
/to
/home
/directory
" }
Anmerkung
Die Richtlinie wird JSON als Zeichenfolge maskiert. Beispielsweise:
"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::
bucket
\", \"Action\": \"s3:ListBucket\", \"Effect\": \"Allow\", \"Sid\": \"ListHomeDir\"}, {\"Resource\": \"arn:aws:s3:::*\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\", \"s3:DeleteObjectVersion\", \"s3:DeleteObject\", \"s3:GetObjectVersion\", \"s3:GetObjectACL\", \"s3:PutObjectACL\"], \"Effect\": \"Allow\", \"Sid\": \"HomeDirObjectAccess\"}] }"
Die folgende Beispielantwort zeigt, dass ein Benutzer einen logischen Home-Verzeichnistyp hat.
{ "Role": "arn:aws:iam::
123456789012
:role/transfer-access-role-s3
", "HomeDirectoryType":"LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/MY-HOME-BUCKET
\"}]", "PublicKeys":[""] }
EFSAmazon-Beispielantwort
Der Beispielantworttext ist ein JSON Dokument der folgenden Form für AmazonEFS.
{ "Role": "
IAM role with configured EFS permissions
", "PublicKeys": [ "ssh-rsapublic-key1
", "ssh-rsapublic-key2
" ], "PosixProfile": { "Uid": "POSIX user ID
", "Gid": "POSIX group ID
", "SecondaryGids": [Optional list of secondary Group IDs
], }, "HomeDirectory": "/fs-id
/path
/to
/home
/directory
" }
Das Role
Feld zeigt, dass eine erfolgreiche Authentifizierung stattgefunden hat. Bei der Passwortauthentifizierung (wenn Sie einen Password:
Header angeben), müssen Sie keine SSH öffentlichen Schlüssel angeben. Wenn ein Benutzer nicht authentifiziert werden kann, z. B. wenn das Passwort falsch ist, sollte Ihre Methode eine Antwort zurückgeben, die nicht Role
gesetzt ist. Ein Beispiel für eine solche Antwort ist ein leeres JSON Objekt.
Die folgende Beispielantwort zeigt einen Benutzer mit einem logischen Home-Verzeichnistyp.
{ "Role": "arn:aws:iam::
123456789012
:role/transfer-access-role-efs
", "HomeDirectoryType": "LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/faa1a123
\"}]", "PublicKeys":[""], "PosixProfile":{"Uid":65534
,"Gid":65534
} }
Sie können Benutzerrichtlinien im JSON Format in die Lambda-Funktion aufnehmen. Weitere Informationen zur Konfiguration von Benutzerrichtlinien in Transfer Family finden Sie unterVerwaltung der Zugriffskontrollen.
Standard-Lambda-Funktion
Um verschiedene Authentifizierungsstrategien zu implementieren, bearbeiten Sie die Lambda-Funktion, die Ihr Gateway verwendet. Um die Anforderungen Ihrer Anwendung zu erfüllen, können Sie die folgenden Lambda-Beispielfunktionen in Node.js verwenden. Weitere Informationen zu Lambda finden Sie im AWS Lambda Developer Guide oder im Building Lambda functions with Node.js.
Die folgende Lambda-Beispielfunktion verwendet Ihren Benutzernamen, Ihr Passwort (wenn Sie eine Passwortauthentifizierung durchführen), Ihre Server-ID, Ihr Protokoll und Ihre Client-IP-Adresse. Sie können eine Kombination dieser Eingaben verwenden, um nach Ihrem Identitätsanbieter zu suchen und festzustellen, ob die Anmeldung akzeptiert werden soll.
Anmerkung
Wenn Sie mehrere Protokolle für Ihren Server aktiviert haben und den Zugriff mit demselben Benutzernamen über mehrere Protokolle ermöglichen möchten, können Sie dies tun, sofern die für das Protokoll spezifischen Anmeldeinformationen in Ihrem Identitätsanbieter eingerichtet wurden.
Für File Transfer Protocol (FTP) empfehlen wir, separate Anmeldeinformationen für Secure Shell (SSH), File Transfer Protocol (SFTP) und File Transfer Protocol over SSL (FTPS) zu verwenden. Wir empfehlen, separate Anmeldeinformationen für zu verwenden, FTP da Anmeldeinformationen im Gegensatz zu SFTP und FTPS im Klartext FTP übertragen werden. Indem Sie Ihre FTP Anmeldeinformationen von Ihren Workloads isolieren SFTP oderFTPS, falls FTP Anmeldeinformationen gemeinsam genutzt oder offengelegt werden, SFTP schützenFTPS.
Diese Beispielfunktion gibt die Rollen- und logischen Basisverzeichnisdetails zusammen mit den öffentlichen Schlüsseln zurück (sofern sie die Authentifizierung mit öffentlichen Schlüsseln durchführt).
Wenn Sie vom Service verwaltete Benutzer erstellen, legen Sie deren Basisverzeichnis fest, entweder logisch oder physisch. In ähnlicher Weise benötigen wir die Ergebnisse der Lambda-Funktion, um die gewünschte physische oder logische Verzeichnisstruktur des Benutzers zu vermitteln. Die von Ihnen festgelegten Parameter hängen vom Wert für HomeDirectoryTypeFeld.
-
HomeDirectoryType
gesetzt aufPATH
— dasHomeDirectory
Feld muss dann ein absolutes Amazon S3 S3-Bucket-Präfix oder ein EFS absoluter Amazon-Pfad sein, der für Ihre Benutzer sichtbar ist. -
HomeDirectoryType
gesetzt aufLOGICAL
— Legen Sie keinHomeDirectory
Feld fest. Stattdessen legen wir einHomeDirectoryDetails
Feld fest, das die gewünschten Eingabe-/Zielzuordnungen bereitstellt, ähnlich den beschriebenen Werten in HomeDirectoryDetailsParameter für vom Service verwaltete Benutzer.
Die Beispielfunktionen sind unter aufgeführt. Beispiele für Lambda-Funktionen
Lambda-Funktion zur Verwendung mit AWS Secrets Manager
Um sie AWS Secrets Manager als Identitätsanbieter zu verwenden, können Sie mit der Lambda-Funktion in der AWS CloudFormation Beispielvorlage arbeiten. Die Lambda-Funktion fragt den Secrets Manager Manager-Dienst mit Ihren Anmeldeinformationen ab und gibt bei Erfolg ein bestimmtes Geheimnis zurück. Weitere Informationen zu Secrets Manager finden Sie im Benutzerhandbuch für AWS Secrets Manager.
Um eine AWS CloudFormation Beispielvorlage herunterzuladen, die diese Lambda-Funktion verwendet, rufen Sie den Amazon S3 S3-Bucket auf, der von bereitgestellt wird AWS Transfer Family
Verbesserungen an den Vorlagen AWS CloudFormation
An den veröffentlichten CloudFormation Vorlagen wurden Verbesserungen an der API Gateway-Oberfläche vorgenommen. Die Vorlagen verwenden jetzt BASE64 -kodierte Passwörter für das API Gateway. Ihre bestehenden Implementierungen funktionieren auch ohne diese Erweiterung, lassen jedoch keine Passwörter zu, deren Zeichen außerhalb des US-Standardzeichensatzes liegen. ASCII
Die Änderungen in der Vorlage, die diese Funktion ermöglichen, lauten wie folgt:
-
Die
GetUserConfigRequest AWS::ApiGateway::Method
Ressource muss diesenRequestTemplates
Code haben (die kursiv gedruckte Zeile ist die aktualisierte Zeile)RequestTemplates: application/json: | { "username": "$util.urlDecode($input.params('username'))", "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")", "protocol": "$input.params('protocol')", "serverId": "$input.params('serverId')", "sourceIp": "$input.params('sourceIp')" }
-
Der Wert
RequestParameters
für dieGetUserConfig
Ressource muss geändert werden, damit derPasswordBase64
Header verwendet werden kann (die kursiv gedruckte Zeile ist die aktualisierte Zeile):RequestParameters: method.request.header.PasswordBase64: false method.request.querystring.protocol: false method.request.querystring.sourceIp: false
Um zu überprüfen, ob die Vorlage für Ihren Stack die neueste ist
Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation
. Wählen Sie aus der Liste der Stacks Ihren Stack aus.
Wählen Sie im Detailbereich die Registerkarte Vorlage aus.
-
Achten Sie auf Folgendes:
Suchen Sie nach dieser Zeile und stellen Sie sicher
RequestTemplates
, dass Sie sie haben:"password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
Suchen Sie nach dieser Zeile und stellen Sie sicher
RequestParameters
, dass Sie sie haben:method.request.header.PasswordBase64: false
Wenn Sie die aktualisierten Zeilen nicht sehen, bearbeiten Sie Ihren Stapel. Einzelheiten zum Aktualisieren Ihres AWS CloudFormation Stacks finden Sie unter Ändern einer Stack-Vorlage im AWS CloudFormation; Benutzerhandbuch.