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 Sie eine AWS Lambda Funktion verwenden, um eine API-Gateway-Methode zu unterstützen. Verwenden Sie diese Option, wenn Sie eine RESTful-API zur Integration Ihres Identitätsanbieters benötigen oder wenn Sie deren Funktionen für Geoblocking- oder Ratenbegrenzungsanfragen nutzen möchten. AWS WAF
Einschränkungen bei der Verwendung eines API Gateway zur Integration Ihres Identitätsanbieters
-
Diese Konfiguration unterstützt keine benutzerdefinierten Domänen.
-
Diese Konfiguration unterstützt keine private API-Gateway-URL.
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 Möglichkeit, APIs zu erstellen und bereitzustellen. Mit API Gateway können Sie einen HTTPS-Endpunkt erstellen, sodass alle eingehenden API-Aufrufe mit größerer Sicherheit übertragen werden. Weitere Informationen zum API Gateway-Dienst finden Sie im API Gateway Developer Guide.
API Gateway bietet eine Autorisierungsmethode mit dem NamenAWS_IAM
, die Ihnen dieselbe Authentifizierung auf Basis von AWS Identity and Access Management (IAM) bietet, die auch intern AWS verwendet wird. Wenn Sie die Authentifizierung mit aktivierenAWS_IAM
, können nur Aufrufer mit ausdrücklichen Berechtigungen zum Aufrufen einer API die API-Gateway-Methode dieser API erreichen.
Um Ihre API Gateway Gateway-Methode als benutzerdefinierten Identitätsanbieter für Transfer Family zu verwenden, aktivieren Sie IAM für Ihre API Gateway Gateway-Methode. Im Rahmen dieses Prozesses stellen Sie eine IAM-Rolle mit Berechtigungen für Transfer Family bereit, Ihr Gateway zu verwenden.
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- und 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 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
-
Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.
-
Folgen Sie den Anweisungen zum Bereitstellen eines AWS CloudFormation Stacks anhand einer vorhandenen Vorlage im Abschnitt Auswahl einer Stack-Vorlage im AWS CloudFormation Benutzerhandbuch.
-
Verwenden Sie eine der folgenden Basisvorlagen, um eine AWS Lambda-gestützte API-Gateway-Methode zur Verwendung als benutzerdefinierter Identitätsanbieter in Transfer Family zu erstellen.
-
Standardmäßig wird Ihre API Gateway Gateway-Methode als benutzerdefinierter Identitätsanbieter verwendet, um einen einzelnen Benutzer auf einem einzelnen Server mithilfe eines hartcodierten SSH-Schlüssels (Secure Shell) oder eines Passworts 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 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 lässt sich in Okta als benutzerdefinierter Identitätsanbieter in Transfer Family integrieren. 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 API-Methode auf Basis von API Gateway zu unterstützen. Anschließend können Sie Ihre API-Methode 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) des Stacks, der ARN der 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, protokolliert API 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 CloudWatch API-Protokollierung in API Gateway einrichten im API Gateway Developer Guide.
-
-
Überprüfen Sie die Konfiguration der API Gateway 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 Basisvorlagen-API für Transfer Custom Identity Provider aus, die von der AWS CloudFormation Vorlage generiert wurde. Möglicherweise müssen Sie Ihre Region auswählen, um Ihre Gateways zu sehen.
-
Wählen Sie im Bereich Ressourcen die Option GET aus. 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 API aus. Wählen Sie für die Bereitstellungsphase die Option prod und dann Deploy aus.
Nachdem die API Gateway Gateway-Methode erfolgreich bereitgestellt wurde, können Sie sich ihre Leistung unter Stufen > Phasendetails ansehen, wie im folgenden Screenshot gezeigt.
Anmerkung
Kopieren Sie die Invoke-URL-Adresse, 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 Textfeld Geben Sie eine Amazon API Gateway Gateway-URL ein die Aufruf-URL-Adresse 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- oder FTP-Serverendpunkts.
Implementierung Ihrer 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 URL-Abfragezeichenfolgenparameter zur 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 Amazon EFS-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 Gateway-Methode sollte immer den HTTP-Statuscode zurückgeben200
. Jeder andere HTTP-Statuscode bedeutet, dass beim Zugriff auf die API ein Fehler aufgetreten ist.
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": "/DOC-EXAMPLE-BUCKET/path
/to
/home
/directory
" }
Anmerkung
Der Richtlinie wird JSON als Zeichenfolge maskiert. Beispielsweise:
"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::DOC-EXAMPLE-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\":\"/DOC-EXAMPLE-BUCKET1\"}]", "PublicKeys":[""] }
Amazon EFS-Beispielantwort
Der Beispielantworttext ist ein JSON-Dokument der folgenden Form für Amazon EFS.
{ "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 öffentlichen SSH-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 gesetzt ist. Role
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 in die Lambda-Funktion im JSON-Format 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 das 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 FTP zu verwenden, da FTP im Gegensatz zu SFTP und FTPS Anmeldeinformationen im Klartext überträgt. Wenn FTP-Anmeldeinformationen von SFTP oder FTPS isoliert werden, bleiben Ihre Workloads, die SFTP oder FTPS verwenden, sicher, wenn FTP-Anmeldeinformationen geteilt oder offengelegt werden.
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 das HomeDirectoryTypeFeld ab.
-
HomeDirectoryType
gesetzt aufPATH
— dasHomeDirectory
Feld muss dann ein absolutes Amazon S3 S3-Bucket-Präfix oder ein absoluter Amazon EFS-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 im HomeDirectoryDetailsParameter beschriebenen Werten 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 Gateway-Schnittstelle vorgenommen. Die Vorlagen verwenden jetzt Base64-kodierte Passwörter mit dem API Gateway. Ihre bestehenden Bereitstellungen funktionieren auch ohne diese Erweiterung, lassen jedoch keine Passwörter zu, deren Zeichen außerhalb des grundlegenden US-ASCII-Zeichensatzes liegen.
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.