Wie kann ich ein von Lambda unterstütztes API als benutzerdefinierten Identitätsanbieter für meinen Transfer Family Server verwenden, ohne dabei CloudFormation zu verwenden?

Lesedauer: 8 Minute
0

Ich möchte ein von AWS Lambda unterstütztes Amazon API Gateway API als benutzerdefinierten Identitätsanbieter für meinen AWS Transfer Family Server verwenden. Ich möchte jedoch keine der AWS-CloudFormation-Stack-Vorlagen für meine Konfiguration verwenden. Oder ich möchte meine Konfiguration anpassen. Wie kann ich auf diese Weise einen benutzerdefinierten Identitätsanbieter einrichten?

Kurzbeschreibung

Sie können ein von Lambda unterstütztes API-Gateway-API manuell als benutzerdefinierten Identitätsanbieter für Ihren Transfer Family Server konfigurieren, anstatt eine der CloudFormation-Stack-Vorlagen zu verwenden. Dazu können Sie direkt eine Lambda-Funktion und ein API-Gateway-API mit Ihrem Server konfigurieren.

Gehen Sie beispielsweise wie folgt vor, um dieselbe Konfiguration als grundlegende Stack-Vorlage einzurichten:

  1. Erstellen Sie eine AWS Identity and Access Management (IAM)-Rolle für die Lambda-Ausführungsrolle.

  2. Erstellen Sie die Lambda-Funktion.

  3. (Optional) Erstellen Sie eine IAM-Rolle für die API-Gateway-Protokollierungsrolle.

  4. Richten Sie ein API-Gateway-API als Identitätsanbieter ein.

  5. Erstellen Sie IAM-Rollen für den Transfer Family Server und die Serverbenutzer.

  6. Erstellen Sie den Transfer Family Server.

  7. Richten Sie Ihren Anmeldeinformationsspeicher ein.

Behebung

**Wichtig:**Diese Konfiguration ist ein Beispiel dafür, wie Sie Ihren benutzerdefinierten Identitätsanbieter einrichten können, ohne eine CloudFormation-Stack-Vorlage zu verwenden. Sie müssen die Konfigurationsschritte an Ihre spezifischen Anforderungen für den benutzerdefinierten Identitätsanbieter anpassen.

Erstellen Sie eine IAM-Rolle für die Lambda-Ausführungsrolle

  1. Verwenden Sie die IAM-Konsole, um die Ausführungsrolle zu erstellen. Hinweis: Für diese Konfiguration benötigen Sie nur die grundlegenden Ausführungsberechtigungen. Achten Sie jedoch darauf, die Berechtigungen für Ihren Anwendungsfall anzupassen.

  2. Ändern Sie die Vertrauensrichtlinie der Rolle, um die folgende Anweisung hinzuzufügen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Erstellen Sie die Lambda-Funktion

Folgen Sie den Schritten, um mithilfe der Konsole eine Lambda-Funktion zu erstellen. Stellen Sie sicher, dass Sie Folgendes konfigurieren:

  1. Wählen Sie für die Ausführungsrolle die Lambda-Ausführungsrolle aus, die Sie erstellt haben.

  2. Für den Funktionscode können Sie die Standard-Lambda-Funktion für die Authentifizierung verwenden. Sie können auch eine benutzerdefinierte Funktion verwenden.

(Optional) Erstellen Sie eine IAM-Rolle für die API-Gateway-Protokollierungsrolle

Sie können Amazon CloudWatch Logs verwenden, um Fehler mit Ihrer REST-API zu debuggen. Gehen Sie folgendermaßen vor, um eine Protokollierungsrolle zu erstellen:

  1. Erstellen Sie eine IAM-Rolle für API Gateway und hängen Sie die verwaltete AmazonAPIGatewayPushToCloudWatchLogs-Richtlinie an die Rolle an.

  2. Ändern Sie die Vertrauensrichtlinie der Rolle, um die folgende Anweisung hinzuzufügen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Richten Sie eine API-Gateway-API als Identitätsanbieter ein

  1. Öffnen Sie die API-Gateway-Konsole.

  2. Wählen Sie im Navigationsbereich APIs aus.

  3. Wählen Sie API erstellen aus.

  4. Navigieren Sie unter Wählen Sie einen API -Typ zu REST-API und wählen Sie dann Erstellen aus. Geben Sie dann Folgendes ein: Wählen Sie unter Wählen Sie das Protokoll die Option REST aus. Wählen Sie unter Neues API erstellen die Option Neues API aus. Geben Sie als API Name einen Namen für Ihr API ein. Wählen Sie für Endpunkttyp die Option Regional aus.

Hinweis: Erstellen Sie Ihr API nicht mit der Option REST-API Private.

  1. Wählen Sie API erstellen aus.

  2. Wählen Sie im Navigationsbereich Modelle aus. Wählen Sie dann Erstellen.

  3. Geben Sie als Modellnamen UserConfigResponseModel ein.

  4. Geben Sie als Inhaltstyp application/json ein.

  5. Geben Sie für Modellschema Folgendes ein:

{"$schema":"http://json-schema.org/draft-04/schema#","title":"UserUserConfig","type":"object","properties":{"Role":{"type":"string"},"Policy":{"type":"string"},"HomeDirectory":{"type":"string"},"PublicKeys":{"type":"array","items":{"type":"string"}}}}
  1. Wählen Sie Modell erstellen.

  2. Wählen Sie im Navigationsbereich Ressourcen aus.

  3. Erweitern Sie Aktionen und wählen Sie dann Ressource erstellen aus.

  4. Erstellen Sie eine Ressource für Ihre Transfer Family Server. Geben Sie als Ressourcenname Server ein. Geben Sie als Ressourcenpfad Server ein.

  5. Erstellen Sie eine Ressource für die Server-ID. Geben Sie als **Ressourcenname ** ServerID ein. Geben Sie als Ressourcenpfad {serverId} ein.

  6. Erstellen Sie eine Ressource für Ihre Serverbenutzer. Geben Sie als Ressourcenname Benutzer ein. Geben Sie als Ressourcenpfad Benutzer ein.

  7. Erstellen Sie eine Ressource für die Benutzernamen. Geben Sie als Ressourcenname den Benutzernamen ein. Geben Sie als Ressourcenpfad {username} ein.

  8. Erstellen Sie eine Ressource für Benutzerkonfigurationen. Geben Sie als Ressourcenname GetUserConfig ein. Geben Sie als ** Ressourcenpfad** config ein.

  9. Erweitern Sie Aktionen und wählen Sie dann Methode erstellen aus.

  10. Wählen Sie aus der Dropdown-Liste GET aus. Wählen Sie dann das Häkchensymbol neben GET, um die Methode zu erstellen.

  11. Geben Sie für GET - Setup Folgendes ein: Wählen Sie als Integrationstyp Lambda-Funktion aus. Wählen Sie als Lambda-Region die AWS-Region aus, in der sich Ihre Lambda-Funktion befindet. Wählen Sie als Lambda-Funktion die Funktion aus, die Sie erstellt haben.

  12. Wählen Sie Speichern aus.

  13. Wählen Sie Methodenanfrage aus. Geben Sie dann Folgendes ein: Wählen Sie für Autorisierung AWS\ _IAM aus. Wählen Sie für HTTP Request Header die Option Header hinzufügen aus. Geben Sie dann Passwort als Header-Namen ein. Wählen Sie für URL-Abfragezeichenfolgenparameter die Option Abfragezeichenfolge hinzufügen aus. Geben Sie dann Protokoll als Namen für die Abfragezeichenfolge ein. Wählen Sie erneut Abfragezeichenfolge hinzufügen aus und geben Sie dann sourceIp als weiteren Namen für die Abfragezeichenfolge ein.

  14. Wählen Sie in der Navigationsleiste der GET-Methode Methodenausführung aus, um zur Seite GET-Methodenausführung zurückzukehren.

  15. Wählen Sie Integrationsanfrage. Erweitern Sie dann Mapping-Vorlagen.

  16. Wählen Sie für Durchleitung für den Text anfordern die Option Wenn keine Vorlage mit dem Content Type Header der Anfrage übereinstimmt.

  17. Geben Sie als Content Type application/json ein. Wählen Sie zur Bestätigung das Häkchensymbol.

  18. Geben Sie für die Vorlage Folgendes ein:

{ "username": "$input.params('username')", "password": "$util.escapeJavaScript($input.params('Password')).replaceAll("\\'","'")", "serverId": "$input.params('serverId')", "protocol": "$input.params('protocol')","sourceIp": "$input.params('sourceIp')" }
  1. Wählen Sie Speichern.

  2. Wählen Sie in der Navigationsleiste der GET-Methode Methodenausführung aus, um zur Seite GET-Methodenausführung zurückzukehren.

  3. Wählen Sie Integrationsantwort. Vergewissern Sie sich, dass keine Zuordnungsvorlagen vorhanden sind und dass der Antworttext an die Methodenantwort weitergegeben wird.

  4. Wählen Sie in der Navigationsleiste der GET-Methode Methodenausführung aus, um zur Seite GET-Methodenausführung zurückzukehren.

  5. Wählen Sie **Methodenantwort.**Erweitern Sie dann 200.

  6. Bearbeiten Sie für Antworttext für 200 den Wert Modelle und wählen Sie dann das UserConfigResponseModel aus, das Sie in den Schritten 7 bis 10 erstellt haben. Wählen Sie zur Bestätigung das Häkchensymbol.

  7. Wählen Sie im Navigationsbereich Ressourcen die Option GET, dann Aktionen und dann API bereitstellen aus. Geben Sie Folgendes ein: Wählen Sie für die Bereitstellungsphase die Option ** [Neue Phase]** aus. Geben Sie unter Phasenname einen Namen für die Phase ein.

  8. Wählen Sie Bereitstellen aus.

  9. Wählen Sie im Navigationsbereich Phasen aus. Wählen Sie dann Erstellen und geben Sie Folgendes ein: Geben Sie als Phasennamen prod ein. Wählen Sie unter Bereitstellung die Bereitstellung aus, die Sie als neue Phase erstellt haben.

  10. Wählen Sie Erstellen.

IAM-Rollen für den Transfer Family Server und die Serverbenutzer erstellen

  1. Erstellen Sie eine IAM-Rolle für den Transfer Family Server, die Berechtigungen zum Aufrufen der von Ihnen erstellten API gewährt, ähnlich der folgenden:
{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": [
              "execute-api:Invoke"
          ],
          "Resource": "arn:aws:execute-api:{Region}:{AWS-Account-ID}:{API-Gateway-id}/{stage}/GET/*",
          "Effect": "Allow"
      },
      {
          "Action": [
              "apigateway:GET"
          ],
          "Resource": "*",
          "Effect": "Allow"
      }
  ]
}

2.Ändern Sie die Vertrauensrichtlinie der Rolle, um die folgende Anweisung hinzuzufügen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. [Erstellen Sie eine IAM-Rolle für die Transfer-Family-Serverbenutzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console), die [Zugriff auf den Amazon Simple Storage Service (Amazon S3) Bucket](https://docs.aws.amazon.com/transfer/latest/userguide/read-write-access.html) gewährt. [Ändern Sie dann die Vertrauensrichtlinie der Rolle](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy), um die Anweisung aus Schritt 2 hinzuzufügen.
    
  2. Erstellen Sie eine IAM-Rolle für den Transfer Family Server, der Protokolle an CloudWatch sendet. Ändern Sie dann die Vertrauensrichtlinie der Rolle, um die Anweisung aus Schritt 2 hinzuzufügen.

Erstellen Sie den Transfer Family Server

Folgen Sie den Schritten, um einen Transfer Family Server zu erstellen. Stellen Sie sicher, dass Sie Folgendes konfigurieren:

  1. Wählen Sie als Identitätsanbietertyp die Option Benutzerdefiniert aus. Geben Sie dann für Benutzerdefinierter Anbieter die API ein, die Sie erstellt haben.

  2. Wählen Sie als Aufruf-Rolle die IAM-Rolle aus, die dem Server Berechtigungen zum Aufrufen der von Ihnen erstellten API gewährt.

  3. Wählen Sie als Protokollierungsrolle die IAM-Rolle für den Server aus, der Protokolle an CloudWatch sendet.

Richten Sie Ihren Anmeldeinformationsspeicher ein

Sie müssen Ihren Anmeldeinformationsspeicher für die Benutzerkonfiguration einrichten. Weitere Informationen zur Einrichtung eines Speichers für Anmeldeinformationen finden Sie unter Standard-Lambda-Funktion und Aktivieren der Passwort-Authentifizierung für AWS Transfer for SFTP mithilfe von AWS Secrets Manager.

Sie müssen mindestens die folgenden Felder einrichten, damit Benutzer Aktionen im Amazon S3 Bucket ausführen können:

  • Benutzername
  • Passwort
  • HomeVerzeichnis
  • Rolle

Hinweis: Die Rolle ist der Amazon-Ressourcenname (ARN) der IAM-Rolle, die Sie erstellt haben, um Serverbenutzern Zugriff auf den Amazon S3 Bucket zu gewähren.

Testen und Problembehebung Ihres Setups

Sie können Ihr Setup auf folgende Weise testen:

Wenn Sie Probleme mit Ihrem Setup haben, können Sie das Problem auf folgende Weise beheben:

  • Überprüfen Sie die Antwort des Testidentitätsanbieters. Wenn der Statuscode nicht 200 ist, kann es Probleme mit dem API Setup geben.
  • Vergewissern Sie sich, dass die von Ihnen erstellten IAM-Rollen über die richtigen Berechtigungen und Vertrauensbeziehungen verfügen.
  • Diese Konfiguration aktiviert die Protokollierung, und Sie können Lambda-Ausführungsprotokolle, API-Gateway-Protokolle und Transfer-Family-Protokolle überprüfen, um Probleme zu identifizieren.
  • Wenn das von Ihnen benötigte benutzerdefinierte Identitätsanbieter-Setup mit einem der verfügbaren CloudFormation-Stacks übereinstimmt, können Sie versuchen, die CloudFormation-Vorlage bereitzustellen und mit Ihrem Setup zu vergleichen, um Probleme zu identifizieren.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren