View a markdown version of this page

Verwenden Sie Amazon API Gateway, um Ihren Identitätsanbieter zu integrieren - AWS Transfer Family

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, um Ihren Identitätsanbieter zu integrieren

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 eine RESTful-API benötigen, um Ihren Identitätsanbieter zu integrieren, oder wenn Sie dessen Funktionen zum Geoblocking oder zur Ratenbegrenzung nutzen möchten. AWS WAF

Für die meisten Anwendungsfälle empfiehlt es sich, einen benutzerdefinierten Identitätsanbieter zu konfigurieren, die zu verwenden. Lösung für benutzerdefinierte Identitätsanbieter

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 keine private API-Gateway-URL.

Wenn Sie eine dieser Optionen benötigen, können Sie Lambda als Identitätsanbieter ohne API Gateway verwenden. Details hierzu finden Sie unter Verwenden AWS Lambda um Ihren Identitätsanbieter zu integrieren.

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 hochsichere Möglichkeit, APIs zu erstellen und bereitzustellen. Mit API Gateway können Sie einen HTTPS-Endpunkt erstellen, sodass alle eingehenden API-Operationen mit höherer Sicherheit übertragen werden. Weitere Informationen zum API Gateway-Dienst finden Sie im API Gateway Developer Guide.

API Gateway bietet eine Autorisierungsmethode namensAWS_IAM, mit der Sie dieselbe Authentifizierung auf der Grundlage von AWS Identity and Access Management (IAM) erhalten, die intern AWS verwendet wird. Wenn Sie die Authentifizierung mit aktivierenAWS_IAM, können nur Aufrufer mit expliziten Berechtigungen zum Aufrufen einer API die API-Gateway-Methode dieser API erreichen.

Um Ihre API Gateway-Methode als benutzerdefinierten Identitätsanbieter für Transfer Family zu verwenden, aktivieren Sie IAM für Ihre API-Gateway-Methode. Im Rahmen dieses Prozesses stellen Sie einer IAM-Rolle die Berechtigungen zur Verfügung, damit Transfer Family Ihr Gateway verwenden kann.

Anmerkung

Um die Sicherheit zu verbessern, können Sie eine Webanwendungs-Firewall konfigurieren. AWS WAF ist eine Webanwendungs-Firewall, 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 Webanwendungs-Firewall hinzu.

Aktivieren Sie das API-Gateway-Caching nicht

Aktivieren Sie das Caching nicht für Ihre API Gateway-Methode, wenn Sie sie als benutzerdefinierten Identitätsanbieter für Transfer Family verwenden. Caching ist unangemessen und für Authentifizierungsanfragen ungültig, weil:

  • Jede Authentifizierungsanfrage ist einzigartig und erfordert eine Live-Antwort, keine zwischengespeicherte Antwort

  • Caching bietet keine Vorteile, da Transfer Family niemals doppelte oder wiederholte Anfragen an das API Gateway sendet

  • Wenn Sie das Caching aktivieren, reagiert das API Gateway mit nicht übereinstimmenden Daten, was zu ungültigen Antworten auf Authentifizierungsanfragen führt

Um Ihre API Gateway-Methode für die benutzerdefinierte Authentifizierung mit Transfer Family zu verwenden
  1. Erstellen Sie einen CloudFormation Stapel. So gehen Sie vor:

    Anmerkung

    Die Stack-Vorlagen wurden für die Verwendung von BASE64-encoded Passwörtern aktualisiert: Einzelheiten finden Sie unterVerbesserungen an der CloudFormation Vorlagen.

    1. Öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

    2. Folgen Sie den Anweisungen zum Bereitstellen eines CloudFormation Stacks aus einer vorhandenen Vorlage unter Auswahl einer Stack-Vorlage im AWS CloudFormation Benutzerhandbuch.

    3. Verwenden Sie eine der folgenden Basisvorlagen, um eine AWS Lambda API-Gateway-Methode zu erstellen, die als benutzerdefinierter Identitätsanbieter in Transfer Family verwendet werden kann.

      • Einfache Stack-Vorlage

        Standardmäßig wird Ihre API-Gateway-Methode als benutzerdefinierter Identitätsanbieter verwendet, um einen einzelnen Benutzer auf einem einzelnen Server mithilfe eines fest codierten SSH-Schlüssels oder -Passworts (Secure Shell) 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 in Secrets Manager des Formatsaws/transfer/server-id/username. Darüber hinaus muss das Geheimnis die Schlüssel-Wert-Paare für alle Benutzereigenschaften enthalten, die an Transfer Family zurückgegeben werden. Nach der Bereitstellung können Sie den Lambda-Funktionscode ändern, um etwas anderes zu tun. Weitere Informationen finden Sie im Blogbeitrag Passwortauthentifizierung für die AWS Transfer Family Verwendung AWS Secrets Manager aktivieren.

      • Okta-Stack-Vorlage

        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-Workflow zu integrieren. Jeder Stack verwendet die Lambda-Funktion, um Ihre auf API Gateway basierende API-Methode 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 von 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 Standard-Anmeldeinformationen für Benutzer und Passwort 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 benutzerdefinierte Identitätsanbieter-Option verwenden, um die kennwortbasierte 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 Einrichten der CloudWatch API-Protokollierung in API Gateway im API Gateway Developer Guide.

  2. Überprüfen Sie die Konfiguration der API Gateway-Methode für Ihren Server. So gehen Sie vor:

    1. Öffnen Sie die API Gateway-Konsole unter https://console.aws.amazon.com/apigateway/.

    2. Wählen Sie die grundlegende Vorlagen-API für Transfer Custom Identity Provider aus, die von der CloudFormation Vorlage generiert wurde. Möglicherweise müssen Sie Ihre Region auswählen, um Ihre Gateways zu sehen.

    3. Wählen Sie im Bereich Ressourcen die Option GET aus. Der folgende Screenshot zeigt die richtige Methodenkonfiguration.

      API-Konfigurationsdetails, die die Methodenkonfigurationsparameter für die Anforderungspfade und die für die URL-Abfragezeichenfolge zeigen.

    Zu diesem Zeitpunkt ist Ihr API-Gateway bereit für die Bereitstellung.

  3. Wählen Sie für Aktionen die Option API bereitstellen aus. 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 > Staging-Details ansehen, wie im folgenden Screenshot gezeigt.

    Anmerkung

    Kopieren Sie die Aufruf-URL-Adresse, die oben auf dem Bildschirm angezeigt wird. Möglicherweise benötigen Sie sie für den nächsten Schritt.

    Details zur Phase, bei der die Aufruf-URL hervorgehoben ist.
  4. Öffnen Sie die AWS Transfer Family Konsole unter. https://console.aws.amazon.com/transfer/

  5. 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.

    1. 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 aus und wählen Sie dann Amazon API Gateway verwenden, um eine Verbindung zu Ihrem Identitätsanbieter herzustellen, wie im folgenden Screenshot gezeigt.

      Der Bildschirm „Identitätsanbieter“, auf dem der benutzerdefinierte Identitätsanbieter und das API-Gateway für die Verbindung mit Ihrem Identitätsanbieter ausgewählt sind.
    2. Fügen Sie in das Textfeld Eine Amazon API Gateway-URL angeben die Aufruf-URL-Adresse des API-Gateway-Endpunkts ein, den Sie in Schritt 3 dieses Verfahrens erstellt haben.

    3. Wählen Sie für Rolle die IAM-Rolle aus, die mit der CloudFormation Vorlage erstellt wurde. Diese Rolle ermöglicht es Transfer Family, Ihre API-Gateway-Methode aufzurufen.

      Die Aufrufrolle enthält den CloudFormation Stack-Namen, den Sie für den Stack ausgewählt haben, den Sie in Schritt 1 erstellt haben. Sie hat das folgende Format:CloudFormation-stack-name-TransferIdentityProviderRole-ABC123DEF456GHI.

    4. 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.

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/serverId/users/username/config. Die username Werte serverId und stammen aus dem RESTful-Ressourcenpfad. Fügen Sie außerdem sourceIp und protocol als URL-Abfragezeichenfolgenparameter in der Methodenanforderung hinzu, wie in der folgenden Abbildung gezeigt.

Der Ressourcenbildschirm des API-Gateways mit den GET Methodendetails.
Anmerkung

Der Benutzername muss mindestens 3 und maximal 100 Zeichen lang sein. Sie können die folgenden Zeichen im Benutzernamen verwenden: a—z, 0—9 A-Z, Unterstrich '_', Bindestrich '-', Punkt '.' und das Zeichen '@'. Der Benutzername darf nicht mit einem Bindestrich '-', Punkt '.' oder dem Zeichen '@' beginnen.

Wenn Transfer Family versucht, Ihren Benutzer mit einem Passwort zu authentifizieren, stellt der Dienst ein Password: Header-Feld zur Verfügung. Wenn kein Password: Header vorhanden ist, versucht Transfer Family, Ihren Benutzer mit einem öffentlichen Schlüssel zu authentifizieren.

Wenn Sie einen Identitätsanbieter zur Authentifizierung und Autorisierung von Endbenutzern verwenden, können Sie zusätzlich zur Überprüfung ihrer Anmeldeinformationen 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 die Abfragezeichenfolge aufnehmen.

Wenn Sie mehrere Protokolle für Ihren Server aktiviert haben und den Zugriff mit demselben Benutzernamen über mehrere Protokolle hinweg gewähren 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 protocol Wert in den RESTful-Ressourcenpfad aufnehmen.

Ihre API-Gateway-Methode sollte immer den HTTP-Statuscode 200 zurückgeben. Jeder andere HTTP-Statuscode bedeutet, dass beim Zugriff auf die API ein Fehler aufgetreten ist.

Amazon 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-rsa public-key2" ], "Policy": "STS Assume role session policy", "HomeDirectory": "/amzn-s3-demo-bucket/path/to/home/directory" }
Anmerkung

Der Richtlinie wird JSON als Zeichenfolge maskiert. Beispiel:

"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::amzn-s3-demo-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 Basisverzeichnistyp hat.

{ "Role": "arn:aws:iam::123456789012:role/transfer-access-role-s3", "HomeDirectoryType":"LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/amzn-s3-demo-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-rsa public-key1", "ssh-rsa public-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. weil das Passwort falsch ist, sollte Ihre Methode eine Antwort ohne Role Set zurückgeben. Ein Beispiel für eine solche Antwort ist ein leeres JSON-Objekt.

Die folgende Beispielantwort zeigt einen Benutzer mit einem logischen Basisverzeichnistyp.

{ "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 von Zugriffssteuerungen.

Standard-Lambda-Funktion

Um verschiedene Authentifizierungsstrategien zu implementieren, bearbeiten Sie die Lambda-Funktion, die Ihr Gateway verwendet. Um Ihnen zu helfen, die Anforderungen Ihrer Anwendung zu erfüllen, können Sie die folgenden Lambda-Beispielfunktionen in verwenden. Node.js Weitere Informationen zu Lambda finden Sie im AWS Lambda Entwicklerhandbuch oder im Abschnitt Erstellen von Lambda-Funktionen mit. Node.js

Das folgende Beispiel für eine Lambda-Funktion 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 Ihren Identitätsanbieter nachzuschlagen 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 hinweg gewähren 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 von 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. Indem Sie FTP-Anmeldeinformationen von SFTP oder FTPS isolieren, bleiben Ihre Workloads, die SFTP oder FTPS verwenden, sicher, wenn FTP-Anmeldeinformationen gemeinsam genutzt oder offengelegt werden.

Diese Beispielfunktion gibt die Details zur Rolle und zum logischen Basisverzeichnis zusammen mit den öffentlichen Schlüsseln zurück (wenn sie eine Authentifizierung mit öffentlichen Schlüsseln durchführt).

Wenn Sie dienstverwaltete Benutzer erstellen, legen Sie deren Basisverzeichnis entweder logisch oder physisch fest. Ebenso benötigen wir die Ergebnisse der Lambda-Funktion, um die gewünschte physische oder logische Verzeichnisstruktur für Benutzer zu vermitteln. Die Parameter, die Sie festlegen, hängen vom Wert für das HomeDirectoryType Feld ab.

  • HomeDirectoryTypegesetzt auf PATH — das HomeDirectory Feld muss dann ein absolutes Amazon S3-Bucket-Präfix oder ein absoluter Amazon EFS-Pfad sein, der für Ihre Benutzer sichtbar ist.

  • HomeDirectoryTypegesetzt auf LOGICAL — Legen Sie kein HomeDirectory Feld fest. Stattdessen legen wir ein HomeDirectoryDetails Feld fest, das die gewünschten Entry/Target Zuordnungen bereitstellt, ähnlich den im HomeDirectoryDetails Parameter beschriebenen Werten für dienstverwaltete Benutzer.

Die Beispielfunktionen sind in aufgeführt. Beispiel 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 CloudFormation Beispielvorlage arbeiten. Die Lambda-Funktion fragt den Secrets Manager-Dienst mit Ihren Anmeldeinformationen ab und gibt, falls erfolgreich, ein bestimmtes Geheimnis zurück. Weitere Informationen zu Secrets Manager finden Sie im Benutzerhandbuch für AWS Secrets Manager.

Um eine CloudFormation Beispielvorlage herunterzuladen, die diese Lambda-Funktion verwendet, rufen Sie den Amazon S3-Bucket von auf. AWS Transfer Family

Verbesserungen an der CloudFormation Vorlagen

An den veröffentlichten CloudFormation Vorlagen wurden Verbesserungen an der API Gateway-Schnittstelle vorgenommen. Die Vorlagen verwenden jetzt BASE64-encoded Passwörter mit dem API Gateway. Ihre vorhandenen Bereitstellungen funktionieren auch ohne diese Erweiterung, erlauben jedoch keine Passwörter mit Zeichen außerhalb des US-ASCII Basiszeichensatzes.

Die Änderungen in der Vorlage, die diese Funktion ermöglichen, lauten wie folgt:

  • Die GetUserConfigRequest AWS::ApiGateway::Method Ressource muss diesen RequestTemplates Code haben (die kursive 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')" }
  • Das RequestParameters für die GetUserConfig Ressource muss geändert werden, um den PasswordBase64 Header verwenden zu können (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 das Template für deinen Stack das neueste ist
  1. Öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Wählen Sie Ihren Stapel aus der Liste der Stapel aus.

  3. Wählen Sie im Detailbereich den Tab Vorlage aus.

  4. Achten Sie auf Folgendes:

    • Suchen Sie nach und vergewissern Sie sichRequestTemplates, dass Sie die folgende Zeile haben:

      "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
    • Suchen Sie nach und vergewissern Sie sichRequestParameters, dass Sie die folgende Zeile haben:

      method.request.header.PasswordBase64: false

Wenn du die aktualisierten Zeilen nicht siehst, bearbeite deinen Stapel. Einzelheiten zum Aktualisieren Ihres CloudFormation Stacks finden Sie unter Ändern einer Stack-Vorlage im AWS CloudFormation; Benutzerhandbuch.