Verwenden Sie Amazon API Gateway zur Integration Ihres Identitätsanbieters - 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 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
  1. 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

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

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

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

      • Grundlegende Stack-Vorlage

        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 Formatsaws/transfer/server-id/username. 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 Manager.

      • Okta-Stack-Vorlage

        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.

  2. Überprüfen Sie die Konfiguration der API Gateway 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 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.

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

      API-Konfigurationsdetails mit den Methodenkonfigurationsparametern für die Anforderungspfade und die für die URL-Abfragezeichenfolge.

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

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

    Details zur Phase, wobei 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 und dann Amazon API Gateway verwenden, um eine Verbindung zu Ihrem Identitätsanbieter herzustellen, wie im folgenden Screenshot gezeigt.

      Der Identitätsanbieter-Bildschirm mit ausgewähltem Custom Identity Provider und ausgewähltem API Gateway für die Verbindung mit Ihrem Identitätsanbieter.
    2. 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.

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

    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.

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/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 zur Methodenanforderung hinzu, wie in der folgenden Abbildung gezeigt.

Der Ressourcenbildschirm des API Gateway 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, 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 protocol Wert in den RESTful-Ressourcenpfad aufnehmen.

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-rsa public-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-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. 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.

  • HomeDirectoryTypegesetzt auf PATH — das HomeDirectory 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.

  • HomeDirectoryTypegesetzt auf LOGICAL — Legen Sie kein HomeDirectory Feld fest. Stattdessen legen wir ein HomeDirectoryDetails 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 diesen RequestTemplates 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 die GetUserConfig Ressource muss geändert werden, damit der PasswordBase64 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
  1. Öffnen Sie die AWS CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Wählen Sie aus der Liste der Stacks Ihren Stack aus.

  3. Wählen Sie im Detailbereich die Registerkarte Vorlage aus.

  4. Achten Sie auf Folgendes:

    • Suchen Sie nach dieser Zeile und stellen Sie sicherRequestTemplates, dass Sie sie haben:

      "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
    • Suchen Sie nach dieser Zeile und stellen Sie sicherRequestParameters, 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.