View a markdown version of this page

Einrichtung einer Amazon API Gateway-Methode als benutzerdefinierter Identitätsanbieter - 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.

Einrichtung einer Amazon API Gateway-Methode als benutzerdefinierter Identitätsanbieter

Dieses Tutorial veranschaulicht, wie Sie eine Amazon API Gateway-Methode einrichten und sie als benutzerdefinierten Identitätsanbieter verwenden, um Dateien auf einen AWS Transfer Family Server hochzuladen. In diesem Tutorial werden die Basic-Stack-Vorlage und andere grundlegende Funktionen nur als Beispiel verwendet.

Voraussetzungen

Bevor Sie die Transfer Family-Ressourcen in erstellen CloudFormation, erstellen Sie Ihren Speicher und Ihre Benutzerrolle.

Um den Speicher anzugeben und eine Benutzerrolle zu erstellen
  1. Je nachdem, welchen Speicher Sie verwenden, finden Sie weitere Informationen in der folgenden Dokumentation:

  2. Informationen zum Erstellen einer Benutzerrolle finden Sie unter Erstellen Sie eine IAM-Rolle und -Richtlinie

Sie geben die Details für Ihren Speicher und Ihre Benutzerrolle ein, wenn Sie Ihren CloudFormation Stack im nächsten Abschnitt erstellen.

Schritt 1: Erstellen Sie einen CloudFormation Stack

Um einen zu erstellen AWS CloudFormation Stapel aus der mitgelieferten Vorlage
  1. Öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Wählen Sie Stapel erstellen und dann Mit neuen Ressourcen (Standard) aus.

  3. Wählen Sie im Bereich Voraussetzung — Vorlage vorbereiten die Option Vorhandene Vorlage auswählen aus.

  4. Kopieren Sie diesen Link, Basic Stack Template, und fügen Sie ihn in das Amazon S3-URL-Feld ein.

  5. Klicken Sie auf Weiter.

  6. Geben Sie Parameter an, einschließlich eines Namens für Ihren Stack. Stellen Sie sicher, dass Sie Folgendes tun:

    • Ersetzen Sie die Standardwerte für UserName und UserPassword.

    • Geben Sie für UserHomeDirectory die Details des Speichers (entweder ein Amazon S3-Bucket oder ein Amazon EFS-Dateisystem) ein, den Sie zuvor erstellt haben.

    • Ersetzen Sie die Standardeinstellung UserRoleArn durch die Benutzerrolle, die Sie zuvor erstellt haben. Die AWS Identity and Access Management (IAM-) Rolle muss über die entsprechenden Berechtigungen verfügen. Ein Beispiel für eine IAM-Rolle und eine Bucket-Richtlinie finden Sie unter. Schritt 6: Beschränken Sie den Zugriff auf den Bucket

    • Wenn Sie sich mit einem öffentlichen Schlüssel statt mit einem Passwort authentifizieren möchten, geben Sie Ihren öffentlichen Schlüssel in das UserPublicKey1 Feld ein. Wenn Sie zum ersten Mal über SFTP eine Verbindung zum Server herstellen, geben Sie den privaten Schlüssel anstelle eines Passworts ein.

  7. Wählen Sie Weiter und dann erneut auf der Seite „Stack-Optionen konfigurieren“ die Option Weiter aus.

  8. Überprüfen Sie die Details für den Stapel, den Sie erstellen, und wählen Sie dann Stapel erstellen aus.

    Anmerkung

    Unten auf der Seite müssen Sie unter Capabilities bestätigen, dass CloudFormation möglicherweise IAM-Ressourcen erstellt werden.

Schritt 2: Überprüfen Sie die API-Gateway-Methodenkonfiguration für Ihren Server

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 die API-Gateway-Methodenkonfiguration für Ihren Server zu überprüfen und bereitzustellen
  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.

  3. Wählen Sie im Bereich Ressourcen GET und dann Method Request aus.

  4. 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 im Abschnitt Stage Editor ansehen.

    Anmerkung

    Kopieren Sie die Invoke-URL-Adresse, die oben auf der Seite angezeigt wird. Sie benötigen sie für den nächsten Schritt.

Schritt 3: Sehen Sie sich die Serverdetails von Transfer Family an

Wenn Sie die Vorlage verwenden, um einen CloudFormation Stack zu erstellen, wird automatisch ein Transfer Family-Server erstellt.

Um die Details Ihres Transfer Family-Servers einzusehen
  1. Öffnen Sie die CloudFormation Konsole unter https://console.aws.amazon.com/cloudformation.

  2. Wählen Sie den Stapel aus, den Sie erstellt haben.

  3. Wählen Sie die Registerkarte Resources (Ressourcen) aus.

    Bildschirm, auf dem die Liste der Ressourcen angezeigt wird, die bei der Erstellung des CloudFormation Stacks erstellt wurden, wobei die Details für den Transfer Family-Server hervorgehoben sind.

    Der Server-ARN wird in der Spalte Physikalische ID für die TransferServer Zeile angezeigt. Die Server-ID ist im ARN enthalten, zum Beispiel s-11112222333344445.

  4. Öffnen Sie die AWS Transfer Family Konsole unter https://console.aws.amazon.com/transfer/, und wählen Sie auf der Seite Server den neuen Server aus.

    Die Server-ID entspricht der ID, die für die TransferServer Ressource in angezeigt wird CloudFormation.

Schritt 4: Testen Sie, ob Ihr Benutzer eine Verbindung zum Server herstellen kann

Um zu testen, ob Ihr Benutzer mithilfe der Transfer Family-Konsole eine Verbindung zum Server herstellen kann
  1. Öffnen Sie die AWS Transfer Family Konsole unter https://console.aws.amazon.com/transfer/.

  2. Wählen Sie auf der Seite Server Ihren neuen Server aus, klicken Sie auf Aktionen und dann auf Testen.

  3. Geben Sie den Text für Ihre Anmeldeinformationen in das Feld Benutzername und in das Feld Passwort ein. Dies sind die Werte, die Sie bei der Bereitstellung des CloudFormation Stacks festgelegt haben.

  4. Wählen Sie für Serverprotokoll die Option SFTP aus, und geben Sie 127.0.0.1 für Quell-IP ein.

  5. Wählen Sie Test aus.

    Wenn die Benutzerauthentifizierung erfolgreich ist, gibt der Test eine StatusCode: 200 HTML-Antwort und ein JSON-Objekt zurück, das die Details zu den Rollen und Berechtigungen des Benutzers enthält. Beispiel:

    { "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/my-user-role\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}", "StatusCode": 200, "Message": "", "Url": "https://1a2b3c4d5e.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234abcd5678efgh0/users/myuser/config" }

    Wenn der Test fehlschlägt, fügen Sie der Rolle, die Sie für Ihre API verwenden, eine der von API Gateway AWS verwalteten Richtlinien hinzu.

Schritt 5: Testen Sie die SFTP-Verbindung und die Dateiübertragung

Um die SFTP-Verbindung zu testen
  1. Öffnen Sie auf einem Linux- oder macOS-Gerät ein Befehlsterminal.

  2. Geben Sie einen der folgenden Befehle ein, je nachdem, ob Sie ein Passwort oder ein Schlüsselpaar für die Authentifizierung verwenden.

    • Wenn Sie ein Passwort verwenden, geben Sie diesen Befehl ein:

      sftp -o PubkeyAuthentication=no myuser@server-ID.server.transfer.region-code.amazonaws.com

      Geben Sie bei der Aufforderung Ihr Passwort ein.

    • Wenn Sie ein Schlüsselpaar verwenden, geben Sie diesen Befehl ein:

      sftp -i private-key-file myuser@server-ID.server.transfer.region-code.amazonaws.com

    Anmerkung

    Geben Sie für diese sftp Befehle den Code ein, AWS-Region an dem sich Ihr Transfer Family-Server befindet. Wenn sich Ihr Server beispielsweise in US East (Ohio) befindet, geben Sie einus-east-2.

  3. Stellen Sie bei der sftp> Aufforderung sicher, dass Sie Verzeichnisse und Dateien hochladen (putget), herunterladen () und anzeigen können (pwdundls).

Schritt 6: Beschränken Sie den Zugriff auf den Bucket

Sie können einschränken, wer auf einen bestimmten Amazon S3-Bucket zugreifen kann. Das folgende Beispiel zeigt die Einstellungen, die in Ihrem CloudFormation Stack und in der Richtlinie, die Sie für Ihren Benutzer auswählen, zu verwenden sind.

In diesem Beispiel legen wir die folgenden Parameter für den CloudFormation Stack fest:

  • CreateServer: true

  • UserHomeDirectory: /amzn-s3-demo-bucket1

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    Wichtig

    Dies ist ein Beispielpasswort. Wenn Sie Ihre API-Gateway-Methode konfigurieren, stellen Sie sicher, dass Sie ein sicheres Passwort eingeben.

  • UserPublicKey1: your-public-key

  • UserRoleArn: arn:aws:iam::role-id:role/myuser-api-gateway-role

Das UserPublicKey1 ist ein öffentlicher Schlüssel, den Sie als Teil eines public/private Schlüsselpaars generiert haben.

Der role-id ist einzigartig für die Benutzerrolle, die Sie erstellen. Die dem beigefügte Richtlinie myuser-api-gateway-role lautet wie folgt:

{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }

Um über SFTP eine Verbindung zum Server herzustellen, geben Sie an der Eingabeaufforderung einen der folgenden Befehle ein.

  • Wenn Sie ein Passwort zur Authentifizierung verwenden, führen Sie den folgenden Befehl aus:

    sftp -o PubkeyAuthentication=no myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

    Geben Sie bei der Aufforderung Ihr Passwort ein.

  • Wenn Sie ein Schlüsselpaar zur Authentifizierung verwenden, führen Sie den folgenden Befehl aus:

    sftp -i private-key-file myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

Anmerkung

Verwenden Sie für diese sftp Befehle die ID, AWS-Region an der sich Ihr Transfer Family-Server befindet. Wenn sich Ihr Server beispielsweise in den USA Ost (Ohio) befindet, verwenden Sieus-east-2.

Bei der sftp Eingabeaufforderung werden Sie zu Ihrem Basisverzeichnis weitergeleitet, das Sie mit dem pwd Befehl anzeigen können. Beispiel:

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1

Der Benutzer kann keine Verzeichnisse über dem Basisverzeichnis anzeigen. Beispiel:

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1 sftp> cd .. sftp> ls Couldn't read directory: Permission denied

Aktualisieren Sie Lambda, wenn Sie Amazon EFS verwenden

Wenn Sie Amazon EFS als Speicheroption für Ihren Transfer Family-Server ausgewählt haben, müssen Sie die Lambda-Funktion für Ihren Stack bearbeiten.

Um Ihrer Lambda-Funktion ein Posix-Profil hinzuzufügen
  1. Öffnen Sie die Lambda-Konsole unter https://console.aws.amazon.com/lambda/.

  2. Wählen Sie die Lambda-Funktion aus, die Sie zuvor erstellt haben. Die Lambda-Funktion hat das Format stack-name - GetUserConfigLambda - lambda-identifier, wobei stack-name der CloudFormation Stackname und lambda-identifier der Bezeichner für die Funktion sind.

  3. Wählen Sie auf der Registerkarte Code die Datei index.js aus, um den Code für die Funktion anzuzeigen.

  4. Fügen Sie in der response die folgende Zeile zwischen Policy und hinzuHomeDirectory:

    PosixProfile: {"Uid": uid-value, "Gid": gid-value},

    Wobei uid-value und ganze Zahlen (0 oder größer) gid-value sind, die die Benutzer-ID bzw. die Gruppen-ID darstellen.

    Nachdem Sie das Posix-Profil hinzugefügt haben, könnte das Antwortfeld beispielsweise wie folgt aussehen:

    response = { Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank Policy: '', // Optional JSON blob to further restrict this user's permissions PosixProfile: {"Gid": 65534, "Uid": 65534}, HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/' };