

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.

# Wird AWS Lambda zur Integration Ihres Identitätsanbieters verwendet
<a name="custom-lambda-idp"></a>

In diesem Thema wird beschrieben, wie Sie eine AWS Lambda Funktion erstellen, die eine Verbindung zu Ihrem benutzerdefinierten Identitätsanbieter herstellt. Sie können einen beliebigen benutzerdefinierten Identitätsanbieter wie Okta, Secrets Manager oder einen benutzerdefinierten Datenspeicher verwenden OneLogin, der Autorisierungs- und Authentifizierungslogik enthält.

Für die meisten Anwendungsfälle wird empfohlen, einen benutzerdefinierten Identitätsanbieter zu konfigurieren, die [Lösung für einen benutzerdefinierten Identitätsanbieter](custom-idp-toolkit.md) Verwendung von.

**Anmerkung**  
Bevor Sie einen Transfer Family Family-Server erstellen, der Lambda als Identitätsanbieter verwendet, müssen Sie die Funktion erstellen. Eine Beispielfunktion für Lambda finden Sie unter [Beispiele für Lambda-Funktionen](#lambda-auth-examples). Oder Sie können einen CloudFormation Stack bereitstellen, der einen der [Lambda-Funktionsvorlagen](#lambda-idp-templates) folgenden verwendet. Stellen Sie außerdem sicher, dass Ihre Lambda-Funktion eine ressourcenbasierte Richtlinie verwendet, die Transfer Family vertraut. Eine Beispielrichtlinie finden Sie unter [Ressourcenbasierte Lambda-Richtlinie](#lambda-resource-policy).

1. Öffnen Sie die [AWS Transfer Family -Konsole](https://console.aws.amazon.com/transfer/).

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 **Benutzerdefinierter Identitätsanbieter** aus, wie im folgenden Screenshot gezeigt.  
![\[Im Bereich Konsole „Identitätsanbieter auswählen“ ist die Option Benutzerdefinierter Identitätsanbieter ausgewählt. Außerdem ist der Standardwert ausgewählt, der besagt, dass Benutzer sich entweder mit ihrem Passwort oder Schlüssel authentifizieren können.\]](http://docs.aws.amazon.com/de_de/transfer/latest/userguide/images/custom-lambda-console.png)
**Anmerkung**  
Die Wahl der Authentifizierungsmethoden ist nur verfügbar, wenn Sie SFTP als eines der Protokolle für Ihren Transfer Family Family-Server aktivieren.

1. Vergewissern Sie sich, dass der Standardwert „** AWS Lambda Zur Verbindung Ihres Identitätsanbieters verwenden**“ ausgewählt ist.

1. Wählen Sie unter **AWS Lambda Funktion** den Namen Ihrer Lambda-Funktion.

1. Füllen Sie die verbleibenden Felder aus und wählen Sie dann **Server erstellen** aus. Einzelheiten zu den verbleibenden Schritten zum Erstellen eines Servers finden Sie unter[Konfiguration eines SFTP-, FTPS- oder FTP-Serverendpunkts](tf-server-endpoint.md).

## Ressourcenbasierte Lambda-Richtlinie
<a name="lambda-resource-policy"></a>

Sie benötigen eine Richtlinie, die auf den Transfer Family Family-Server und Lambda ARNs verweist. Sie könnten beispielsweise die folgende Richtlinie mit Ihrer Lambda-Funktion verwenden, die eine Verbindung zu Ihrem Identitätsanbieter herstellt. Bei der Richtlinie wird JSON als Zeichenfolge maskiert.

****  

```
"Policy":
"{\"Version\":\"2012-10-17\",
\"Id\":\"default\",
\"Statement\":[
  {\"Sid\":\"AllowTransferInvocation\",
  \"Effect\":\"Allow\",
  \"Principal\":{\"Service\":\"transfer.amazonaws.com\"},
  \"Action\":\"lambda:InvokeFunction\",
  \"Resource\":\"arn:aws:lambda:region:123456789012:function:my-lambda-auth-function\",
  \"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:transfer:region:123456789012:server/server-id\"}}}
]}"
```

**Anmerkung**  
Ersetzen Sie in der obigen Beispielrichtlinie jede Richtlinie *user input placeholder* durch Ihre eigenen Informationen.

## Struktur von Ereignismeldungen
<a name="event-message-structure"></a>

Die Struktur der Ereignisnachrichten, die vom SFTP-Server an die Lambda-Funktion des Autorisierers für einen benutzerdefinierten IDP gesendet werden, lautet wie folgt.

```
{
    "username": "value",
    "password": "value",
    "protocol": "SFTP",
    "serverId": "s-abcd123456",
    "sourceIp": "192.168.0.100"
}
```

Wo `username` und `password` sind die Werte für die Anmeldeinformationen, die an den Server gesendet werden.

Sie geben beispielsweise den folgenden Befehl ein, um eine Verbindung herzustellen:

```
sftp bobusa@server_hostname
```

Sie werden dann aufgefordert, Ihr Passwort einzugeben:

```
Enter password:
    mysecretpassword
```

Sie können dies von Ihrer Lambda-Funktion aus überprüfen, indem Sie das übergebene Ereignis aus der Lambda-Funktion heraus drucken. Es sollte dem folgenden Textblock ähneln.

```
{
    "username": "bobusa",
    "password": "mysecretpassword",
    "protocol": "SFTP",
    "serverId": "s-abcd123456",
    "sourceIp": "192.168.0.100"
}
```

Die Ereignisstruktur ist für FTP und FTPS ähnlich: Der einzige Unterschied besteht darin, dass diese Werte für den `protocol` Parameter und nicht für SFTP verwendet werden.

## Lambda-Funktionen für die Authentifizierung
<a name="authentication-lambda-examples"></a>

Bearbeiten Sie die Lambda-Funktion, um verschiedene Authentifizierungsstrategien zu implementieren. Um die Anforderungen Ihrer Anwendung zu erfüllen, können Sie einen CloudFormation Stack bereitstellen. Weitere Informationen zu Lambda finden Sie im [AWS Lambda Developer Guide](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) oder im [Building Lambda functions with Node.js](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html).

**Topics**
+ [Gültige Lambda-Werte](#lambda-valid-values)
+ [Beispiele für Lambda-Funktionen](#lambda-auth-examples)
+ [Testen Sie Ihre Konfiguration](#authentication-test-configuration)
+ [Lambda-Funktionsvorlagen](#lambda-idp-templates)

### Gültige Lambda-Werte
<a name="lambda-valid-values"></a>

In der folgenden Tabelle werden Details zu den Werten beschrieben, die Transfer Family für Lambda-Funktionen akzeptiert, die für benutzerdefinierte Identitätsanbieter verwendet werden.


|  Wert  |  Description  |  Erforderlich  | 
| --- | --- | --- | 
|  `Role`  |  Gibt den Amazon-Ressourcennamen (ARN) der IAM-Rolle an, die den Zugriff Ihrer Benutzer auf Ihren Amazon S3-Bucket oder Ihr Amazon EFS-Dateisystem steuert. Die mit dieser Rolle verknüpften Richtlinien bestimmen die Zugriffsebene, die Sie Ihren Benutzern beim Übertragen von Dateien in und aus Ihrem Amazon S3- oder Amazon EFS-Dateisystem gewähren möchten. Die IAM-Rolle sollte außerdem eine Vertrauensstellung enthalten, mit der der Server Zugriff auf Ihre Ressourcen erhält, wenn er die Übertragungsanfragen Ihres Benutzers bearbeitet. Einzelheiten zum Aufbau einer Vertrauensbeziehung finden Sie unter[So stellen Sie eine Vertrauensbeziehung her](requirements-roles.md#establish-trust-transfer).  |  Erforderlich  | 
|  `PosixProfile`  |  Die vollständige POSIX-Identität, einschließlich Benutzer-ID (`Uid`), Gruppen-ID (`Gid`) und jeder sekundären Gruppe IDs (`SecondaryGids`), die den Zugriff Ihrer Benutzer auf Ihre Amazon EFS-Dateisysteme steuert. Die POSIX-Berechtigungen, die für Dateien und Verzeichnisse in Ihrem Dateisystem festgelegt sind, bestimmen die Zugriffsebene, die Ihre Benutzer beim Übertragen von Dateien in und aus Ihren Amazon EFS-Dateisystemen erhalten.  |  Erforderlich für Amazon EFS-Backing-Speicher  | 
|  `PublicKeys`  |  Eine Liste der Werte für öffentliche SSH-Schlüssel, die für diesen Benutzer gültig sind. Eine leere Liste bedeutet, dass dies kein gültiges Login ist. Darf bei der Passwortauthentifizierung nicht zurückgegeben werden.  |  Optional  | 
|  `Policy`  |  Eine Sitzungsrichtlinie für Ihren Benutzer, sodass Sie dieselbe IAM-Rolle für mehrere Benutzer verwenden können. Diese Richtlinie grenzt den Benutzerzugriff auf Teile ihres Amazon S3-Buckets ein. Weitere Informationen zur Verwendung von Sitzungsrichtlinien mit benutzerdefinierten Identitätsanbietern finden Sie in den Beispielen für Sitzungsrichtlinien in diesem Thema.  |  Optional  | 
|  `HomeDirectoryType`  |  Die Art des Zielverzeichnisses (Ordners), das das Home-Verzeichnis Ihrer Benutzer sein soll, wenn sie sich beim Server anmelden. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/transfer/latest/userguide/custom-lambda-idp.html)  |  Optional  | 
|  `HomeDirectoryDetails`  |  Logische Verzeichniszuordnungen, die angeben, welche Amazon S3- oder Amazon EFS-Pfade und -Schlüssel für Ihren Benutzer sichtbar sein sollen und wie Sie sie sichtbar machen möchten. Sie müssen das `Entry` `Target` Und-Paar angeben, das `Entry` zeigt, wie der Pfad sichtbar gemacht `Target` wird und der tatsächliche Amazon S3- oder Amazon EFS-Pfad ist.  |  Erforderlich, wenn `HomeDirectoryType` der Wert `LOGICAL`  | 
|  `HomeDirectory`  |  Das Zielverzeichnis für einen Benutzer, wenn er sich über den Client am Server anmeldet. Das Format hängt von Ihrem Speicher-Backend ab: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/transfer/latest/userguide/custom-lambda-idp.html)  Der Bucket-Name oder die Amazon EFS-Dateisystem-ID müssen im Pfad enthalten sein. Wenn Sie diese Informationen weglassen, treten bei Dateiübertragungen die Fehlermeldung „Datei nicht gefunden“ auf.   |  Optional  | 

**Anmerkung**  
`HomeDirectoryDetails`ist eine Zeichenkettendarstellung einer JSON-Map. Dies steht im Gegensatz zu`PosixProfile`, was ein eigentliches JSON-Map-Objekt ist und `PublicKeys` welches ein JSON-Array von Zeichenketten ist. Die sprachspezifischen Details finden Sie in den Codebeispielen.

**HomeDirectory Anforderungen an das Format**  
Achten Sie bei der Verwendung des `HomeDirectory` Parameters darauf, dass Sie das vollständige Pfadformat angeben:  
**Für Amazon S3 S3-Speicher:** Geben Sie immer den Bucket-Namen im Format an `/bucket-name/path`
**Für Amazon EFS-Speicher:** Geben Sie immer die Dateisystem-ID im Format an `/fs-12345/path`
Eine häufige Ursache für Fehler „Datei nicht gefunden“ ist das Auslassen des Bucket-Namens oder der EFS-Dateisystem-ID im `HomeDirectory` Pfad. Die Einstellung „`HomeDirectory`Nur `/` ohne Speicher-ID“ führt dazu, dass die Authentifizierung erfolgreich ist, Dateioperationen jedoch fehlschlagen.

### Beispiele für Lambda-Funktionen
<a name="lambda-auth-examples"></a>

In diesem Abschnitt werden einige Lambda-Beispielfunktionen sowohl in NodeJS als auch in Python vorgestellt.

**Anmerkung**  
In diesen Beispielen sind der Benutzer, die Rolle, das POSIX-Profil, das Passwort und die Home-Verzeichnisdetails allesamt Beispiele und müssen durch Ihre tatsächlichen Werte ersetzt werden.

------
#### [ Logical home directory, NodeJS ]

Die folgende NodeJS-Beispielfunktion stellt die Details für einen Benutzer bereit, der über ein [logisches Home-Verzeichnis](https://docs.aws.amazon.com/transfer/latest/userguide/logical-dir-mappings.html) verfügt. 

```
// GetUserConfig Lambda

exports.handler = (event, context, callback) => {
  console.log("Username:", event.username, "ServerId: ", event.serverId);

  var response;
  // Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  if (event.serverId !== "" && event.username == 'example-user') {
    var homeDirectoryDetails = [
      {
        Entry: "/",
        Target: "/fs-faa1a123"
      }
    ];
    response = {
      Role: 'arn:aws:iam::123456789012:role/transfer-access-role', // The user is authenticated if and only if the Role field is not blank
      PosixProfile: {"Gid": 65534, "Uid": 65534}, // Required for EFS access, but not needed for S3
      HomeDirectoryDetails: JSON.stringify(homeDirectoryDetails),
      HomeDirectoryType: "LOGICAL",
    };

    // Check if password is provided
    if (!event.password) {
      // If no password provided, return the user's SSH public key
      response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ];
    // Check if password is correct
    } else if (event.password !== 'Password1234') {
      // Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {};
    }
  } else {
    // Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {};
  }
  callback(null, response);
};
```

------
#### [ Path-based home directory, NodeJS ]

Die folgende NodeJS-Beispielfunktion stellt die Details für einen Benutzer bereit, der über ein pfadbasiertes Home-Verzeichnis verfügt. 

```
// GetUserConfig Lambda

exports.handler = (event, context, callback) => {
  console.log("Username:", event.username, "ServerId: ", event.serverId);

  var response;
  // Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  // There is also event.protocol (one of "FTP", "FTPS", "SFTP") and event.sourceIp (e.g., "127.0.0.1") to further restrict logins.
  if (event.serverId !== "" && event.username == 'example-user') {
    response = {
      Role: 'arn:aws:iam::123456789012:role/transfer-access-role', // The user is authenticated if and only if the Role field is not blank
      Policy: '', // Optional, JSON stringified blob to further restrict this user's permissions
      // HomeDirectory format depends on your storage backend:
      // For S3: '/bucket-name/user-home-directory' (e.g., '/my-transfer-bucket/users/john')
      // For EFS: '/fs-12345/user-home-directory' (e.g., '/fs-faa1a123/users/john')
      HomeDirectory: '/my-transfer-bucket/users/example-user' // S3 example - replace with your bucket name
      // HomeDirectory: '/fs-faa1a123/users/example-user' // EFS example - uncomment for EFS
    };
    
    // Check if password is provided
    if (!event.password) {
      // If no password provided, return the user's SSH public key
     response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ];
    // Check if password is correct
    } else if (event.password !== 'Password1234') {
      // Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {};
    } 
  } else {
    // Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {};
  }
  callback(null, response);
};
```

------
#### [ Logical home directory, Python ]

Die folgende Python-Beispielfunktion stellt die Details für einen Benutzer bereit, der über ein [logisches Home-Verzeichnis](https://docs.aws.amazon.com/transfer/latest/userguide/logical-dir-mappings.html) verfügt. 

```
# GetUserConfig Python Lambda with LOGICAL HomeDirectoryDetails
import json

def lambda_handler(event, context):
  print("Username: {}, ServerId: {}".format(event['username'], event['serverId']))

  response = {}

  # Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  if event['serverId'] != '' and event['username'] == 'example-user':
    homeDirectoryDetails = [
      {
        'Entry': '/',
        'Target': '/fs-faa1a123'
      }
    ]
    response = {
      'Role': 'arn:aws:iam::123456789012:role/transfer-access-role', # The user will be authenticated if and only if the Role field is not blank
      'PosixProfile': {"Gid": 65534, "Uid": 65534}, # Required for EFS access, but not needed for S3
      'HomeDirectoryDetails': json.dumps(homeDirectoryDetails),
      'HomeDirectoryType': "LOGICAL"
    }

    # Check if password is provided
    if event.get('password', '') == '':
      # If no password provided, return the user's SSH public key
     response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ]
    # Check if password is correct
    elif event['password'] != 'Password1234':
      # Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {}
  else:
    # Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {}

  return response
```

------
#### [ Path-based home directory, Python ]

Die folgende Python-Beispielfunktion stellt die Details für einen Benutzer bereit, der über ein pfadbasiertes Home-Verzeichnis verfügt. 

```
# GetUserConfig Python Lambda with PATH HomeDirectory

def lambda_handler(event, context):
  print("Username: {}, ServerId: {}".format(event['username'], event['serverId']))

  response = {}

  # Check if the username presented for authentication is correct. This doesn't check the value of the server ID, only that it is provided.
  # There is also event.protocol (one of "FTP", "FTPS", "SFTP") and event.sourceIp (e.g., "127.0.0.1") to further restrict logins.
  if event['serverId'] != '' and event['username'] == 'example-user':
    response = {
      'Role': 'arn:aws:iam::123456789012:role/transfer-access-role', # The user will be authenticated if and only if the Role field is not blank
      'Policy': '', #  Optional, JSON stringified blob to further restrict this user's permissions
      # HomeDirectory format depends on your storage backend:
      # For S3: '/bucket-name/user-home-directory' (e.g., '/my-transfer-bucket/users/john')
      # For EFS: '/fs-12345/user-home-directory' (e.g., '/fs-faa1a123/users/john')
      'HomeDirectory': '/my-transfer-bucket/users/example-user', # S3 example - replace with your bucket name
      # 'HomeDirectory': '/fs-faa1a123/users/example-user', # EFS example - uncomment for EFS
      'HomeDirectoryType': "PATH" # Not strictly required, defaults to PATH
    }
    
    # Check if password is provided
    if event.get('password', '') == '':
      # If no password provided, return the user's SSH public key
     response['PublicKeys'] = [ "ssh-rsa abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" ]
    # Check if password is correct
    elif event['password'] != 'Password1234':
      # Return HTTP status 200 but with no role in the response to indicate authentication failure
      response = {}
  else:
    # Return HTTP status 200 but with no role in the response to indicate authentication failure
    response = {}

  return response
```

------

### Testen Sie Ihre Konfiguration
<a name="authentication-test-configuration"></a>

Nachdem Sie Ihren benutzerdefinierten Identitätsanbieter erstellt haben, sollten Sie Ihre Konfiguration testen.

------
#### [ Console ]

**Um Ihre Konfiguration mit der AWS Transfer Family Konsole zu testen**

1. Öffnen Sie die [AWS Transfer Family -Konsole](https://console.aws.amazon.com/transfer/). 

1. Wählen Sie auf der Seite **Server** Ihren neuen Server aus, klicken Sie auf **Aktionen** und dann auf **Test**.

1. Geben Sie den Text für **Benutzername** und **Passwort ein**, den Sie bei der Bereitstellung des CloudFormation Stacks festgelegt haben. Wenn Sie die Standardoptionen beibehalten haben, lautet der Benutzername `myuser` und das Passwort`MySuperSecretPassword`.

1. Wählen Sie das **Serverprotokoll** und geben Sie die IP-Adresse für **Quell-IP** ein, falls Sie diese bei der Bereitstellung des CloudFormation Stacks festgelegt haben.

------
#### [ CLI ]

**So testen Sie Ihre Konfiguration mit der AWS CLI**

1. Führen Sie den Befehl [test-identity-provider](https://docs.aws.amazon.com/cli/latest/reference/transfer/test-identity-provider.html) aus. Ersetzen Sie jede `user input placeholder` durch Ihre eigenen Informationen, wie in den nachfolgenden Schritten beschrieben.

   ```
   aws transfer test-identity-provider --server-id s-1234abcd5678efgh --user-name myuser --user-password MySuperSecretPassword --server-protocol FTP --source-ip 127.0.0.1
   ```

1. Geben Sie die Server-ID ein.

1. Geben Sie den Benutzernamen und das Passwort ein, die Sie bei der Bereitstellung des CloudFormation Stacks festgelegt haben. Wenn Sie die Standardoptionen beibehalten haben, lautet der Benutzername `myuser` und das Passwort`MySuperSecretPassword`.

1. Geben Sie das Serverprotokoll und die Quell-IP-Adresse ein, falls Sie sie bei der Bereitstellung des CloudFormation Stacks festgelegt haben.

------

Wenn die Benutzerauthentifizierung erfolgreich ist, gibt der Test eine `StatusCode: 200` HTTP-Antwort, eine leere Zeichenfolge `Message: ""` (die andernfalls einen Grund für den Fehler enthalten würde) und ein `Response` Feld zurück.

**Anmerkung**  
 Im Antwortbeispiel unten ist das `Response` Feld ein JSON-Objekt, das „stringifiziert“ wurde (in eine einfache JSON-Zeichenfolge umgewandelt, die innerhalb eines Programms verwendet werden kann) und die Details der Rollen und Berechtigungen des Benutzers enthält.

```
{
    "Response":"{\"Policy\":\"{\\\"Version\\\":\\\"2012-10-17\\\",\\\"Statement\\\":[{\\\"Sid\\\":\\\"ReadAndListAllBuckets\\\",\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\":[\\\"s3:ListAllMybuckets\\\",\\\"s3:GetBucketLocation\\\",\\\"s3:ListBucket\\\",\\\"s3:GetObjectVersion\\\",\\\"s3:GetObjectVersion\\\"],\\\"Resource\\\":\\\"*\\\"}]}\",\"Role\":\"arn:aws:iam::000000000000:role/MyUserS3AccessRole\",\"HomeDirectory\":\"/\"}",
    "StatusCode": 200,
    "Message": ""
}
```

### Lambda-Funktionsvorlagen
<a name="lambda-idp-templates"></a>

Sie können einen CloudFormation Stack bereitstellen, der eine Lambda-Funktion zur Authentifizierung verwendet. Wir stellen mehrere Vorlagen zur Verfügung, mit denen Sie Ihre Benutzer mithilfe von Anmeldeinformationen authentifizieren und autorisieren können. Sie können diese Vorlagen oder den AWS Lambda Code ändern, um den Benutzerzugriff weiter anzupassen.

**Anmerkung**  
Sie können einen FIPS-fähigen AWS Transfer Family Server erstellen, CloudFormation indem Sie in Ihrer Vorlage eine FIPS-fähige Sicherheitsrichtlinie angeben. Die verfügbaren Sicherheitsrichtlinien werden unter beschrieben [Sicherheitsrichtlinien für Server AWS Transfer Family](security-policies.md) 

**Um einen CloudFormation Stack für die Authentifizierung zu erstellen**

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

1. Folgen Sie den Anweisungen zum Bereitstellen eines CloudFormation Stacks aus einer vorhandenen Vorlage unter [Auswahl einer Stack-Vorlage](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-template.html) im *AWS CloudFormation Benutzerhandbuch*.

1. Verwenden Sie eine der folgenden Vorlagen, um eine Lambda-Funktion für die Authentifizierung in Transfer Family zu erstellen. 
   + [Klassische (Amazon Cognito) Stack-Vorlage](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-lambda-cognito-s3.template.yml)

     Eine grundlegende Vorlage zum Erstellen einer Vorlage AWS Lambda zur Verwendung als benutzerdefinierter Identitätsanbieter in AWS Transfer Family. Es authentifiziert sich bei Amazon Cognito für die kennwortbasierte Authentifizierung und öffentliche Schlüssel werden aus einem Amazon S3 S3-Bucket zurückgegeben, wenn eine Authentifizierung auf Basis eines öffentlichen Schlüssels verwendet wird. Nach der Bereitstellung können Sie den Lambda-Funktionscode ändern, um etwas anderes zu tun.
   + [AWS Secrets Manager Vorlage stapeln](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-lambda.template.yml)

     Eine grundlegende Vorlage, die AWS Lambda zusammen mit einem AWS Transfer Family Server verwendet wird, um Secrets Manager als Identitätsanbieter zu integrieren. Sie authentifiziert sich anhand eines Eintrags in AWS Secrets Manager diesem Format`aws/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.
   + [Okta-Stack-Vorlage](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-lambda.template.yml): Eine Basisvorlage, die AWS Lambda zusammen mit einem AWS Transfer Family Server verwendet wird, um Okta als benutzerdefinierten Identitätsanbieter zu integrieren.
   + [Okta-MFA-Stack-Vorlage](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-mfa-lambda.template.yml): Eine Basisvorlage, die AWS Lambda zusammen mit einem AWS Transfer Family Server zur Integration von Okta mit Multi-Faktor-Authentifizierung als benutzerdefiniertem Identitätsanbieter verwendet wird.
   + [Azure Active Directory-Vorlage](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-lambda-azure-ad.template.yml): Einzelheiten zu diesem Stack werden im Blogbeitrag [Authentifizierung AWS Transfer Family mit](https://aws.amazon.com/blogs/storage/authenticating-to-aws-transfer-family-with-azure-active-directory-and-aws-lambda/) Azure Active Directory und beschrieben. AWS Lambda

   Nachdem der Stack bereitgestellt wurde, können Sie Details dazu auf der Registerkarte **Ausgaben** in der CloudFormation Konsole einsehen.

   Die Bereitstellung eines dieser Stacks ist der einfachste Weg, einen benutzerdefinierten Identitätsanbieter in den Transfer Family Family-Workflow zu integrieren.