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 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
  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 /cloudformation. https://console.aws.amazon.com

    2. Folgen Sie den Anweisungen zum Bereitstellen eines AWS 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 mit -Unterstützung für die Verwendung als benutzerdefinierter Identitätsanbieter in Transfer Family zu erstellen.

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

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

    3. Wählen GETSie im Bereich Ressourcen. Der folgende Screenshot zeigt die korrekte Methodenkonfiguration.

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

    Details zur Phase, wobei der Invoke 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 Bildschirm mit dem Identitätsanbieter, auf dem Benutzerdefinierter Identitätsanbieter ausgewählt ist und das API Gateway für die Verbindung mit Ihrem Identitätsanbieter ausgewählt ist.
    2. 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.

    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 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/serverId/users/username/config. Die username Werte serverId und stammen aus dem RESTful Ressourcenpfad. Fügen Sie außerdem sourceIp und protocol als URLQuery-String-Parameter 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, 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 protocol Wert in den RESTful Ressourcenpfad aufnehmen.

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

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

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