

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Menggunakan AWS Lambda untuk mengintegrasikan penyedia identitas Anda
<a name="custom-lambda-idp"></a>

Topik ini menjelaskan cara membuat AWS Lambda fungsi yang terhubung ke penyedia identitas kustom Anda. Anda dapat menggunakan penyedia identitas kustom apa pun, seperti Okta, Secrets Manager OneLogin, atau penyimpanan data khusus yang menyertakan logika otorisasi dan otentikasi.

Untuk sebagian besar kasus penggunaan, cara yang disarankan untuk mengonfigurasi penyedia identitas khusus adalah dengan menggunakan[Solusi penyedia identitas khusus](custom-idp-toolkit.md).

**catatan**  
Sebelum membuat server Transfer Family yang menggunakan Lambda sebagai penyedia identitas, Anda harus membuat fungsinya. Untuk contoh fungsi Lambda, lihat. [Contoh fungsi Lambda](#lambda-auth-examples) Atau, Anda dapat menerapkan CloudFormation tumpukan yang menggunakan salah satu. [Template fungsi Lambda](#lambda-idp-templates) Selain itu, pastikan fungsi Lambda Anda menggunakan kebijakan berbasis sumber daya yang mempercayai Transfer Family. Untuk contoh kebijakan, lihat [Kebijakan berbasis sumber daya Lambda](#lambda-resource-policy).

1. Buka [konsol AWS Transfer Family](https://console.aws.amazon.com/transfer/).

1. Pilih **Buat server** untuk membuka halaman **Buat server**. Untuk **Pilih penyedia identitas**, pilih **Penyedia Identitas Kustom**, seperti yang ditunjukkan pada gambar berikut.  
![\[Bagian Pilih konsol penyedia identitas dengan Penyedia identitas kustom dipilih. Juga memiliki nilai default yang dipilih, yaitu bahwa pengguna dapat mengautentikasi menggunakan kata sandi atau kunci mereka.\]](http://docs.aws.amazon.com/id_id/transfer/latest/userguide/images/custom-lambda-console.png)
**catatan**  
Pilihan metode otentikasi hanya tersedia jika Anda mengaktifkan SFTP sebagai salah satu protokol untuk server Transfer Family Anda.

1. Pastikan nilai default, **Gunakan AWS Lambda untuk menghubungkan penyedia identitas Anda**, dipilih.

1. Untuk **AWS Lambda fungsi**, pilih nama fungsi Lambda Anda.

1. Isi kotak yang tersisa, lalu pilih **Buat server**. Untuk detail tentang langkah-langkah yang tersisa untuk membuat server, lihat[Mengkonfigurasi titik akhir server SFTP, FTPS, atau FTP](tf-server-endpoint.md).

## Kebijakan berbasis sumber daya Lambda
<a name="lambda-resource-policy"></a>

Anda harus memiliki kebijakan yang mereferensikan server Transfer Family dan Lambda ARNs. Misalnya, Anda dapat menggunakan kebijakan berikut dengan fungsi Lambda yang terhubung ke penyedia identitas Anda. Kebijakan ini lolos dari JSON sebagai string.

****  

```
"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\"}}}
]}"
```

**catatan**  
Dalam contoh kebijakan di atas, ganti masing-masing *user input placeholder* dengan informasi Anda sendiri.

## Struktur pesan peristiwa
<a name="event-message-structure"></a>

Struktur pesan acara dari server SFTP yang dikirim ke fungsi Lambda otorisasi untuk IDP kustom adalah sebagai berikut.

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

Di mana `username` dan `password` merupakan nilai untuk kredensyal masuk yang dikirim ke server.

Misalnya, Anda memasukkan perintah berikut untuk menghubungkan:

```
sftp bobusa@server_hostname
```

Anda kemudian diminta untuk memasukkan kata sandi Anda:

```
Enter password:
    mysecretpassword
```

Anda dapat memeriksa ini dari fungsi Lambda Anda dengan mencetak peristiwa yang diteruskan dari dalam fungsi Lambda. Seharusnya terlihat mirip dengan blok teks berikut.

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

Struktur acara serupa untuk FTP dan FTPS: satu-satunya perbedaan adalah nilai-nilai tersebut digunakan untuk `protocol` parameter, bukan SFTP.

## Fungsi Lambda untuk otentikasi
<a name="authentication-lambda-examples"></a>

Untuk menerapkan strategi otentikasi yang berbeda, edit fungsi Lambda. Untuk membantu Anda memenuhi kebutuhan aplikasi Anda, Anda dapat menerapkan CloudFormation tumpukan. Untuk informasi selengkapnya tentang Lambda, lihat [Panduan AWS Lambda Pengembang](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) atau Membangun fungsi [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html) dengan Node.js.

**Topics**
+ [Nilai Lambda yang valid](#lambda-valid-values)
+ [Contoh fungsi Lambda](#lambda-auth-examples)
+ [Menguji konfigurasi Anda](#authentication-test-configuration)
+ [Template fungsi Lambda](#lambda-idp-templates)

### Nilai Lambda yang valid
<a name="lambda-valid-values"></a>

Tabel berikut menjelaskan detail nilai yang diterima Transfer Family untuk fungsi Lambda yang digunakan untuk penyedia identitas kustom.


|  Nilai  |  Deskripsi  |  Diperlukan  | 
| --- | --- | --- | 
|  `Role`  |  Menentukan Nama Sumber Daya Amazon (ARN) dari peran IAM yang mengontrol akses pengguna ke bucket Amazon S3 atau sistem file Amazon EFS. Kebijakan yang dilampirkan pada peran ini menentukan tingkat akses yang ingin Anda berikan kepada pengguna saat mentransfer file masuk dan keluar dari sistem file Amazon S3 atau Amazon EFS Anda. IAM role juga harus berisi hubungan kepercayaan yang mengizinkan server untuk mengakses sumber daya Anda saat melayani permintaan transfer pengguna. Untuk detail tentang membangun hubungan kepercayaan, lihat[Untuk membangun hubungan kepercayaan](requirements-roles.md#establish-trust-transfer).  |  Diperlukan  | 
|  `PosixProfile`  |  Identitas POSIX lengkap, termasuk ID pengguna (`Uid`), ID grup (`Gid`), dan grup sekunder IDs (`SecondaryGids`) apa pun, yang mengontrol akses pengguna ke sistem file Amazon EFS Anda. POSIX izin yang ditetapkan pada file dan direktori dalam sistem file Anda menentukan tingkat akses pengguna Anda mendapatkan ketika mentransfer file ke dalam dan keluar dari sistem file Amazon EFS Anda.  |  Diperlukan untuk penyimpanan dukungan Amazon EFS  | 
|  `PublicKeys`  |  Daftar nilai kunci publik SSH yang valid untuk pengguna ini. Daftar kosong menyiratkan bahwa ini bukan login yang valid. Tidak boleh dikembalikan selama otentikasi kata sandi.  |  Opsional  | 
|  `Policy`  |  Kebijakan sesi untuk pengguna Anda sehingga Anda dapat menggunakan peran IAM yang sama di beberapa pengguna. Kebijakan ini mencakup bawah akses pengguna ke bagian dari bucket Amazon S3 mereka. Untuk informasi selengkapnya tentang penggunaan kebijakan sesi dengan penyedia identitas kustom, lihat contoh kebijakan sesi dalam topik ini.  |  Opsional  | 
|  `HomeDirectoryType`  |  Jenis direktori pendaratan (folder) yang Anda inginkan direktori home pengguna Anda ketika mereka masuk ke server. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/transfer/latest/userguide/custom-lambda-idp.html)  |  Opsional  | 
|  `HomeDirectoryDetails`  |  Pemetaan direktori logis yang menentukan jalur dan kunci Amazon S3 atau Amazon EFS mana yang harus terlihat oleh pengguna Anda dan bagaimana Anda ingin membuatnya terlihat. Anda harus menentukan `Entry` dan `Target` memasangkan, di mana `Entry` menunjukkan bagaimana jalur dibuat terlihat dan `Target` merupakan jalur Amazon S3 atau Amazon EFS yang sebenarnya.  |  Diperlukan jika `HomeDirectoryType` memiliki nilai `LOGICAL`  | 
|  `HomeDirectory`  |  Direktori pendaratan untuk pengguna ketika mereka masuk ke server menggunakan klien. Formatnya tergantung pada backend penyimpanan Anda: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/transfer/latest/userguide/custom-lambda-idp.html)  Nama bucket atau ID sistem file Amazon EFS harus disertakan dalam path. Menghilangkan informasi ini akan mengakibatkan kesalahan “File tidak ditemukan” selama transfer file.   |  Opsional  | 

**catatan**  
`HomeDirectoryDetails`adalah representasi string dari peta JSON. Hal ini berbeda dengan`PosixProfile`, yang merupakan objek peta JSON yang sebenarnya, dan `PublicKeys` yang merupakan array JSON string. Lihat contoh kode untuk detail khusus bahasa.

**HomeDirectory Persyaratan Format**  
Saat menggunakan `HomeDirectory` parameter, pastikan Anda menyertakan format jalur lengkap:  
**Untuk penyimpanan Amazon S3:** Selalu sertakan nama bucket dalam format `/bucket-name/path`
**Untuk penyimpanan Amazon EFS:** Selalu sertakan ID sistem file dalam format `/fs-12345/path`
Penyebab umum kesalahan “File tidak ditemukan” adalah menghilangkan nama bucket atau ID sistem file EFS dari `HomeDirectory` jalur. Pengaturan `HomeDirectory` ke hanya `/` tanpa pengenal penyimpanan akan menyebabkan otentikasi berhasil tetapi operasi file gagal.

### Contoh fungsi Lambda
<a name="lambda-auth-examples"></a>

Bagian ini menyajikan beberapa contoh fungsi Lambda, baik di NodeJS maupun Python.

**catatan**  
Dalam contoh ini, detail direktori pengguna, peran, profil POSIX, kata sandi, dan home directory adalah contoh, dan harus diganti dengan nilai aktual Anda.

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

[Fungsi contoh NodeJS berikut memberikan rincian untuk pengguna yang memiliki direktori home logis.](https://docs.aws.amazon.com/transfer/latest/userguide/logical-dir-mappings.html) 

```
// 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 ]

Fungsi contoh NodeJS berikut memberikan rincian untuk pengguna yang memiliki direktori home berbasis jalur. 

```
// 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 ]

Contoh fungsi Python berikut memberikan rincian untuk pengguna yang memiliki direktori [home logis](https://docs.aws.amazon.com/transfer/latest/userguide/logical-dir-mappings.html). 

```
# 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 ]

Contoh fungsi Python berikut memberikan rincian untuk pengguna yang memiliki direktori home berbasis jalur. 

```
# 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
```

------

### Menguji konfigurasi Anda
<a name="authentication-test-configuration"></a>

Setelah Anda membuat penyedia identitas kustom Anda, Anda harus menguji konfigurasi Anda.

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

**Untuk menguji konfigurasi Anda dengan menggunakan AWS Transfer Family konsol**

1. Buka [konsol AWS Transfer Family](https://console.aws.amazon.com/transfer/). 

1. Pada halaman **Server**, pilih server baru Anda, pilih **Tindakan**, lalu pilih **Uji**.

1. Masukkan teks untuk **Nama Pengguna** dan **Kata Sandi** yang Anda atur saat Anda menerapkan CloudFormation tumpukan. Jika Anda menyimpan opsi default, nama pengguna adalah `myuser` dan kata sandinya`MySuperSecretPassword`.

1. Pilih **protokol Server** dan masukkan alamat IP untuk **IP Sumber**, jika Anda mengaturnya saat Anda menerapkan CloudFormation tumpukan.

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

**Untuk menguji konfigurasi Anda dengan menggunakan AWS CLI**

1. Jalankan perintah [test-identity-provider](https://docs.aws.amazon.com/cli/latest/reference/transfer/test-identity-provider.html). Ganti masing-masing `user input placeholder` dengan informasi Anda sendiri, seperti yang dijelaskan dalam langkah-langkah selanjutnya.

   ```
   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. Masukkan ID server.

1. Masukkan nama pengguna dan kata sandi yang Anda tetapkan saat Anda menerapkan CloudFormation tumpukan. Jika Anda menyimpan opsi default, nama pengguna adalah `myuser` dan kata sandinya`MySuperSecretPassword`.

1. Masukkan protokol server dan alamat IP sumber, jika Anda mengaturnya saat Anda menerapkan CloudFormation tumpukan.

------

Jika otentikasi pengguna berhasil, pengujian mengembalikan respons `StatusCode: 200` HTTP, string kosong `Message: ""` (yang akan berisi alasan kegagalan jika tidak), dan bidang. `Response`

**catatan**  
 Dalam contoh respons di bawah ini, `Response` bidang adalah objek JSON yang telah “dirangkai” (diubah menjadi string JSON datar yang dapat digunakan di dalam program), dan berisi rincian peran dan izin pengguna.

```
{
    "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": ""
}
```

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

Anda dapat menerapkan CloudFormation tumpukan yang menggunakan fungsi Lambda untuk otentikasi. Kami menyediakan beberapa templat yang mengautentikasi dan mengotorisasi pengguna Anda menggunakan kredensyal masuk. Anda dapat memodifikasi template atau AWS Lambda kode ini untuk lebih menyesuaikan akses pengguna.

**catatan**  
Anda dapat membuat AWS Transfer Family server berkemampuan FIPS CloudFormation dengan menentukan kebijakan keamanan berkemampuan FIPS di template Anda. Kebijakan keamanan yang tersedia dijelaskan dalam [Kebijakan keamanan untuk AWS Transfer Family server](security-policies.md) 

**Untuk membuat CloudFormation tumpukan yang akan digunakan untuk otentikasi**

1. Buka CloudFormation konsol di [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Ikuti petunjuk untuk menerapkan CloudFormation tumpukan dari template yang ada di [Memilih template tumpukan](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console-create-stack-template.html) di *Panduan AWS CloudFormation Pengguna*.

1. Gunakan salah satu templat berikut untuk membuat fungsi Lambda yang akan digunakan untuk otentikasi di Transfer Family. 
   + [Templat tumpukan klasik (Amazon Cognito)](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-lambda-cognito-s3.template.yml)

     Template dasar untuk membuat AWS Lambda untuk digunakan sebagai penyedia identitas kustom di AWS Transfer Family. Ini mengautentikasi terhadap Amazon Cognito untuk otentikasi berbasis kata sandi dan kunci publik dikembalikan dari bucket Amazon S3 jika otentikasi berbasis kunci publik digunakan. Setelah penerapan, Anda dapat memodifikasi kode fungsi Lambda untuk melakukan sesuatu yang berbeda.
   + [AWS Secrets Manager template tumpukan](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-secrets-manager-lambda.template.yml)

     Template dasar yang digunakan AWS Lambda dengan AWS Transfer Family server untuk mengintegrasikan Secrets Manager sebagai penyedia identitas. Ini mengotentikasi terhadap entri dalam AWS Secrets Manager format`aws/transfer/server-id/username`. Selain itu, secret harus menyimpan pasangan kunci-nilai untuk semua properti pengguna yang dikembalikan ke Transfer Family. Setelah penerapan, Anda dapat memodifikasi kode fungsi Lambda untuk melakukan sesuatu yang berbeda.
   + [Template tumpukan Okta](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-lambda.template.yml): Template dasar yang digunakan AWS Lambda dengan AWS Transfer Family server untuk mengintegrasikan Okta sebagai penyedia identitas khusus.
   + [Template tumpukan Okta-MFA: Template](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-okta-mfa-lambda.template.yml) dasar yang digunakan AWS Lambda dengan AWS Transfer Family server untuk mengintegrasikan Okta, dengan Multi Factor Authentication, sebagai penyedia identitas khusus.
   + [Template Azure Active Directory](https://s3.amazonaws.com/aws-transfer-resources/custom-idp-templates/aws-transfer-custom-idp-basic-lambda-azure-ad.template.yml): detail untuk tumpukan ini dijelaskan dalam posting blog [Mengautentikasi AWS Transfer Family dengan Azure Active](https://aws.amazon.com/blogs/storage/authenticating-to-aws-transfer-family-with-azure-active-directory-and-aws-lambda/) Directory dan. AWS Lambda

   Setelah tumpukan dikerahkan, Anda dapat melihat detailnya di tab **Output** di CloudFormation konsol.

   Menerapkan salah satu tumpukan ini adalah cara termudah untuk mengintegrasikan penyedia identitas kustom ke dalam alur kerja Transfer Family.